第166章 Scene类
166.1 提出背景
在第162章中,ICAI建立了Object类,用于描述独立对象。
在第163章中,Attribute类解决了对象属性的独立表达。
在第164章中,State类解决了对象状态的表达、转换和历史记录。
在第165章中,Relation类解决了对象之间关系的表达:
Subject → Relation → Object
但是,仅仅拥有多个对象和对象关系,仍然不能完整表达一个现实认知环境。
例如系统同时获得:
人
杯子
桌子
水
并且知道:
人 → 拿着 → 杯子
杯子 → 位于 → 桌子
杯子 → 装有 → 水
这些对象和关系已经形成了一定结构。
但是系统还需要回答:
这些对象是不是处于同一个具体环境中?
例如:
人在厨房喝水
与:
人在办公室拿着杯子
对象可能相同,部分关系也可能相同,但它们属于不同的场景。
因此需要建立Scene类。
Scene,中文称为“场景”,是对某一时间、空间或认知条件下,一组对象、对象状态、对象关系以及成立条件进行统一组织的对象结构。
Scene的核心不是简单的“对象集合”,而是:
Scene
↓
Scene Objects
↓
Scene Relations
↓
Scene State
↓
Scene Conditions
由此将离散对象组织成为一个具有整体结构的认知单元。
166.2 Scene的概念定义
Scene是由多个Object、Object State、Relation以及Conditions组成的具有一定边界和整体状态的结构化对象。
可以定义为:
Scene=(O,R,S,C)Scene=(O,R,S,C)
其中:
- OO:Scene Objects,场景对象集合;
- RR:Scene Relations,场景关系集合;
- SS:Scene State,场景整体状态;
- CC:Scene Conditions,场景成立条件。
因此:
Scene
├── Objects
├── Relations
├── State
└── Conditions
Scene不是单个Object。
也不是单个Relation。
它是:
多个Object通过Relation形成的、在特定Conditions下具有整体State的结构。
其基本形成过程为:
Objects
↓
Relations
↓
Conditions
↓
Scene
↓
Scene State
166.3 Scene与Object的区别
Object描述单个对象。
例如:
Object = 杯子
Scene描述多个对象在一定条件下形成的整体环境。
例如:
Scene = 喝水场景
其中包含:
人
杯子
水
桌子
以及:
人 → 拿着 → 杯子
杯子 → 装有 → 水
杯子 → 位于 → 桌子
因此:
Object → 单个对象
Scene → 对象集合 + 关系结构 + 条件 + 整体状态
二者属于不同层次。
166.4 Scene Objects
Scene Objects是场景中参与当前场景结构的对象集合。
例如:
Scene = 喝水场景
可以包含:
Object 1 = 人
Object 2 = 杯子
Object 3 = 水
Object 4 = 桌子
表示为:
Scene
↓
Objects
├── 人
├── 杯子
├── 水
└── 桌子
Scene Objects不是重新创建Object,而是引用已经存在的Object。
因此:
Object
↑
│
Scene
Scene负责组织Object,而不是替代Object。
166.5 Scene Objects的集合模型
设:
O={O1,O2,O3,…,On}O=\{O_1,O_2,O_3,\ldots,O_n\}
其中:
- OO:Scene Objects集合;
- O1O_1:第一个场景对象;
- O2O_2:第二个场景对象;
- OnO_n:第n个场景对象。
例如:
O={人,杯子,水,桌子}O=\{人,杯子,水,桌子\}
表示当前Scene由四个主要对象构成。
PHP中可以直接使用对象集合:
class Scene
{
protected $objects = array();
protected $relations = array();
protected $state;
protected $conditions = array();
}
添加对象:
public function addObject($object)
{
$this->objects[] = $object;
}
获取场景对象:
public function getObjects()
{
return $this->objects;
}
这样Scene就能够组织多个CognitiveObject。
166.6 Scene Relations
Scene Relations表示场景中对象之间的关系集合。
第165章已经建立:
Subject → Relation → Object
Scene进一步将多个Relation组织起来。
例如:
人 → 拿着 → 杯子
杯子 → 装有 → 水
杯子 → 位于 → 桌子
可以表示为:
Scene
↓
Relations
├── 人 → 拿着 → 杯子
├── 杯子 → 装有 → 水
└── 杯子 → 位于 → 桌子
因此:
R={R1,R2,R3,…,Rn}R=\{R_1,R_2,R_3,\ldots,R_n\}
其中:
- RR:Scene Relations;
- RiR_i:某一个Relation对象。
Scene本身不重新定义Relation,而是把已有Relation组织进场景结构。
166.7 Scene Objects与Scene Relations的组合
一个Scene真正具有结构意义,是因为Objects与Relations形成组合。
只有:
人
杯子
桌子
只是对象集合。
只有:
拿着
位于
装有
只是关系集合。
将两者结合:
人 → 拿着 → 杯子
杯子 → 装有 → 水
杯子 → 位于 → 桌子
才能形成场景结构。
因此:
SceneStructure=Objects+RelationsSceneStructure=Objects+Relations
即:
Scene
↓
Objects + Relations
↓
Scene Structure
166.8 Scene State
Scene State是场景当前的整体状态。
这是Scene区别于普通对象集合的重要部分。
例如:
Scene = 喝水场景
场景可能处于:
准备
进行
完成
中断
结束
等状态。
因此Scene State不是某一个Object的State。
例如:
杯子状态 = 完整
水状态 = 存在
人状态 = 站立
这些属于Object State。
而:
Scene State = 进行中
表示整个场景当前的状态。
因此:
Object State
=
单个对象状态
Scene State
=
整个场景状态
166.9 Scene State的形成
Scene State通常不是凭空产生的,而是由Scene Objects、Scene Relations以及Scene Conditions共同决定。
可以表示为:
Scene Objects
↓
Object States
↓
Scene Relations
↓
Scene Conditions
↓
Scene State
例如:
人 = 正在喝水
杯子 = 被拿起
水 = 存在
人 → 拿着 → 杯子
杯子 → 装有 → 水
综合以后:
Scene State = 喝水进行中
因此Scene State是一个高层结构状态。
166.10 Scene Conditions
Scene Conditions是场景成立、保持或者发生变化所需要满足的条件集合。
例如,一个“喝水场景”可能要求:
人存在
杯子存在
水存在
人能够接触杯子
杯子中存在水
这些就是Scene Conditions。
因此:
C={C1,C2,C3,…,Cn}C=\{C_1,C_2,C_3,\ldots,C_n\}
其中:
- CC:条件集合;
- CiC_i:某一项场景条件。
Scene只有在必要条件满足以后,才能进入对应的Scene State。
166.11 Scene Condition的判断
场景条件可以采用离散逻辑进行判断。
例如:
条件1:人存在
条件2:杯子存在
条件3:水存在
条件4:人持有杯子
条件5:杯子装有水
可以形成:
C1 = true
C2 = true
C3 = true
C4 = true
C5 = true
如果全部满足:
C1 ∧ C2 ∧ C3 ∧ C4 ∧ C5 = true
则:
Scene Condition = satisfied
否则:
Scene Condition = unsatisfied
因此Scene Conditions可以直接参与Scene State判断。
166.12 Scene的整体状态计算
设:
C1,C2,…,CnC_1,C_2,\ldots,C_n
为场景条件。
如果:
C1∧C2∧⋯∧Cn=trueC_1\land C_2\land\cdots\land C_n=true
则场景可以进入目标状态。
例如:
人存在
∧
杯子存在
∧
水存在
∧
人持有杯子
∧
杯子装有水
成立:
↓
Scene Condition = true
↓
Scene State = drinking
如果:
水不存在
则:
Scene Condition = false
↓
Scene State ≠ drinking
这使Scene具有明确的规则计算基础。
166.13 Scene类的PHP工程实现
根据前面Object、Attribute、State和Relation的工程设计,Scene应该作为独立PHP类存在。
基础实现:
class Scene
{
protected $objects = array();
protected $relations = array();
protected $state;
protected $conditions = array();
public function __construct()
{
$this->state = 'unknown';
}
public function addObject($object)
{
$this->objects[] = $object;
}
public function getObjects()
{
return $this->objects;
}
public function addRelation(Relation $relation)
{
$this->relations[] = $relation;
}
public function getRelations()
{
return $this->relations;
}
public function addCondition($condition)
{
$this->conditions[] = $condition;
}
public function getConditions()
{
return $this->conditions;
}
public function setState($state)
{
$this->state = $state;
}
public function getState()
{
return $this->state;
}
}
这个类形成:
Scene
├── Objects
├── Relations
├── Conditions
└── State
166.14 Scene Condition对象
为了进一步工程化,Scene Condition也不应该长期停留在普通字符串。
可以建立独立的SceneCondition类:
class SceneCondition
{
protected $name;
protected $value;
protected $state;
public function __construct($name, $value)
{
$this->name = $name;
$this->value = $value;
$this->state = 'unknown';
}
public function getName()
{
return $this->name;
}
public function getValue()
{
return $this->value;
}
public function setState($state)
{
$this->state = $state;
}
public function getState()
{
return $this->state;
}
}
这样Scene Conditions可以成为对象集合:
Scene
↓
SceneCondition
↓
Condition State
进一步可以执行条件判断。
166.15 Scene的条件判断方法
Scene可以增加条件判断方法:
public function checkConditions()
{
foreach ($this->conditions as $condition) {
if ($condition->getState() !== 'satisfied') {
return false;
}
}
return true;
}
然后根据判断结果改变Scene State:
public function updateState()
{
if ($this->checkConditions()) {
$this->state = 'active';
} else {
$this->state = 'inactive';
}
}
于是形成实际运行链:
Scene Conditions
↓
checkConditions()
↓
Condition Result
↓
updateState()
↓
Scene State
这已经不是静态数据存储,而是可运行的场景状态计算。
166.16 Scene的建立过程
Scene不是简单创建一个空对象。
它应该经历结构建立过程:
Object识别
↓
Object加入Scene
↓
Relation建立
↓
Relation加入Scene
↓
Condition建立
↓
Condition判断
↓
Scene建立
↓
Scene State确定
例如:
人
杯子
水
桌子
首先进入Scene:
Scene Objects
然后加入:
人 → 拿着 → 杯子
杯子 → 装有 → 水
杯子 → 位于 → 桌子
形成:
Scene Relations
再判断条件:
人存在
杯子存在
水存在
最后确定:
Scene State
166.17 Scene State的变化
Scene不是静态结构。
随着Object State和Relation State变化,Scene State也可能发生变化。
例如:
Scene State = drinking
发生行为:
人放下杯子
导致:
人 → 拿着 → 杯子
关系状态:
active → inactive
于是Scene Conditions可能发生变化:
持有杯子 = false
最终:
Scene State
drinking
↓
finished
完整过程:
Object State Change
↓
Relation State Change
↓
Condition Change
↓
Scene State Change
这使Scene成为动态认知结构。
166.18 Scene与Relation的关系
第165章的Relation描述:
Subject → Relation → Object
Scene则把多个Relation组合到一个场景边界中。
因此:
Relation
↓
单个对象关系
而:
Scene
↓
多个Object
↓
多个Relation
↓
整体结构
二者关系可以表示为:
Object
↓
Relation
↓
Object
↓
Relation
↓
Object
然后由Scene统一组织:
Scene
┌───────┼───────┐
↓ ↓ ↓
Object Relation Object
↓ ↓ ↓
Object Relation Object
因此Scene是关系结构的组织层。
166.19 Scene与Individual
Individual拥有多个Object。
这些Object在特定条件下形成Scene。
因此:
Individual
↓
Objects
↓
Relations
↓
Scene
例如:
Individual
↓
人
↓
手机
↓
桌子
↓
文件
对象之间建立:
人 → 使用 → 手机
手机 → 位于 → 桌子
人 → 查看 → 文件
这些关系在某一时间和条件下共同形成:
Scene
所以Individual不是直接保存一个静态Scene,而是可以根据当前对象、关系和条件形成Scene。
166.20 Scene与认知
Scene的意义在于将离散信息组织成为整体结构。
单独的信息:
人
杯子
水
桌子
认知信息有限。
加入关系:
人 → 拿着 → 杯子
杯子 → 装有 → 水
杯子 → 位于 → 桌子
结构开始形成。
加入条件:
人存在
杯子存在
水存在
场景进一步成立。
因此:
Objects
↓
Relations
↓
Conditions
↓
Scene
↓
Scene State
↓
Cognition
Scene是从对象级认知进入环境级结构认知的重要工程层。
166.21 Scene的数学模型
综合本章内容,可以将Scene定义为:
Scene=(O,R,S,C)Scene=(O,R,S,C)
其中:
O={O1,O2,…,On}O=\{O_1,O_2,\ldots,O_n\}
表示场景对象集合;
R={R1,R2,…,Rm}R=\{R_1,R_2,\ldots,R_m\}
表示场景关系集合;
SS
表示场景整体状态;
C={C1,C2,…,Ck}C=\{C_1,C_2,\ldots,C_k\}
表示场景条件集合。
因此:
Scene=({Oi},{Rj},S,{Ck})Scene=(\{O_i\},\{R_j\},S,\{C_k\})
如果场景条件满足:
C1∧C2∧⋯∧Ck=trueC_1\land C_2\land\cdots\land C_k=true
则Scene可以进入相应状态:
S→StargetS \rightarrow S_{target}
166.22 Scene工程对象模型
在PHP OOP工程中,可以形成:
Scene
├── Scene Objects
│ └── CognitiveObject
│
├── Scene Relations
│ └── Relation
│
├── Scene State
│ └── State
│
└── Scene Conditions
└── SceneCondition
因此:
Scene
↓
CognitiveObject
↓
Relation
↓
State
↓
Condition
并不是简单的继承关系,而主要是对象组合关系。
166.23 Scene的运行闭环
Scene运行过程中,可以形成一个完整闭环:
Object
↓
Attribute
↓
Object State
↓
Relation
↓
Scene Objects
↓
Scene Relations
↓
Scene Conditions
↓
Scene State
↓
Behavior
↓
Object / Relation变化
↓
Scene Conditions重新判断
↓
Scene State更新
这意味着Scene不是认知系统中的静态容器,而是能够随着对象和关系变化而重新计算的动态结构。
166.24 Scene的工程价值
Scene类解决的是:
如何把多个对象、对象状态和对象关系组织成一个具有条件和整体状态的认知结构?
它完成了从:
Object
到:
Object Relationship Structure
再到:
Scene
的工程提升。
因此:
Object = 对象
Attribute = 对象特征
State = 对象状态
Relation = 对象关系
Scene = 对象关系结构的整体场景
进一步形成:
Object
↓
Attribute
↓
State
↓
Relation
↓
Scene
这是ICAI对象认知工程的重要结构层次。
166.25 本章总结
Scene类将前面已经建立的Object、State和Relation进一步组织成一个具有整体意义的场景对象。
其核心结构为:
Scene=(Objects,Relations,State,Conditions)Scene=(Objects,Relations,State,Conditions)
即:
Scene
├── Scene Objects
├── Scene Relations
├── Scene State
└── Scene Conditions
其中:
Scene Objects负责描述场景中的对象集合。
Scene Relations负责描述场景对象之间的结构关系。
Scene State负责描述整个场景当前的整体状态。
Scene Conditions负责判断场景成立、保持和变化所需要满足的条件。
因此,Scene的基本运行模型为:
Objects
→ Relations
→ Conditions
→ Scene
→ Scene State
而动态运行模型为:
Object State
→ Relation State
→ Scene Conditions
→ Scene State
→ Behavior
→ Object / Relation Update
→ Scene Conditions
→ New Scene State
至此,第162~166章已经形成连续的ICAI对象结构:
Individual
↓
Object
↓
Attribute
↓
State
↓
Relation
↓
Scene
其中Object负责“是什么”,Attribute负责“有什么特征”,State负责“当前是什么状态”,Relation负责“对象之间有什么关系”,Scene则负责:
在特定条件下,哪些对象以什么关系共同构成当前整体结构,以及这个整体结构当前处于什么状态。
因此,Scene是ICAI从对象认知进入环境结构认知的关键工程对象,也是后续Method、Behavior以及认知运行过程建立的重要基础。