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

第188章 StateEngine

第188章 StateEngine

188.1 StateEngine的定义

在ICAI系统中,Object描述对象,State描述对象在某一时间、某一条件和某一运行环境下的实际状态。

前面已经定义:

S=(O,V,T,C,R)S=(O,V,T,C,R)

其中:

  • OO:Owner,状态所属对象;
  • VV:Value,状态值;
  • TT:Time,状态发生或成立的时间;
  • CC:Context,状态上下文;
  • RR:Reason,状态形成或变化的原因。

**StateEngine(状态计算引擎)**是根据当前对象、当前状态、事件、条件和状态转换规则,对状态进行计算、判断、转换和验证的确定性计算Engine。

可以定义:

StateEngine=StateCalculation+StateTransition+StateVerificationStateEngine= StateCalculation+ StateTransition+ StateVerification

即:

状态计算 → 状态转换 → 状态验证

StateEngine回答三个核心问题:

  1. 当前状态是什么?
  2. 在当前事件和条件下能否转换到新状态?
  3. 转换之后的新状态是否真实、合法、有效?

因此:

StateEngine=(S,E,R,C,D,T,V)StateEngine=(S,E,R,C,D,T,V)

其中:

  • SS:Current State,当前状态;
  • EE:Event,触发事件;
  • RR:Rule,状态规则;
  • CC:Condition,状态条件;
  • DD:Discrete Calculation,离散状态计算;
  • TT:Transition,状态转换;
  • VV:Verification,状态验证。

188.2 StateEngine与StateService的区别

StateEngine与前面的ObjectEngine一样,必须和Service层保持明确边界。

可以定义:

StateService=State OrchestrationStateService=State\ Orchestration StateEngine=State ComputationStateEngine=State\ Computation

StateService负责:

Request
→ Load State
→ Call StateEngine
→ Receive Result
→ Persist State
→ Save History
→ Return Result

StateEngine负责:

Current State
+ Event
+ Condition
+ Rule
→ Calculate
→ Evaluate
→ Transition
→ Verify
→ EngineResult

因此:

StateService负责“状态处理流程”。

StateEngine负责“状态计算规则”。

如果把状态规则全部写进StateService,Service会逐渐变成大量if/else组成的巨大程序。

而StateEngine将状态计算集中起来,使状态规则成为可以独立验证、复用和维护的计算机制。


188.3 StateEngine的基本模型

根据第186章的Engine统一模型:

Engine=(I,R,C,D,O)Engine=(I,R,C,D,O)

StateEngine进一步表示为:

SE=(S,E,R,C,D,O)SE=(S,E,R,C,D,O)

其中:

  • SS:当前状态;
  • EE:事件;
  • RR:状态转换规则;
  • CC:转换条件;
  • DD:离散计算;
  • OO:计算结果。

基本计算:

O=F(S,E,R,C)O=F(S,E,R,C)

如果条件满足,则产生候选状态:

Snew=T(S,E,C,R)S_{new}=T(S,E,C,R)

但:

SnewS_{new}

只是计算结果,并不意味着系统已经完成状态更新。

真正的状态更新必须经过:

Current State
→ State Calculation
→ Transition Candidate
→ Transition Validation
→ StateService
→ Persist

因此:

StateEngine可以计算“应该变成什么状态”,但不能绕过验证和Service直接修改数据库。


188.4 一、状态计算

188.4.1 状态计算的定义

**状态计算(State Calculation)**是根据对象当前事实、当前状态、事件、时间、上下文和规则,计算当前状态或候选状态的过程。

例如一个设备:

power = on
temperature = 85
alarm = false

系统规则:

Temperature>80→OverheatTemperature>80 \rightarrow Overheat

StateEngine计算:

current state = normal
temperature = 85
rule = temperature > 80
candidate state = overheat

这里的overheat首先是一个状态计算结果

它还没有被最终保存。


188.5 状态是时间相关的

状态不能脱离时间理解。

可以表示为:

StS_t

其中:

  • SS:状态;
  • tt:状态成立的时间。

当发生事件:

EtE_t

StateEngine计算:

St+1=F(St,Et,Ct,R)S_{t+1}=F(S_t,E_t,C_t,R)

因此:

St≠St+1S_t\neq S_{t+1}

并不意味着旧状态错误。

例如:

10:00 → pending
10:05 → active
10:30 → completed

三个状态都可能是正确的,只是成立时间不同。

因此:

当前State描述“现在是什么”,State History描述“过去发生过什么”。


188.6 状态计算的输入

StateEngine可以使用以下输入:

Current Object
Current State
Event
Condition
Rule
Time
Context
Relation
Verified Fact
History

形成:

StateInput=Object+State+Event+Condition+Rule+Context+TimeStateInput= Object+ State+ Event+ Condition+ Rule+ Context+ Time

但历史数据不能自动覆盖当前事实。

例如历史记录:

2026-09-01 stock = 100

而当前对象:

2026-09-11 stock = 0

StateEngine必须优先使用当前有效事实。

因此:

CurrentFact>HistoricalFactCurrentFact>HistoricalFact

历史信息只能作为辅助判断依据。


188.7 二、状态条件计算

状态转换并不是任意发生的。

定义:

C(S,E,O)=trueC(S,E,O)=true

表示当前状态、事件和对象满足转换条件。

例如:

Current State = pending
Payment = confirmed
Inventory = available

规则:

pending+payment_confirmed+inventory_available→activepending + payment\_confirmed + inventory\_available \rightarrow active

StateEngine首先计算:

payment_confirmed = true
inventory_available = true

然后:

C=trueC=true

才允许产生:

pending → active

如果库存不足:

inventory_available = false

则:

C=falseC=false

状态不能转换。


188.8 三、状态转换

188.8.1 状态转换的定义

**状态转换(State Transition)**是指对象在当前状态、事件和条件满足状态规则时,由一个合法状态进入另一个合法状态的过程。

定义:

T(S1,E,C)→S2T(S_1,E,C)\rightarrow S_2

其中:

  • S1S_1:原状态;
  • EE:触发事件;
  • CC:转换条件;
  • S2S_2:目标状态。

例如:

pending+approve→activepending+approve\rightarrow active

或者:

active+complete→completedactive+complete\rightarrow completed

或者:

running+error→failedrunning+error\rightarrow failed


188.9 状态转换不是简单赋值

错误的状态处理:

$state = 'completed';

这种写法直接改变状态,却没有检查:

当前状态是什么?
是否允许转换?
触发事件是什么?
条件是否满足?
转换是否经过验证?

正确流程:

Current State
→ Event
→ Find Transition Rule
→ Evaluate Condition
→ Calculate Target State
→ Validate Transition
→ Generate Transition Result
→ StateService
→ Save

因此:

Transition≠AssignmentTransition\neq Assignment

状态转换是一个受规则约束的计算过程。


188.10 状态转换图

一个典型对象生命周期可以表示为:

Created
   ↓
Initialized
   ↓
Ready
   ↓
Active
   ↓
Updated
   ↓
Inactive
   ↓
Archived

异常路径:

Active
   ↓
Failed
   ↓
Diagnosis
   ↓
Repair
   ↓
Ready

取消路径:

Ready
   ↓
Cancelled

阻塞路径:

Ready
   ↓
Blocked

这些状态不是简单字符串集合,而是由Transition Rule约束。


188.11 状态转换规则

可以定义状态转换规则:

TR=(S1,E,C,S2,V)TR=(S_1,E,C,S_2,V)

其中:

  • S1S_1:源状态;
  • EE:事件;
  • CC:条件;
  • S2S_2:目标状态;
  • VV:验证要求。

例如:

Source:
pending

Event:
payment_confirmed

Condition:
inventory > 0

Target:
active

Verification:
payment_record_exists

只有:

S1=pendingS_1=pending

且:

E=payment_confirmedE=payment\_confirmed

且:

inventory>0inventory>0

才能产生:

S2=activeS_2=active


188.12 状态转换合法性

状态转换必须经过合法性判断:

ValidTransition=CurrentState∧Event∧Condition∧RuleValidTransition= CurrentState \land Event \land Condition \land Rule

如果其中任何必要条件不满足:

ValidTransition=falseValidTransition=false

例如:

Current = archived
Event = activate

如果规则不存在:

archived → active

则:

transition = invalid

StateEngine不能为了满足业务调用而强行产生目标状态。


188.13 四、状态验证

188.13.1 状态验证的定义

**状态验证(State Verification)**是判断计算得到或实际保存的状态是否与对象事实、转换规则、条件和证据一致的过程。

定义:

V(S)=F∧R∧C∧EV(S)=F\land R\land C\land E

其中:

  • FF:Fact,事实存在;
  • RR:Rule,规则符合;
  • CC:Condition,条件满足;
  • EE:Evidence,证据存在。

只有:

V(S)=trueV(S)=true

才能认为该状态具有有效依据。


188.14 状态计算与状态验证的区别

二者不能混淆。

例如:

temperature = 90

规则:

temperature>80→overheattemperature>80\rightarrow overheat

StateEngine计算:

candidate_state = overheat

这是:

状态计算。

随后系统检查:

temperature sensor value exists
timestamp valid
sensor state valid
rule active

验证:

verified = true

这是:

状态验证。

因此:

CalculatedState≠VerifiedStateCalculatedState\neq VerifiedState

这和第184章Learning中的原则完全一致:

计算结果不等于已经验证的事实。


188.15 状态验证的证据

状态验证需要Evidence。

可以定义:

Evidence=(Source,Type,Value,Time)Evidence=(Source,Type,Value,Time)

例如:

Source = sensor_01
Type = temperature
Value = 90
Time = 2026-09-11 12:30:00

StateEngine根据这个证据判断:

temperature = 90

是否足以支持:

overheat

如果证据缺失:

state = unknown

而不能强行判断:

state = overheat

因此:

NoEvidence≠VerifiedNoEvidence\neq Verified


188.16 状态验证结果

状态验证可以产生:

verified
unverified
invalid
outdated
conflicted
unknown

例如:

verified

事实存在
+
规则符合
+
条件满足
+
证据有效

unverified

存在状态候选
但证据不足

invalid

状态违反规则

outdated

状态曾经有效
但当前时间窗口已经失效

conflicted

存在相互冲突的状态证据

unknown

缺少足够数据

这种多状态验证结果能够让后续DecisionEngine、DiagnosisEngine和LearningEngine进行更加准确的处理。


188.17 五、状态计算、转换、验证三者关系

三者必须保持严格顺序:

Current State
      ↓
State Calculation
      ↓
Transition Candidate
      ↓
Transition Validation
      ↓
State Verification
      ↓
New State

更完整地表示:

St→Calculate→Candidate(St+1)→Validate→Verify→St+1S_t \rightarrow Calculate \rightarrow Candidate(S_{t+1}) \rightarrow Validate \rightarrow Verify \rightarrow S_{t+1}

其中最关键的一点是:

Candidate State不是Final State。

只有通过合法转换和验证之后,才能形成有效的新状态。


188.18 六、StateEngine与ObjectEngine

第187章建立了ObjectEngine。

两者的关系可以表示为:

Object
   ↓
ObjectEngine
   ↓
Object Facts
   ↓
StateEngine
   ↓
State Calculation

例如Object:

Machine A
temperature = 90
power = on

ObjectEngine负责计算对象属性:

temperature = 90
power = on

StateEngine进一步根据规则:

temperature>80temperature>80

计算:

candidate state = overheat

因此:

ObjectEngine→FactsObjectEngine\rightarrow Facts StateEngine→StateStateEngine\rightarrow State

两个Engine不能合并。


188.19 七、StateEngine与RelationEngine

StateEngine也需要处理关系变化带来的状态影响。

例如:

Object A
→ depends_on
→ Object B

如果B进入:

failed

规则规定:

A depends_on B
+
B failed
→
A blocked

这里:

RelationEngine负责确定:

A depends_on B

StateEngine负责根据关系事实计算:

A → blocked

因此:

RelationEngine
→ Relation Fact

StateEngine
→ State Result

形成:

Relation→StateRelation \rightarrow State


188.20 八、StateEngine与BehaviorEngine

Behavior执行过程中会不断发生状态变化。

例如:

Behavior
Created
→ Ready
→ Running
→ Completed

BehaviorEngine负责行为执行过程。

StateEngine负责状态转换规则。

因此:

BehaviorEngine
→ Execute Behavior

StateEngine
→ Calculate Behavior State

完整过程:

Behavior
→ Action
→ Execution
→ Result
→ StateEngine
→ State Transition

188.21 九、StateEngine与FeedbackEngine

Feedback可以触发状态重新计算。

例如:

Expected:
completed

Actual:
failed

FeedbackEngine接收:

Actual Result = failed

然后StateEngine根据规则:

running
+
execution_failed
→
failed

产生:

new state = failed

因此:

Feedback→StateEngine→StateUpdateFeedback \rightarrow StateEngine \rightarrow StateUpdate

反馈不是状态本身。

反馈是导致状态重新判断的重要输入。


188.22 十、StateEngine与RiskEngine

状态是风险判断的重要基础。

例如:

stock = 0

StateEngine得到:

inventory_state = empty

RiskEngine进一步判断:

empty inventory
→
delivery risk

因此:

StateEngine
→ Current State
→ RiskEngine
→ Risk

如果风险解除,也可以通过新的状态事实重新进行判断。


188.23 十一、StateEngine与DiagnosisEngine

当状态出现异常:

Expected State = active
Actual State = failed

StateEngine负责确认:

actual state = failed

但它不负责分析:

为什么失败?

DiagnosisEngine负责:

failed
→ Evidence
→ Cause Analysis
→ Diagnosis

因此:

StateEngine≠DiagnosisEngineStateEngine\neq DiagnosisEngine

状态计算和原因诊断必须分开。


188.24 十二、StateEngine与LearningEngine

StateEngine产生的是状态事实和状态计算结果。

LearningEngine处理的是经过验证的学习数据。

例如:

Object A
100次运行
→ 92次 completed
→ 8次 failed

StateEngine只负责每一次运行的状态判断:

running
→ completed

或

running
→ failed

LearningEngine则可以把这些经过验证的历史数据形成:

Learning Data

并进一步影响:

Knowledge
Capability
Method
Decision

所以:

StateEngine→StateFactsStateEngine\rightarrow StateFacts LearningEngine→CognitiveUpdateLearningEngine\rightarrow CognitiveUpdate


188.25 十三、StateEngine的PHP结构

按照ICAI的PHP 5.6/7.0工程结构,可以定义:

abstract class Engine
{
    abstract public function calculate($input);
}

StateEngine:

class StateEngine extends Engine
{
    public function calculate($input)
    {
        $state = isset($input['state'])
            ? $input['state']
            : array();

        $event = isset($input['event'])
            ? $input['event']
            : array();

        $rule = isset($input['rule'])
            ? $input['rule']
            : array();

        $condition = isset($input['condition'])
            ? $input['condition']
            : array();

        $candidate = $this->calculateTransition(
            $state,
            $event,
            $rule,
            $condition
        );

        return $candidate;
    }

    protected function calculateTransition(
        $state,
        $event,
        $rule,
        $condition
    ) {
        $valid = true;
        $target = null;

        if (isset($rule['from'])) {
            if (!isset($state['value']) ||
                $state['value'] != $rule['from']) {

                $valid = false;
            }
        }

        if ($valid && isset($rule['event'])) {
            if (!isset($event['type']) ||
                $event['type'] != $rule['event']) {

                $valid = false;
            }
        }

        if ($valid && isset($rule['to'])) {
            $target = $rule['to'];
        }

        return array(
            'valid' => $valid,
            'current_state' => isset($state['value'])
                ? $state['value']
                : null,
            'target_state' => $target,
            'event' => $event,
            'condition' => $condition,
            'rule' => $rule
        );
    }
}

这里的StateEngine只计算:

是否允许
+
目标状态是什么

它不直接执行:

UPDATE states ...

数据库更新仍然属于StateService和Repository的职责。


188.26 十四、状态转换的实际工程流程

完整流程:

Controller
   ↓
StateService
   ↓
Load Current State
   ↓
Load Event
   ↓
Load Rule
   ↓
Load Condition
   ↓
StateEngine
   ↓
Calculate Transition
   ↓
Validate Transition
   ↓
Verify Evidence
   ↓
StateService
   ↓
Save State
   ↓
Save State History

如果转换失败:

StateEngine
→ Invalid Transition
→ StateService
→ No State Update
→ Record Failure / Reason

这样系统不会因为一次非法请求而直接破坏当前状态。


188.27 十五、状态历史

状态变化必须形成历史。

当前状态:

active

状态历史:

created
initialized
ready
active
failed
repairing
ready
active

因此:

CurrentState≠StateHistoryCurrentState\neq StateHistory

StateEngine计算的是当前转换。

State History记录的是实际发生过的转换。

完整关系:

StateEngine
→ Transition Result
→ StateService
→ Current State
→ State History

历史记录不能反向直接覆盖当前状态。


188.28 十六、状态时间计算

状态通常存在有效时间。

可以定义:

Valid(S,t)=Condition(S,t)Valid(S,t)=Condition(S,t)

例如:

session active

有效期:

10:00 - 12:00

12:30时:

Valid(active,12:30)=falseValid(active,12:30)=false

StateEngine可以计算:

active
→ expired

因此时间本身也可以成为状态转换条件。

例如:

active+t>ExpirationTime→expiredactive+t>ExpirationTime \rightarrow expired


188.29 十七、状态冲突

系统可能同时获得:

Source A → active
Source B → failed

StateEngine不能随意选择一个状态。

首先产生:

state conflict

然后:

ConflictEngine
→ Conflict Evaluation
→ Evidence Comparison
→ DecisionEngine

或者要求人工确认。

因此:

ConflictingFacts→Conflict→Decision→VerifiedStateConflictingFacts \rightarrow Conflict \rightarrow Decision \rightarrow VerifiedState

这与第182章RiskConflictService形成直接连接。


188.30 十八、状态更新的最小原则

状态更新同样遵循最小更新原则。

如果对象有:

status = active
mode = automatic
power = on

现在只证明:

power = off

那么只产生:

power:
on → off

不能因为状态变化而自动改变:

status
mode

因此:

ΔS=VerifiedStateChange\Delta S = VerifiedStateChange

而不是:

ΔS=AllRelatedFields\Delta S = AllRelatedFields

这能够避免状态污染。


188.31 十九、状态验证失败

如果计算得到:

candidate = completed

但实际结果:

execution = failed

则:

completed

不能通过验证。

形成:

Candidate State
→ Verification
→ Failed
→ Actual State = failed

因此:

CandidateState≠ActualStateCandidateState\neq ActualState

系统必须以实际经过验证的结果为准。


188.32 二十、StateEngine的异常处理

StateEngine可能遇到:

Current State Missing
Event Missing
Rule Missing
Condition Missing
Invalid Transition
Conflicting State
Evidence Missing
Outdated Evidence
Invalid State

这些情况不能简单返回:

false

应该返回结构化结果。

例如:

array(
    'status' => 'invalid_transition',
    'current_state' => 'archived',
    'event' => 'activate',
    'target_state' => 'active',
    'reason' => 'transition_not_allowed'
)

这样后续DiagnosisEngine可以直接读取。


188.33 二十一、StateEngine与VerificationService

虽然StateEngine可以执行状态计算,但最终验证可以调用独立的VerificationService。

结构:

StateEngine
→ Candidate State
→ VerificationService
→ Verification Result
→ StateService

原因是:

StateEngine解决:

根据规则计算什么状态。

VerificationService解决:

这个状态有没有足够事实和证据证明。

这样可以继续保持:

Calculation≠VerificationCalculation\neq Verification


188.34 二十二、StateEngine完整闭环

StateEngine的完整运行闭环:

Current Object
      ↓
Current State
      ↓
Event
      ↓
Condition
      ↓
Rule
      ↓
State Calculation
      ↓
Transition Candidate
      ↓
Transition Validation
      ↓
Evidence Verification
      ↓
New State
      ↓
State History
      ↓
Feedback
      ↓
Future State Calculation

公式表示:

St+1=Verify(Transition(St,Et,Ct,R))S_{t+1} = Verify( Transition( S_t,E_t,C_t,R ) )

如果验证失败:

St+1=StS_{t+1}=S_t

或者根据异常规则进入:

failed
blocked
unknown
conflicted

具体取值必须由明确规则决定,不能由系统随意猜测。


188.35 二十三、StateEngine在ICAI中的位置

目前ICAI基础Engine可以进一步形成:

                    Engine Layer
                         │
        ┌────────────────┼────────────────┐
        │                │                │
   ObjectEngine     StateEngine     RelationEngine
        │                │                │
        └────────────────┼────────────────┘
                         │
                 基础事实计算层
                         │
        ┌────────────────┼────────────────┐
        │                │                │
 KnowledgeEngine    GoalEngine      CapabilityEngine
        │                │                │
 MethodEngine      DecisionEngine
        │                │
 BehaviorEngine    ExecutionEngine
        │                │
 FeedbackEngine    MemoryEngine
        │                │
 ExperienceEngine  LearningEngine
        │                │
 RiskEngine        ConflictEngine
        │                │
 DiagnosisEngine   RepairEngine

ObjectEngine解决:

Object是什么、满足什么条件

StateEngine解决:

Object当前处于什么状态、能否转换到什么状态

RelationEngine解决:

Object之间具有什么关系

三者共同形成ICAI基础事实计算层。


188.36 二十四、StateEngine与完整ICAI闭环

完整认知运行链:

Individual
→ Object
→ State
→ Need
→ Goal
→ Capability
→ Method
→ Decision
→ Behavior
→ Action
→ Execution
→ Result
→ Feedback
→ StateEngine
→ State Update
→ Memory
→ Experience
→ Learning
→ Knowledge / Capability / Method Update
→ New Decision

在这个过程中,StateEngine承担的是一个非常关键的中间位置:

Result→Feedback→StateEngine→StateResult \rightarrow Feedback \rightarrow StateEngine \rightarrow State

状态又会影响:

State→Capability→Method→DecisionState \rightarrow Capability \rightarrow Method \rightarrow Decision

因此状态不是系统中的附属字段,而是ICAI运行过程中连接:

对象 → 行为 → 结果 → 反馈 → 决策

的重要动态变量。


188.37 二十五、StateEngine统一模型

最终可以把StateEngine定义为:

SE=(S,E,R,C,D,T,V,H)SE=(S,E,R,C,D,T,V,H)

其中:

  • SS:当前状态;
  • EE:事件;
  • RR:状态规则;
  • CC:状态条件;
  • DD:状态计算;
  • TT:状态转换;
  • VV:状态验证;
  • HH:状态历史。

完整过程:

(St,Et,R,C)→D→T→V→St+1(S_t,E_t,R,C) \rightarrow D \rightarrow T \rightarrow V \rightarrow S_{t+1}

同时:

St→HtS_t\rightarrow H_t

形成状态历史。

工程流程:

Current State
      ↓
State Calculation
      ↓
Transition Candidate
      ↓
Transition Validation
      ↓
State Verification
      ↓
New State
      ↓
State History

188.38 二十六、本章总结

StateEngine是ICAI Engine体系中的基础状态计算引擎,核心职责不是保存状态,而是对状态进行:

Calculation+Transition+VerificationCalculation+Transition+Verification

即:

状态计算、状态转换、状态验证。

状态计算解决:

当前对象根据事实和规则应该处于什么状态。

状态转换解决:

当前状态在事件和条件满足时是否能够进入下一个合法状态。

状态验证解决:

计算得到的状态是否有事实、条件、规则和证据支持。

三者形成:

St→Calculate→Candidate→Validate→Verify→St+1S_t \rightarrow Calculate \rightarrow Candidate \rightarrow Validate \rightarrow Verify \rightarrow S_{t+1}

同时:

St→StateHistoryS_t\rightarrow StateHistory

由此形成完整状态闭环:

Object
   ↓
Current State
   ↓
Event
   ↓
Condition
   ↓
StateEngine
   ├── State Calculation
   ├── State Transition
   └── State Verification
   ↓
New State
   ↓
StateService
   ↓
State History

最终明确ICAI的状态工程原则:

State表达当前事实,StateEngine计算状态,StateService组织状态处理,Verification验证状态,StateHistory记录状态变化。

而状态变化又会反过来影响Capability、Method、Decision、Behavior、Risk、Diagnosis和Learning,使StateEngine成为ICAI动态认知闭环中的基础计算节点。

整个机制仍然建立在对象、状态、事件、规则、条件、关系、历史、证据和离散计算之上,不依赖LLM、Transformer、Embedding、Vector Search、Prompt Engineering、神经网络或LLM API。

Leave a Reply

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