第11章 场景类理论
11.1 场景类的定义
第10章已经建立了场景的结构化定义:
场景
=
场景元素
+
场景对象
+
场景属性
+
场景状态
+
场景关系
但是,现实世界中的场景虽然不断变化,却并不是完全没有规律。
例如,不同时间、不同地点、不同对象实例可能发生不同的烹饪活动:
厨房01 + 厨师01 + 锅01 + 鸡蛋01
也可能是:
厨房02 + 厨师02 + 锅02 + 鸡蛋02
两个场景中的具体对象不同,但是它们可能具有相似的结构:
人员
+
锅具
+
炉具
+
食材
+
操作关系
+
加热关系
+
烹饪行为
这种在多个具体场景中反复出现的稳定结构,可以进行更高层次的抽象。
**场景类(Scene Class)**是指从多个具有共同结构特征的具体场景中抽象出来,用于描述一类场景共同结构、对象类别、关系模式、状态条件和行为特征的结构化类别。
因此:
具体场景
+
具体场景
+
具体场景
↓
共同结构
↓
场景类
场景类不是一个具体场景。
例如:
厨房01
是一个具体空间对象。
而:
厨房场景类
描述的是一类厨房场景的共同结构。
因此:
场景类
↓
场景实例
与:
基础类
↓
对象实例
具有类似的抽象—实例关系。
11.2 场景类的本质
场景类的本质不是给场景重新命名,而是对场景内部稳定结构进行抽象。
例如观察大量机械抓取场景:
机械手
+
目标物
+
操作台
+
接近关系
+
接触关系
+
抓取行为
具体对象不断变化:
机械手01
鸡蛋01
桌面01
可能变成:
机械手02
瓶子01
工作台02
但结构仍然可能保持:
机械手类
+
目标物类
+
操作台类
+
空间关系
+
操作关系
+
抓取行为
于是机器可以形成:
机械抓取场景类
所以:
场景类抽象的是场景的共同结构,而不是某一个场景中的具体对象。
其核心关系可以表示为:
具体对象
↓
对象类
具体场景
↓
场景类
场景类因此成为机器从现实场景获得可复用结构知识的重要形式。
11.3 基础类与场景类
基础类与场景类都是类别,但它们处于不同结构层次。
基础类主要描述某一类对象的稳定结构。
例如:
鸡蛋类
锅类
机械手类
桌面类
它们回答:
“这个对象属于什么类别?”
场景类则描述多个对象以及它们之间关系形成的整体结构。
例如:
机械抓取场景类
它回答:
“这些对象按照什么结构共同构成一个场景?”
因此:
基础类
↓
对象类别
而:
场景类
↓
场景类别
两者之间不是替代关系,而是层级关系。
例如:
机械手类
+
鸡蛋类
+
桌面类
+
空间关系
+
抓取行为
↓
机械抓取场景类
其中:
机械手类
鸡蛋类
桌面类
仍然保持原有基础类身份。
场景类只是把这些基础类组织起来。
因此:
基础类负责稳定地定义对象类别,场景类负责稳定地定义场景结构类别。
11.4 基础类不会因为场景类而消失
建立场景类之后,不能把基础类替换掉。
例如:
鸡蛋类
不能因为存在:
烹饪场景类
就变成烹饪场景类。
因为二者描述的对象层次不同。
鸡蛋类
↓
描述鸡蛋对象
烹饪场景类
↓
描述烹饪场景
场景类实际上引用多个基础类:
烹饪场景类
├── 人类
├── 锅类
├── 炉具类
├── 食材类
└── 厨具类
并进一步定义:
对象关系
+
状态条件
+
行为结构
因此:
基础类
↓
提供场景成员类别
场景类
↓
组织这些类别形成整体结构
11.5 组合类与场景类
组合类与场景类都由多个类别组成,因此容易产生混淆。
二者需要严格区分。
**组合类(Composite Class)**主要描述多个类别按照一定结构形成的整体结构。
例如:
发动机类
+
车轮类
+
车身类
↓
汽车组合类
重点是:
整体由什么组成
而场景类重点描述:
哪些对象
+
处于什么状态
+
具有什么关系
+
正在进行什么活动
+
形成什么整体场景
例如:
机械手类
+
鸡蛋类
+
桌面类
+
空间关系
+
抓取行为
+
操作状态
↓
机械抓取场景类
因此:
组合类
→ 强调组成结构
而:
场景类
→ 强调整体场景结构
二者可以相互嵌套。
例如:
锅组合类
↓
进入
↓
烹饪场景类
也可以:
多个组合类
+
多个基础类
+
关系
+
状态
+
行为
↓
场景类
因此,场景类可以看作更高层次的结构抽象。
11.6 场景类的组成结构
场景类不是简单的名称,而应具有明确的内部结构。
可以表示为:
SceneClass
{
class_objects
attributes
states
relations
behaviors
methods
conditions
}
其中:
class_objects表示场景中的对象类别;attributes表示场景相关属性;states表示场景状态条件;relations表示对象类别之间的关系;behaviors表示场景中的行为结构;methods表示适用于该场景的处理方法;conditions表示场景成立的条件。
例如“机械抓取场景类”可以表示为:
场景类:机械抓取场景类
成员类别:
机械手类
目标物类
操作台类
关系:
机械手 → 接近 → 目标物
目标物 → 位于 → 操作台
行为:
接近
抓取
搬运
释放
条件:
目标物可操作
机械手可到达
抓取条件满足
这样,场景类就成为一种可以被机器匹配和调用的结构知识。
11.7 场景类的形成
场景类不是凭空产生的。
它需要从具体场景中发现共同结构。
基本过程可以表示为:
具体场景
↓
场景结构提取
↓
场景之间比较
↓
共同对象类别
↓
共同关系
↓
共同状态
↓
共同行为
↓
共同结构
↓
场景类形成
例如机器观察:
场景A:
机械手01 + 鸡蛋01 + 桌面01
以及:
场景B:
机械手02 + 苹果01 + 桌面02
再观察:
场景C:
机械手03 + 球01 + 工作台01
三个场景虽然目标对象不同:
鸡蛋
苹果
球
但是可能具有共同结构:
机械手
+
目标物
+
操作台
+
接近
+
抓取
于是可以抽象:
机械抓取场景类
这里发生的是:
实例场景差异
↓
结构比较
↓
共同结构提取
↓
场景类
因此:
场景类形成的基础是多个具体场景之间存在可重复识别的共同结构。
11.8 场景类形成的条件
并不是任意两个场景都能够形成一个场景类。
至少需要考虑以下条件。
第一,对象类别具有共同性
例如:
机械手01
机械手02
机械手03
都可以匹配:
机械手类
第二,关系结构具有共同性
例如:
机械手
↓
接近
↓
目标物
在多个场景中重复出现。
第三,状态条件具有共同性
例如:
目标物
=
可抓取状态
第四,行为结构具有共同性
例如:
接近
→
抓取
→
搬运
第五,整体结构具有稳定性
只有当这些共同结构具有一定稳定程度时,才适合形成场景类。
因此:
对象共同
+
关系共同
+
状态共同
+
行为共同
+
结构稳定
↓
场景类
11.9 场景类不是具体场景的复制
场景类形成之后,并不是把某一个场景完整复制下来。
例如:
机械手01
鸡蛋01
桌面01
属于具体实例。
场景类则应该抽象为:
机械手类
+
目标物类
+
操作台类
+
抓取关系
+
抓取行为
因此:
具体对象 → 被实例化
具体位置 → 被实例化
具体状态 → 被实例化
而:
对象类别
+
关系模式
+
行为模式
+
状态条件
属于场景类结构。
因此:
场景类保存的是结构规则,而不是某一次场景中的全部具体数值。
11.10 场景类的实例化
**场景类实例化(Scene Class Instantiation)**是指根据场景类所规定的对象类别、关系结构、状态条件和行为结构,将现实中的具体对象组织为一个具体场景实例的过程。
其基本过程为:
场景类
↓
现实对象匹配
↓
对象实例绑定
↓
关系实例建立
↓
状态确认
↓
场景实例形成
例如已有:
机械抓取场景类
现实中出现:
机械手01
鸡蛋01
桌面01
机器进行匹配:
机械手01 → 机械手类
鸡蛋01 → 目标物类
桌面01 → 操作台类
然后建立实际关系:
机械手01 → 接近 → 鸡蛋01
鸡蛋01 → 位于 → 桌面01
形成具体场景:
机械抓取场景01
因此:
场景类
↓
对象匹配
↓
关系实例化
↓
状态实例化
↓
场景实例
11.11 场景类实例与场景类的区别
必须严格区分:
场景类
和:
场景实例
例如:
机械抓取场景类
描述:
机械手类
+
目标物类
+
操作台类
+
抓取关系
+
抓取行为
而:
机械抓取场景01
可能是:
机械手01
+
鸡蛋01
+
桌面01
+
当前实际位置
+
当前实际状态
+
当前实际关系
因此:
场景类
→ 抽象结构
场景实例
→ 具体现实
11.12 场景类的实例化并不意味着固定
场景类实例化以后,场景实例仍然会发生变化。
例如:
机械抓取场景01
初始状态:
机械手
↓
接近
↓
鸡蛋
随后:
机械手
↓
抓取
↓
鸡蛋
再之后:
机械手
↓
搬运
↓
鸡蛋
场景实例不断变化:
Scene01(t₁)
↓
Scene01(t₂)
↓
Scene01(t₃)
但它仍然可以保持:
属于
↓
机械抓取场景类
因此:
场景实例可以动态变化,而场景类保持相对稳定。
这与基础类和对象实例之间的关系具有一致性:
基础类 → 对象实例 → 对象状态变化
场景类 → 场景实例 → 场景状态变化
11.13 场景类与对象类的层级关系
场景类可以引用多个基础类,也可以引用组合类和群类。
例如:
烹饪场景类
├── 人类
├── 锅类
├── 炉具类
├── 食材类
├── 厨具类
└── 烹饪组合类
其中:
烹饪组合类
本身可能又由:
锅类
+
炉具类
+
食材类
形成。
于是出现层级嵌套:
基础类
↓
组合类
↓
场景类
也可能:
基础类
+
组合类
+
群类
↓
场景类
因此场景类是一个较高层次的结构组织形式。
11.14 场景类与认知匹配
场景类形成以后,可以反过来参与机器的认知匹配。
机器面对一个新场景:
机械手02
+
苹果01
+
工作台02
首先建立场景实例:
当前场景
然后进行结构匹配:
当前场景
↓
对象类别匹配
↓
关系匹配
↓
状态匹配
↓
行为匹配
↓
场景类匹配
如果与:
机械抓取场景类
具有足够的结构对应关系,则可以判断:
当前场景
≈
机械抓取场景类
这里的“匹配”不是要求具体对象完全相同。
例如:
鸡蛋01
和:
苹果01
虽然不是同一个对象,也不是同一种对象类别,但如果当前任务只要求“可抓取目标物”,则二者可能共享某些场景结构角色。
因此:
场景类匹配的核心是结构匹配,而不是对象名称完全相同。
11.15 场景类的复用
场景类最重要的价值之一是结构复用。
例如机器已经形成:
机械抓取场景类
以后出现:
机械手01 + 苹果01 + 工作台01
无需重新从零建立全部结构。
机器可以:
当前场景
↓
场景类匹配
↓
机械抓取场景类
↓
读取已有结构
↓
绑定当前对象
↓
形成当前场景实例
因此:
场景类
↓
结构复用
↓
快速形成场景认知
这使机器能够从过去形成的场景结构中获得可复用知识。
11.16 场景类的动态性
虽然场景类具有相对稳定性,但场景类本身并不是绝对固定的。
当机器不断观察新的场景时,可能发现原有场景类:
结构不完整
或者:
出现新的稳定关系
或者:
出现新的共同状态
于是场景类可以进行扩展:
原场景类
↓
增加结构
↓
扩展场景类
也可能:
原场景类
↓
内部存在两个不同结构
↓
拆分
↓
场景类A
+
场景类B
因此:
场景类
↓
相对稳定
↓
可以动态扩展
↓
可以动态重组
这里仍然遵循第8章的基本原则:
动态主要发生在结构组织,而不是任意改变基础类别。
11.17 场景类的统一结构模型
综合本章,可以建立:
场景类
│
├── 对象类别集合
│
├── 组合类集合
│
├── 群类集合
│
├── 属性集合
│
├── 状态集合
│
├── 关系集合
│
├── 方法集合
│
├── 行为集合
│
└── 成立条件
可以形式化表示为:
SC =
{
C,
CC,
GC,
A,
S,
R,
M,
B,
Cond
}
其中:
SC表示场景类;C表示基础类集合;CC表示组合类集合;GC表示群类集合;A表示属性集合;S表示状态集合;R表示关系集合;M表示方法集合;B表示行为集合;Cond表示场景成立条件。
这个结构说明,场景类不是单纯的“场景名称”,而是一个完整的结构知识单元。
11.18 场景类与场景实例的转换
场景类与场景实例之间存在双向关系。
正向:
场景类
↓
现实对象匹配
↓
场景实例
反向:
多个场景实例
↓
结构比较
↓
共同结构
↓
场景类
因此:
场景类
↔
场景实例
形成一种持续的结构循环。
例如:
已有场景类
↓
实例化
↓
实际运行
↓
产生新场景数据
↓
与已有场景比较
↓
场景类更新
这使场景知识能够随着现实经验不断丰富。
11.19 场景类在机器世界中的位置
经过前面十章的发展,可以把场景类放到整个世界结构中:
世界
↓
基础类
↓
对象实例
↓
对象属性
↓
对象状态
↓
对象关系
↓
具体场景
↓
场景结构
↓
共同结构提取
↓
场景类
↓
场景类实例化
↓
新的具体场景
因此:
基础类
→ 稳定对象类别
场景类
→ 稳定场景类别
而:
对象实例
→ 具体个体
场景实例
→ 具体场景
这形成了机器世界的两个重要抽象层次。
11.20 本章总结
第11章建立了场景类理论。
场景类不是具体场景,也不是基础类的简单集合,而是:
从多个具有共同结构特征的具体场景中抽象出来,用于描述一类场景共同的对象类别、关系结构、状态条件、行为模式和方法结构的高层次类别。
本章首先区分:
基础类
↓
描述对象类别
与:
场景类
↓
描述场景类别
然后进一步区分:
组合类
↓
强调多个类别组成一个整体
与:
场景类
↓
强调对象、关系、状态、行为共同形成的场景整体
场景类的形成过程为:
具体场景
↓
场景结构提取
↓
多个场景比较
↓
共同对象类别
↓
共同关系
↓
共同状态
↓
共同行为
↓
共同结构
↓
场景类
场景类形成之后,可以进一步实例化:
场景类
↓
对象匹配
↓
对象实例绑定
↓
关系实例建立
↓
状态确定
↓
场景实例
例如:
机械抓取场景类
↓
机械手01
+
鸡蛋01
+
桌面01
↓
机械抓取场景01
场景实例仍然可以动态变化:
接近
↓
接触
↓
抓取
↓
搬运
↓
释放
但它始终可以保持对其所属场景类的结构关联。
因此,本章最核心的理论结论是:
基础类解决“对象属于什么类别”,场景类解决“多个对象及其关系、状态和行为属于什么场景结构类别”。
进一步:
场景类是对具体场景共同结构的抽象,不保存某一次场景的全部具体对象,而保存能够被重复识别、匹配和复用的结构规则。
最终形成:
基础类
↓
对象实例
↓
对象关系
↓
具体场景
↓
场景结构
↓
共同结构
↓
场景类
↓
场景类匹配
↓
场景类实例化
↓
新的场景实例
↓
动态变化
↓
新的场景结构
由此,机器不再只是认识“一个场景”,而开始建立:
一类场景是什么
↓
一类场景由什么组成
↓
一类场景具有什么关系
↓
一类场景在什么状态下成立
↓
一类场景可以产生什么行为
这为下一阶段研究场景的动态变化、场景之间的转换,以及机器如何通过场景匹配形成认知判断建立了理论基础。