第36章 西红柿炒鸡蛋行为模型
36.1 提出背景
前面各章已经分别建立了对象、状态、场景、方法、行为、动作、动态参数、执行、反馈和再认知等理论。但是,如果这些理论只停留在抽象结构层面,就难以说明一个完整行为是如何从目标开始,经过对象识别、状态判断、方法选择、行为组织和动作执行,最终产生结果并进入下一轮认知。
因此,本章选取“西红柿炒鸡蛋”作为一个典型的日常行为模型。
这里的“西红柿炒鸡蛋”不是一个单纯的菜谱,而是一个具有完整认知结构的目标行为实例。在该行为中,用户具有明确目标;系统需要识别食材类和厨具类;需要从类中确定具体对象实例;需要判断对象状态;根据目标和当前状态选择烹饪方法;再将方法组织为行为,并进一步分解为动作;动作执行过程中还需要根据对象状态、环境状态和执行结果调整动态参数;最后通过反馈产生新的状态,并进入再认知过程。
因此,该案例可以表示为:
用户目标→食材类→厨具类→对象实例→对象状态→烹饪方法→行为组织→动作执行→动态参数→反馈→状态变化→再认知
这一过程构成一个完整的结构化行为闭环。
36.2 用户目标
**用户目标(User Goal)**是行为形成的方向性条件,用于说明行为主体希望通过行为获得什么结果。
在西红柿炒鸡蛋行为中,用户目标可以定义为:
G = “形成可食用的西红柿炒鸡蛋成品”
目标并不是某一个动作,例如“切西红柿”或“打开炉具”,因为这些只是实现目标过程中的动作。
因此:
目标≠动作
目标≠方法
目标≠行为
目标是行为组织的上层约束。
可以建立:
G→Method→Behavior→Action→Result
其中:
- G:用户目标;
- Method:实现目标的方法;
- Behavior:围绕目标组织形成的行为;
- Action:行为中的具体动作;
- Result:动作和行为执行产生的结果。
进一步可以定义目标结构:
G = (Type, Object, State, Requirement, Result)
其中:
- Type:目标类型;
- Object:目标对象;
- State:期望达到的状态;
- Requirement:目标要求;
- Result:目标最终结果。
在本案例中:
G = (烹饪目标, 西红柿炒鸡蛋, 成品状态, 可食用, 完成)
因此,目标实际上规定了整个行为过程的方向。
36.3 食材类
**食材类(Ingredient Class)**是对具有相同或相似烹饪属性的食材对象进行抽象形成的对象类别。
西红柿炒鸡蛋至少涉及两个核心食材类:
IngredientClass = {Tomato, Egg}
其中:
- Tomato:西红柿类;
- Egg:鸡蛋类。
食材类并不是具体的食材对象,而是对对象共同属性和结构的抽象。
例如:
西红柿类→颜色、大小、数量、成熟状态、完整状态
鸡蛋类→数量、完整状态、新鲜状态、蛋液状态
因此:
类→属性→状态→对象实例
食材类主要回答:
“这个对象属于什么类型?”
而对象实例回答:
“当前具体是哪一个对象?”
二者必须区分。
例如:
“西红柿”可以表示西红柿类;
“当前案板上的第1个西红柿”则属于具体对象实例。
因此:
西红柿类≠具体西红柿对象
食材类为后续对象识别、属性判断、状态判断和方法匹配提供基础。
36.4 厨具类
**厨具类(Cookware Class)**是对烹饪过程中使用的工具和设备进行抽象形成的对象类别。
西红柿炒鸡蛋行为中可以建立:
CookwareClass = {Knife, CuttingBoard, Bowl, Pan, Stove, Spatula}
即:
- 刀;
- 案板;
- 碗;
- 炒锅;
- 炉具;
- 锅铲。
厨具类同样不是具体对象。
例如:
Pan → 炒锅类
而:
Pan_01 → 当前使用的具体炒锅实例
因此:
厨具类→厨具对象实例
厨具类还具有功能属性。
例如:
Knife→切割能力
Bowl→容纳能力
Pan→加热与烹饪能力
Stove→提供热源能力
Spatula→翻动能力
于是形成:
厨具类→功能属性→能力→方法适用条件
这说明对象类别不仅用于识别对象,还参与方法匹配。
36.5 对象实例
**对象实例(Object Instance)**是类在具体场景中的实际对象。
在本案例中,可以建立对象集合:
O = {Tomato_01, Tomato_02, Egg_01, Egg_02, Knife_01, Bowl_01, Pan_01, Stove_01, Spatula_01}
其中每一个对象都具有独立身份。
例如:
Tomato_01=(Id,Class,Attributes,State,Relations)
其中:
- Id:对象标识;
- Class:对象所属类别;
- Attributes:对象属性;
- State:对象状态;
- Relations:对象关系。
因此,一个具体西红柿并不是一个简单的数据值,而是一个具有结构的对象。
对象实例关系可以表示为:
Class→Instance→Attribute→State
例如:
西红柿类→Tomato_01→大小/颜色/数量→完整/已切/已入锅
对象实例会随着行为执行而发生状态变化。
因此:
O_t→Action→O_{t+1}
对象不是静态存在,而是在行为过程中不断发生变化。
36.6 对象状态
**对象状态(Object State)**表示对象在某一时刻所处的具体状态。
西红柿的状态可能包括:
完整→已清洗→已切块→已入锅→已炒制
鸡蛋可能包括:
完整→已打入碗中→已搅拌→已入锅→已炒制
炒锅则可能包括:
冷却→预热→加热→烹饪中→停止加热
因此:
对象→状态
构成整个行为模型的重要基础。
对象状态可以定义为:
S = (Object, StateType, Value, Time, Condition)
例如:
S_tomato = (Tomato_01,完整状态,true,t1,当前场景)
执行某个动作后:
S_tomato_before→切割→S_tomato_after
即:
完整→切割→切块
状态变化并不是行为的附属信息,而是行为继续进行的条件。
例如,只有当西红柿进入“已切块”状态后,后续“放入锅中”的行为才具有适用条件。
因此:
当前状态→判断→下一行为
构成动态行为形成的重要机制。
36.7 烹饪方法
**烹饪方法(Cooking Method)**是针对特定目标、对象、状态和条件组织的一组行为实现结构。
在本案例中,可以形成一个抽象方法:
M_cook = (G,O,C,S,A,P,R)
其中:
- G:目标;
- O:对象;
- C:条件;
- S:当前状态;
- A:动作集合;
- P:过程;
- R:预期结果。
西红柿炒鸡蛋的方法并不是单一动作,而是多个动作按照一定关系组织形成的方法结构。
例如:
准备食材→处理食材→处理鸡蛋→加热厨具→烹饪→组合食材→完成
进一步展开:
食材准备→西红柿处理→鸡蛋处理→锅具准备→鸡蛋烹饪→西红柿烹饪→组合→成品
方法的核心作用是回答:
“为了实现当前目标,在当前对象和状态下,应当采用什么行为结构?”
因此:
目标→方法
对象+状态+条件→方法匹配
方法→行为组织
方法将目标与具体行为连接起来。
36.8 行为组织
**行为组织(Behavior Organization)**是将方法转换为具有顺序、条件、对象关系和状态依赖的行为结构。
西红柿炒鸡蛋不是一个单一行为,而是一个复杂行为。
可以表示:
B_cook = {B1,B2,B3,…,Bn}
例如:
准备行为→食材处理行为→鸡蛋处理行为→锅具准备行为→烹饪行为→组合行为→完成行为
每一个行为又可以继续分解为动作。
形成层级:
复杂行为→子行为→简单行为→动作
例如:
烹饪行为→鸡蛋烹饪行为→翻动行为→锅铲动作
行为组织必须保持状态连续性。
例如:
B1:食材处理
结果:
西红柿=已切块
因此:
Result(B1)→Condition(B2)
只有当前一个行为产生的状态满足下一个行为的条件,行为序列才可以继续。
所以:
行为1→状态变化→行为2
而不是简单的:
行为1→行为2
行为组织的核心是建立行为之间的结构关系。
36.9 动作执行
**动作(Action)**是行为中的基本执行单元。
西红柿炒鸡蛋行为中的动作可以包括:
取出西红柿
清洗西红柿
切西红柿
取鸡蛋
打鸡蛋
搅拌鸡蛋
加热炒锅
放入鸡蛋
翻动鸡蛋
加入西红柿
继续翻动
停止加热
这些动作按照方法和行为结构形成:
Method→Behavior→Action
一个动作可以表示为:
A=(Sub,O,T,C,P,R,S)
其中:
- Sub:动作主体;
- O:动作对象;
- T:动作类型;
- C:动作条件;
- P:动作参数;
- R:动作结果;
- S:动作状态。
例如“切西红柿”可以表示为:
A_cut=(User,Tomato_01,Cut,C,P_cut,R_cut,S)
动作执行后:
Tomato_01:完整→切块
因此:
Action→Result→StateChange
动作真正改变的是对象、状态或场景。
36.10 动态参数
在实际行为中,同一种动作并不一定始终使用相同参数。
**动态参数(Dynamic Parameter)**是随着对象、状态、场景、条件和目标变化而变化的动作参数。
参数集合可以表示为:
P_t={p_1(t),p_2(t),…,p_n(t)}
在西红柿炒鸡蛋中,动态参数可能包括:
西红柿数量
西红柿块大小
鸡蛋数量
锅具状态
加热程度
翻动频率
烹饪持续时间
这些参数不是固定不变的。
例如,不同大小的西红柿可能产生不同的处理参数:
ObjectSize→CutParameter
不同的对象状态也可能产生不同参数:
ObjectState→ActionParameter
锅具状态变化也会影响烹饪参数:
PanState→CookingParameter
因此可以建立统一参数模型:
P_t=f(O_t,S_t,Sc_t,C_t,G_t)
其中:
- O_t:当前对象;
- S_t:当前状态;
- Sc_t:当前场景;
- C_t:当前条件;
- G_t:当前目标。
动态参数的核心作用,是将抽象方法转化为当前具体环境下的具体动作。
因此:
方法保持稳定→对象变化→参数变化→动作具体化
同一个烹饪方法可以在不同情况下产生不同的动作参数。
36.11 反馈与状态变化
动作执行不会直接结束整个认知过程。
执行后必须产生反馈。
Feedback是行为执行结果返回认知与行为控制结构的信息。
基本过程为:
动作→执行→结果→反馈→状态变化
例如:
加热炒锅→执行→锅温发生变化→反馈→炒锅状态变化
又例如:
切西红柿→执行→西红柿由完整变为切块→反馈→对象状态变化
因此反馈至少包括:
执行反馈
对象反馈
状态反馈
场景反馈
行为反馈
可以建立统一反馈模型:
F=(F_e,F_o,F_s,F_sc,F_b)
反馈最终作用于状态更新:
F_t→StateUpdate→S_{t+1}
如果状态变化影响原方法的适用条件,则必须重新进行认知判断。
例如:
执行→反馈→状态变化→重新判断
如果当前状态仍然满足原方法:
状态变化→方法继续适用→继续行为
如果当前状态已经不满足:
状态变化→原方法失效→重新匹配方法
因此:
反馈不是行为终点,而是下一轮认知的输入。
36.12 西红柿炒鸡蛋完整行为模型
综合本章全部结构,可以建立西红柿炒鸡蛋的完整行为模型:
G→IngredientClass→CookwareClass→ObjectInstance→ObjectState→CookingMethod→BehaviorOrganization→Action→DynamicParameter→Execution→Feedback→StateChange
进一步形成完整闭环:
用户目标→食材类→厨具类→对象实例→对象状态→烹饪方法→行为组织→动作→动态参数→动作执行→执行结果→反馈→对象状态变化→场景状态变化→再认知
其中:
用户目标规定行为方向。
食材类与厨具类提供对象类别知识。
对象实例确定当前实际参与行为的对象。
对象状态说明对象当前能够执行什么行为。
烹饪方法提供目标到行为的转换结构。
行为组织建立多个行为之间的结构关系。
动作构成具体执行单元。
动态参数根据对象和状态将动作具体化。
执行使动作产生实际结果。
反馈把执行结果返回认知系统。
状态变化改变对象和场景。
再认知根据新的状态重新判断下一步行为。
最终形成:
目标→对象→状态→方法→行为→动作→参数→执行→反馈→状态变化→再认知→方法重新选择→行为重新组织
这就是一个完整的动态行为模型。
36.13 行为状态转换模型
可以进一步把整个西红柿炒鸡蛋行为抽象为状态转换系统:
S_0→B_1→S_1→B_2→S_2→B_3→…→B_n→S_n
其中:
- S_0:初始状态;
- B_i:第 i 个行为;
- S_i:行为执行后的状态。
例如:
原始食材状态
↓
食材处理行为
↓
处理完成状态
↓
烹饪准备行为
↓
锅具可用状态
↓
鸡蛋烹饪行为
↓
鸡蛋完成状态
↓
西红柿烹饪行为
↓
食材组合状态
↓
成品状态
这说明所谓“完成一道菜”,从认知工程角度看,本质上是:
多个对象状态按照目标要求连续发生变化的过程。
因此,烹饪行为可以被定义为一种目标驱动的对象状态转换过程。
36.14 再认知过程
当行为执行产生反馈后,系统不能假定世界仍然保持原状态。
例如:
鸡蛋已经入锅
意味着:
EggState_t≠EggState_{t-1}
同时:
PanState_t≠PanState_{t-1}
场景也随之变化:
Scene_t→Behavior→Scene_{t+1}
此时需要重新建立当前认知:
反馈→状态变化→场景更新→对象状态重新判断→方法重新匹配→行为重新组织
例如:
锅具状态变化
可能导致:
烹饪参数变化
进一步导致:
动作参数变化
最终形成:
状态变化→参数变化→动作调整
因此整个行为不是固定脚本,而是一个动态认知过程。
36.15 工程映射
在WSaiOS的结构化认知工程中,本案例可以映射为以下对象模型:
UserGoal
负责保存用户目标。
IngredientClass
负责定义食材类别。
CookwareClass
负责定义厨具类别。
ObjectInstance
负责管理具体对象实例。
ObjectState
负责保存对象当前状态。
CookingMethod
负责定义烹饪方法。
Behavior
负责保存行为结构。
Action
负责保存具体动作。
DynamicParameter
负责保存动态参数。
Execution
负责管理动作执行。
Feedback
负责管理执行反馈。
StateManager
负责处理状态变化。
RecognitionController
负责反馈后的重新认知。
整体工程结构可以表示为:
UserGoal→ObjectClass→ObjectInstance→ObjectState→CookingMethod→Behavior→Action→DynamicParameter→Execution→Feedback→StateManager→RecognitionController
其中每一个节点都可以成为独立的结构化对象。
系统不需要把“西红柿炒鸡蛋”作为一段固定文本进行处理,而是将其表示为:
目标对象+类别+实例+属性+状态+关系+方法+行为+动作+参数+执行+反馈
从而形成可计算、可判断、可更新的行为结构。
36.16 本章总结
“西红柿炒鸡蛋”行为模型说明,一个看似简单的日常行为实际上包含完整的认知工程结构。
其基本结构为:
用户目标→食材类→厨具类→对象实例→对象状态→烹饪方法→行为组织→动作执行→动态参数→反馈→状态变化
其动态闭环为:
目标→方法→行为→动作→执行→反馈→状态变化→再认知→方法重新选择→行为重新组织
从理论上看,西红柿炒鸡蛋不是一个单一动作,而是由多个对象、状态、方法、行为、动作和反馈共同形成的复杂行为。
其核心关系可以归纳为:
目标决定方向
对象决定行为作用对象
状态决定当前条件
方法决定实现结构
行为决定活动组织
动作决定执行单元
参数决定动作具体形式
执行产生结果
反馈反映执行结果
状态变化改变下一时刻的认知条件
再认知决定下一阶段的方法与行为
最终形成:
感知→对象→状态→场景→认知匹配→类组织→方法→行为→动作→执行→反馈→状态变化→再认知
因此,本案例不仅描述了一道菜的制作过程,更验证了前面建立的对象理论、状态理论、方法理论、行为理论、动作理论、动态参数理论、执行理论、反馈理论和再认知理论能够共同组成一个完整的结构化动态行为模型。