首页 理论 架构 工程 文档 白皮书 著作 研究 案例 下载 博客 关于 开始使用 →

第166章 Scene类

第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以及认知运行过程建立的重要基础。

Leave a Reply

Your email address will not be published. Required fields are marked *