第218章 Dynamic Action|动态动作
第217章已经正式确定:
Method
↓
Behavior
↓
Behavior State
↓
Action
并明确:
Behavior ≠ Action
第218章继续向下建立:
Action 不是预先固定的执行指令,而是可以根据实时 State、Observation 和 Feedback 动态调整的执行单元。
因此:
Behavior
↓
Behavior State
↓
Dynamic Action
↓
Execution
↓
Observation
↓
Feedback
↺
218.1 Dynamic Action 的定义
传统 Action:
Action
↓
执行
↓
结束
Dynamic Action:
Action
↓
执行
↓
观察
↓
判断
↓
调整
↓
继续执行
因此定义:
Dynamic Action 是能够根据实时状态和执行反馈,在执行过程中动态计算其参数、路径、强度、方向、目标或下一步操作的 Action。
核心不是“动作更多”,而是:
Action(t+1)
=
F(
Action(t),
State(t),
Observation(t),
Feedback(t)
)
218.2 Action 不再是静态指令
例如:
MoveToTarget
传统方式可能是:
目标 = B
速度 = 1.0
方向 = X
一次确定。
Dynamic Action 则是:
目标 = B
当前距离 = 10
↓
速度 = 1.0
当前距离 = 5
↓
速度 = 0.6
当前距离 = 1
↓
速度 = 0.2
因此:
同一个 Action
+
不同实时状态
=
不同执行参数
218.3 Dynamic Action 与 Behavior
必须保持:
Behavior ≠ Action
现在进一步:
Behavior
↓
决定行为过程
Behavior State
↓
决定当前行为阶段
Dynamic Action
↓
根据当前实时状态计算具体动作
例如:
Behavior:
MoveObject
State:
Move
Action:
MoveObjectAction
Action 执行过程中:
Observation
↓
distance
↓
obstacle
↓
velocity
↓
position
不断重新计算:
MoveObjectAction
因此:
Behavior
是连续过程
Action
是过程中的动态执行单元
218.4 Action 的实时状态输入
Dynamic Action 至少可以接收:
Current State
Observation
Target State
Environment State
Previous Action Result
Constraints
形成:
Current State
│
▼
Observation ──→ Dynamic Action ←── Constraint
│
▼
Execute
│
▼
Result
│
▼
Feedback
│
└──────→ Dynamic Action
218.5 Dynamic Action 的核心对象
可以建立:
class DynamicAction extends Action
{
protected array $parameters = [];
protected array $runtimeState = [];
protected array $observations = [];
protected array $feedback = [];
protected string $status = 'ready';
public function updateState(
array $state
): void {
$this->runtimeState = $state;
}
public function observe(
array $observation
): void {
$this->observations[] = $observation;
}
public function updateFeedback(
array $feedback
): void {
$this->feedback[] = $feedback;
}
public function calculateParameters(): array
{
return $this->parameters;
}
}
第一版不需要把复杂控制算法全部写进去。
先建立:
Action
├── parameters
├── runtimeState
├── observation
├── feedback
└── calculation
218.6 Dynamic Action 的参数计算
普通 Action:
Move(speed=1)
Dynamic Action:
speed = calculate(
distance,
obstacle,
current_velocity,
target
)
例如:
public function calculateParameters(): array
{
$distance =
$this->runtimeState['distance']
?? 0;
if ($distance > 10) {
$speed = 1.0;
} elseif ($distance > 3) {
$speed = 0.5;
} else {
$speed = 0.2;
}
return [
'speed' => $speed
];
}
这里真正发生的是:
Runtime State
↓
Parameter Calculation
↓
Action Parameters
218.7 Dynamic Action 不等于随机动作
必须明确:
Dynamic ≠ Random
Dynamic Action 的变化必须具有计算依据:
State
+
Observation
+
Constraint
+
Feedback
因此:
State A → Parameter A
State B → Parameter B
而不是:
State A → 随机 Parameter
这使 ICAI 的 Dynamic Action 保持机器逻辑上的可解释性和可复现性。
218.8 Action Execution Cycle
Dynamic Action 的基本生命周期:
Prepare
↓
Observe
↓
Calculate
↓
Execute
↓
Observe
↓
Evaluate
↓
Adjust
↓
Execute Again
可以形成:
┌───────────────┐
│ Observe │
└───────┬───────┘
↓
┌───────────────┐
│ Calculate │
└───────┬───────┘
↓
┌───────────────┐
│ Execute │
└───────┬───────┘
↓
┌───────────────┐
│ Feedback │
└───────┬───────┘
↓
Adjust?
/ \
Yes No
│ │
└──→─────┘
这就是 Dynamic Action 的核心。
218.9 Action Adjustment
动作调整可以发生在不同层面。
参数调整
speed
force
duration
threshold
方向调整
direction
trajectory
target_position
执行顺序调整
Action A
↓
Action B
变成:
Action A
↓
Action C
↓
Action B
动作终止
Continue
↓
Stop
动作替换
Action A
↓
Action B
因此 Dynamic Action 不仅仅是:
调整参数
而可以调整:
执行方式
218.10 Dynamic Action 与 Behavior State
行为状态决定 Action 的上下文。
例如:
Behavior:
MoveObject
State:
Approach
Action:
MoveTowardTarget
进入:
Contact
Action 变成:
DetectContact
进入:
Grasp
Action:
EstablishControl
因此:
Behavior State
↓
Action Selection
↓
Dynamic Action
注意这里仍然不能混淆:
Behavior State
不是 Action。
218.11 Dynamic Action 可以持续调整
例如:
Move
当前:
distance = 20
执行:
speed = 1.0
实时观察:
distance = 10
调整:
speed = 0.7
再次观察:
obstacle = detected
调整:
direction = alternative
speed = 0.3
继续:
distance = 1
调整:
speed = 0.1
最终:
target_reached = true
Action:
Complete
整个过程中:
Action 没有被简单地执行一次。
Action 本身不断重新计算。
这就是:
Dynamic Action
218.12 Action 与 Feedback
第218章开始建立:
Action
↓
Feedback
↓
Action Adjustment
这意味着 Feedback 不只用于:
Behavior State
也可以直接影响:
Action
形成两个不同层级的反馈:
Feedback
│
├──→ Action Adjustment
│
└──→ Behavior State Transition
例如:
障碍物出现
可能导致:
Action:
改变方向
而:
目标消失
可能导致:
Behavior State:
Failure
因此:
Action-level response
和:
Behavior-level response
必须保持区分。
218.13 Dynamic Action 的三个层次
可以把 Dynamic Action 分成三层:
Level 1:Parameter Adaptation
Action 不变
参数改变
例如:
Move
speed:
1.0 → 0.5 → 0.2
Level 2:Execution Adjustment
Action 类型不变
执行方式改变
例如:
Move
trajectory A
↓
trajectory B
Level 3:Action Replacement
当前 Action
↓
新 Action
例如:
Move
↓
ObstacleDetected
↓
AvoidObstacle
第三层已经开始接近:
Action Selection
因此必须为后续章节保留边界。
218.14 Dynamic Action 与 Action Selection
两者不能混为一谈。
Action Selection
解决:
当前应该执行哪个 Action?
而:
Dynamic Action
解决:
已经执行的 Action,面对实时变化应该如何调整?
例如:
Behavior State = Move
首先:
Action Selection
↓
选择 MoveAction
然后:
MoveAction
↓
实时观察
↓
调整速度
↓
调整方向
↓
继续执行
所以:
Action Selection
→ 选 Action
Dynamic Action
→ 调整 Action
218.15 Dynamic Action 与 Device
最终 Action 才与 Device 建立执行接口:
Dynamic Action
↓
Execution Command
↓
Device
↓
Physical / Digital Result
例如:
Dynamic Action
{
direction: 0.42,
speed: 0.3
}
转换为:
Device Command
然后 Device 返回:
Observation
形成:
Dynamic Action
↓
Device
↓
Observation
↓
Dynamic Action
218.16 Action Runtime
因此 Action 需要运行时状态:
Action Runtime
例如:
{
"status": "executing",
"start_time": 123456,
"elapsed": 2.4,
"progress": 0.72,
"parameters": {
"speed": 0.3
},
"observation": {
"distance": 1.8
}
}
这样 Action 就拥有:
Identity
+
Definition
+
Runtime State
而不是简单:
Action = function()
218.17 Dynamic Action 的基本接口
可以建立:
interface DynamicActionInterface
{
public function observe(
array $observation
): void;
public function updateState(
array $state
): void;
public function calculateParameters():
array;
public function adjust(): void;
public function execute(): array;
public function isComplete(): bool;
}
这样任何 Dynamic Action 都遵循:
Observe
↓
Update
↓
Calculate
↓
Adjust
↓
Execute
218.18 一个完整 Dynamic Action
class MoveAction implements DynamicActionInterface
{
protected array $state = [];
protected array $observation = [];
protected array $parameters = [];
public function observe(
array $observation
): void {
$this->observation = $observation;
}
public function updateState(
array $state
): void {
$this->state = $state;
}
public function calculateParameters():
array
{
$distance =
$this->observation['distance']
?? 0;
$speed = min(
1.0,
max(0.1, $distance / 10)
);
$this->parameters = [
'speed' => $speed
];
return $this->parameters;
}
public function adjust(): void
{
$this->calculateParameters();
}
public function execute(): array
{
return [
'action' => 'move',
'parameters' => $this->parameters
];
}
public function isComplete(): bool
{
return
($this->observation['target_reached']
?? false) === true;
}
}
这里已经形成最小的动态动作模型:
Observation
↓
Parameter Calculation
↓
Adjustment
↓
Execution
↓
New Observation
218.19 Dynamic Action 与实时性
这里的“实时”不一定意味着毫秒级实时。
ICAI 中:
Real-Time
更基础的定义应该是:
动作参数依据当前可获得的最新状态重新计算,而不是完全依赖动作开始之前的固定参数。
因此:
State₀
↓
Action₀
↓
Observation₁
↓
Action₁
↓
Observation₂
↓
Action₂
这是:
State-dependent Action
而不是:
Predefined Action
218.20 第218章最终模型
现在 ICAI 执行链进一步变成:
Method
↓
Behavior
↓
Behavior State
↓
Action Selection
↓
Dynamic Action
↓
Execution
↓
Observation
↓
Feedback
├──────────────→ Dynamic Action Adjustment
│
└──────────────→ Behavior State Transition
核心关系:
Behavior
=
行为过程
Behavior State
=
行为阶段
Action
=
具体动作
Dynamic Action
=
根据实时状态动态调整的具体动作
218.21 本章核心公式
可以正式定义:
Aₜ = F(Sₜ, Oₜ, Cₜ, Aₜ₋₁)
其中:
Aₜ = 当前 Action
Sₜ = 当前 State
Oₜ = 当前 Observation
Cₜ = 当前 Constraint
Aₜ₋₁ = 上一次 Action 状态
执行后:
Oₜ₊₁
产生新的反馈:
Feedbackₜ₊₁
于是:
Aₜ
↓
Execute
↓
Oₜ₊₁
↓
Feedback
↓
Aₜ₊₁
形成动态动作循环。
218.22 第218章最终确定的边界
Method
↓
“采用什么方法”
Behavior
↓
“进行什么行为过程”
Behavior State
↓
“行为现在处于哪个阶段”
Action Selection
↓
“当前具体执行哪个动作”
Dynamic Action
↓
“这个动作根据实时状态如何调整”
Device
↓
“实际执行”
因此第218章最核心的定义不是“动作可以变化”,而是:
Action 从一个预定义的静态执行指令,升级为一个能够读取实时状态、计算当前参数、执行、接收反馈并再次调整的动态执行对象。
最终形成:
Behavior
↓
Behavior State
↓
Dynamic Action
↓
Observe
↓
Calculate
↓
Execute
↓
Feedback
↺
这一步完成后,ICAI 的 Behavior → Action 已经从静态调用关系变成了一个真正的状态驱动执行循环。