第17章 State
本章大纲
- State 定义
- 自身状态
- 环境状态
- 行为状态
- 设备状态
- 状态属性
- 状态变化
- 状态历史
- 状态判断
- State 类实现
- 状态运行示例
17.1 State 定义
在第16章中,我们定义了 Individual 的 Identity。
Identity 解决的是:
我是谁?
而 State 解决的是:
我现在是什么状态?
**State(状态)**用于描述某一个对象、Individual、设备或环境在某一时刻所处的动态情况。
因此可以定义:
State 是 SAI Framework 用于描述对象、Individual、设备和环境当前动态状态及其变化的软件结构。
State 与 Property 有明显区别:
Property
→ 描述对象具有的属性
State
→ 描述对象当前的状态
例如:
Fan
├── Property
│ ├── name
│ ├── model
│ └── power
│
└── State
├── on/off
└── speed
状态最大的特点是:
状态会随着时间、环境、行为和事件不断变化。
例如:
OFF
↓
ON
↓
OFF
17.2 自身状态
Individual 首先具有自己的自身状态。
例如:
Individual
├── status = running
├── mode = normal
├── energy = 80
└── task = monitoring
可以把自身状态分为:
自身状态
├── 运行状态
├── 工作状态
├── 能源状态
├── 当前任务
├── 当前模式
└── 当前异常状态
例如:
status = running
mode = normal
energy = 80
task = monitoring
这些状态描述的是 Individual 自己。
Individual 状态可能发生:
ready
↓
running
↓
busy
↓
idle
也可能:
normal
↓
warning
↓
error
↓
repairing
↓
normal
因此 State 是 Individual 生命周期的重要组成部分。
17.3 环境状态
Individual 不仅需要知道自身状态,还需要知道外部环境状态。
例如:
Room
├── temperature = 32
├── humidity = 70
├── light = low
└── people = 2
这些属于环境状态。
环境状态可以包括:
环境状态
├── 温度
├── 湿度
├── 光照
├── 空间
├── 位置
├── 人员
├── 物体
├── 距离
├── 运动
└── 其他环境条件
例如机器人:
Environment
├── road = clear
├── obstacle = detected
├── distance = 5m
└── weather = rain
这些状态可以通过:
Sensor
SceneCollector
InformationReceiver
不断获取。
然后进入:
Information
↓
Perception
↓
Object / State
因此环境状态是 Individual 认知外部世界的重要基础。
17.4 行为状态
Behavior 执行过程中也具有状态。
例如:
Behavior
├── type = move
├── target = room02
└── state = running
行为状态可以包括:
pending
running
completed
failed
cancelled
timeout
例如:
Move
↓
pending
↓
running
↓
completed
如果发生异常:
Move
↓
running
↓
failed
行为状态非常重要,因为 Decision 和后续 Behavior 需要知道之前的行为是否已经完成。
例如:
IF
fan.turnOn.state = completed
THEN
continue_monitoring
或者:
IF
move.state = failed
THEN
diagnose
因此:
Decision
↓
Behavior
↓
Behavior State
↓
Feedback
构成行为执行闭环。
17.5 设备状态
外部设备也具有自己的 State。
例如:
Fan
├── state = ON
├── speed = 3
└── temperature = 29
机器人:
Robot
├── power = ON
├── position = A01
├── speed = 2
├── direction = EAST
└── state = MOVING
车辆:
Vehicle
├── engine = ON
├── speed = 60
├── direction = EAST
└── state = DRIVING
设备状态通常来自:
Device
↓
Sensor
↓
Device Information
↓
InformationReceiver
↓
Perception
↓
State
也可以来自设备执行结果:
Action
↓
Device
↓
Device Response
↓
Feedback
↓
State Update
所以设备状态不是 Individual 主观设定出来的,而应该尽可能来源于实际设备信息和反馈。
17.6 状态属性
State 本身也可以具有多个属性。
例如:
State
├── name
├── value
├── source
├── time
└── confidence
一个状态可以表示为:
array(
'name' => 'temperature',
'value' => 32,
'source' => 'sensor01',
'time' => time()
);
例如:
temperature
value = 32
source = sensor01
time = 10:30:00
对于动态系统,还可以记录:
previous_value
current_value
changed_at
例如:
temperature
previous = 30
current = 32
changed_at = 10:30:00
这样系统不仅知道:
当前是多少
还知道:
之前是多少
从而能够判断状态是否发生变化。
17.7 状态变化
State 的核心特征就是变化。
例如风扇:
OFF
↓
ON
温度:
30℃
↓
32℃
机器人:
STOPPED
↓
MOVING
状态变化可以表示为:
Old State
↓
Event / Action
↓
New State
例如:
Fan OFF
↓
turnOn()
↓
Fan ON
代码:
$state->set(
'fan01',
'power',
'OFF'
);
$state->set(
'fan01',
'power',
'ON'
);
更完整的状态变化记录:
fan01.power
OFF
↓
ON
变化本身也可以成为 Information:
State Change
↓
Information
↓
Perception
↓
Cognition
这样 SAI 就能够感知自身行为造成的状态变化。
17.8 状态历史
如果只保存当前状态:
temperature = 32
系统不知道它之前发生了什么。
因此可以保存状态历史:
State History
10:00 → 28℃
10:10 → 30℃
10:20 → 32℃
10:30 → 29℃
形成:
28
↓
30
↓
32
↓
29
State History 可以用于:
趋势分析
异常检测
经验形成
行为反馈
诊断
学习
例如:
Fan ON
↓
32℃
↓
29℃
系统可以把这一状态变化与行为联系起来:
Behavior:
fan.turnOn()
State Change:
temperature 32 → 29
然后形成 Experience:
Condition
↓
Action
↓
State Change
↓
Result
所以 State History 是 Experience 和 Learning 的重要数据来源之一。
17.9 状态判断
State 本身只是描述状态。
真正的判断可以由其他 Engine 完成。
例如:
temperature = 32
这是 State。
判断:
temperature > 30
则属于条件判断。
可以进入:
ReasoningEngine
例如:
State
temperature = 32
↓
Condition
temperature > 30
↓
Rule
fan.turnOn
↓
ReasoningEngine
也可以由 DecisionEngine 判断:
energy = 15
↓
Risk
↓
Priority
↓
Decision
因此必须明确:
State ≠ Reasoning
State ≠ Decision
State 提供判断所需要的数据。
17.10 State 类实现
下面设计一个简单的 State 类。
说明:以下 PHP 代码为教程示例,用于说明 State 的 OOP 设计,并非已经实际验证运行。
<?php
namespace SAI\Individual;
class State
{
protected $states = array();
public function set($name, $value)
{
$this->states[$name] = array(
'value' => $value,
'time' => time()
);
}
public function get($name)
{
if (!isset($this->states[$name])) {
return null;
}
return $this->states[$name]['value'];
}
public function has($name)
{
return isset($this->states[$name]);
}
public function all()
{
return $this->states;
}
}
使用:
$state = new State();
$state->set(
'status',
'running'
);
$state->set(
'energy',
80
);
$state->set(
'mode',
'normal'
);
读取:
echo $state->get('status');
得到:
running
全部状态:
print_r($state->all());
逻辑结构:
State
├── status = running
├── energy = 80
└── mode = normal
17.11 状态运行示例
下面使用一个房间环境作为完整示例。
初始状态:
Individual
status = running
Room
temperature = 32
Fan
state = OFF
第一步:获取环境状态
Temperature Sensor
↓
temperature = 32
↓
Information
第二步:形成 State
Room
temperature = 32
以及:
Fan
state = OFF
第三步:状态判断
规则:
IF
Room.temperature > 30
AND
Fan.state = OFF
THEN
Fan.turnOn()
进入:
ReasoningEngine
得到:
Fan should turn on
第四步:形成 Decision
Decision
↓
Fan.turnOn()
第五步:形成 Behavior
Behavior
↓
TurnOnFan
第六步:执行 Action
fan01.turnOn()
设备状态发生变化:
OFF
↓
ON
State 更新:
Fan.state = ON
第七步:环境发生变化
风扇运行之后:
Room.temperature
32℃
↓
29℃
State History:
32℃
↓
29℃
第八步:反馈
Device
↓
Feedback
↓
Information
↓
Perception
系统获得:
Fan = ON
Temperature = 29℃
第九步:经验
最终形成:
场景:
Room.temperature = 32
状态:
Fan = OFF
行为:
Fan.turnOn()
结果:
Temperature = 29℃
可以形成:
Experience
随后:
Experience
↓
LearningEngine
↓
Memory Update
State 完整运行关系
整个过程可以表示为:
External World
│
▼
Environment
State
│
▼
Information
│
▼
Perception
│
▼
Cognition
│
▼
Reasoning
│
▼
Decision
│
▼
Behavior
│
▼
Action
│
▼
Device
│
▼
State Change
│
▼
Feedback
│
▼
Experience
│
▼
Learning
与此同时,Individual 自身也存在状态:
Individual
│
├── Identity
├── State
├── Ability
├── Memory
├── Cognition
├── Learning
└── Behavior
所以 State 横跨整个 Individual 运行过程。
State 与其他核心概念
需要特别区分:
Identity
→ 我是谁
Property
→ 我有什么属性
State
→ 我现在是什么状态
Ability
→ 我能做什么
Memory
→ 我记住了什么
Experience
→ 我过去经历了什么
Behavior
→ 我正在做什么
例如一个机器人:
Identity
ID = ROBOT-001
Property
weight = 50kg
State
position = A01
speed = 2m/s
status = moving
Ability
navigation
Memory
previous_position = A00
Experience
A01 → B01 成功
Behavior
move_to_B01
这些概念共同构成一个完整的 Individual。
本章小结
State 是 SAI Framework 中描述动态现实状态的重要基础。
State 可以描述:
自身状态
环境状态
行为状态
设备状态
并且具有:
当前状态
状态属性
状态变化
状态历史
核心关系:
State
↓
状态变化
↓
Feedback
↓
Experience
↓
Learning
同时,State 又可以为:
Cognition
Reasoning
Decision
Behavior
提供当前运行条件。
因此:
State 不是 Individual 的静态数据,而是连接 Individual、自身环境、行为执行和外部反馈的动态数据结构。
最终可以概括为:
Identity
→ 我是谁
State
→ 我现在是什么状态
Ability
→ 我能够做什么
Memory
→ 我记住了什么
Cognition
→ 我理解了什么
Decision
→ 我决定做什么
Behavior
→ 我正在做什么
Feedback
→ 外部发生了什么变化
State 让 SAI Individual 从“拥有身份的对象”进一步成为一个能够随着时间和环境持续变化的动态个体。