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

第121章 诊断理论

第121章 诊断理论

121.1 提出背景

第120章建立了异常检测理论。机器通过状态检测、行为检测、结果检测、数据检测和结构检测,可以发现对象是否偏离正常状态。

但是,发现异常并不等于理解异常。

例如,一个设备运行结果异常,机器只能确认:

ActualResult≠ExpectedResultActualResult \neq ExpectedResult

这说明“结果出现了问题”,却没有回答:

为什么会出现这个结果?

可能原因包括:

  • 输入数据错误;
  • 对象状态错误;
  • 某个部件发生故障;
  • 某个行为没有正确执行;
  • 执行条件发生变化;
  • 结构关系发生错误;
  • 上游对象产生异常;
  • 多个因素共同作用。

因此,在异常检测之后必须建立诊断(Diagnosis)机制。

诊断的核心过程为:

异常发现 → 异常对象识别 → 原因候选生成 → 原因匹配 → 原因评价 → 诊断结果

诊断理论解决的是机器认知中的因果判断问题


121.2 诊断定义

诊断(Diagnosis)是指机器根据已经检测到的异常对象,通过分析异常表现、对象状态、行为、数据、结构以及相关条件,从候选原因中寻找与异常最匹配的原因,并形成结构化诊断结果的认知过程。

可以定义诊断函数:

Dg=Diagnose(A,C,K)Dg=Diagnose(A,C,K)

其中:

  • AA:Anomaly,异常对象;
  • CC:Cause,候选原因集合;
  • KK:Knowledge,已有规则、关系和经验知识;
  • DgDg:Diagnosis,诊断结果。

最基本的诊断关系为:

A←CA \leftarrow C

表示异常 AA 可能由原因 CC 导致。

因此:

Cause→AnomalyCause \rightarrow Anomaly

是原因到异常的产生关系,而:

Anomaly→CauseAnomaly \rightarrow Cause

是机器进行诊断时的逆向推理过程。

诊断理论就是建立这种逆向推理能力。


121.3 诊断与异常检测的区别

异常检测和诊断属于两个不同的认知过程。

异常检测回答:

是否异常?

诊断回答:

为什么异常?

因此:

Detection≠DiagnosisDetection \neq Diagnosis

其关系为:

Observation→Detection→Anomaly→Diagnosis→CauseObservation \rightarrow Detection \rightarrow Anomaly \rightarrow Diagnosis \rightarrow Cause

例如:

检测:
设备温度 = 95℃
正常范围 = 20℃~80℃

机器可以得到:

TemperatureAnomaly=TRUETemperatureAnomaly=TRUE

这是异常检测。

进一步分析:

冷却系统状态 = OFF
正常情况下 = ON

于是机器可以推断:

CoolingSystemOff→TemperatureIncreaseCoolingSystemOff \rightarrow TemperatureIncrease

这才进入诊断过程。

因此,异常检测提供诊断的输入,诊断则进一步寻找异常原因。


121.4 异常对象

121.4.1 异常对象定义

异常对象(Anomaly Object)是机器经过异常检测后形成的、用于描述异常目标、异常类型、实际状态、期望状态以及偏差信息的结构化对象。

可以定义:

AO={O,T,E,A,D,S,C}AO=\{O,T,E,A,D,S,C\}

其中:

  • OO:Target Object,异常目标对象;
  • TT:Anomaly Type,异常类型;
  • EE:Expected,期望值;
  • AA:Actual,实际值;
  • DD:Deviation,偏差;
  • SS:Severity,严重程度;
  • CC:Condition,异常发生条件。

因此,一个异常不能只保存:

异常 = TRUE

而应该保存完整结构:

异常对象
├── 目标对象
├── 异常类型
├── 期望值
├── 实际值
├── 偏差
├── 严重程度
└── 发生条件

只有这样,诊断系统才能根据异常特征寻找原因。


121.5 异常对象的诊断特征

不同异常具有不同特征。

例如数据异常:

AD={Data,Expected,Actual,Deviation}A_D=\{Data,Expected,Actual,Deviation\}

状态异常:

AS={State,ExpectedState,ActualState,Transition}A_S=\{State,ExpectedState,ActualState,Transition\}

行为异常:

AB={Behavior,ExpectedBehavior,ActualBehavior,Condition}A_B=\{Behavior,ExpectedBehavior,ActualBehavior,Condition\}

结果异常:

AR={Result,ExpectedResult,ActualResult,Deviation}A_R=\{Result,ExpectedResult,ActualResult,Deviation\}

结构异常:

ASt={Structure,ExpectedStructure,ActualStructure,Difference}A_{St}=\{Structure,ExpectedStructure,ActualStructure,Difference\}

这些异常对象都可以进入统一诊断模型。

因此:

AnomalyObject→DiagnosticFeatureAnomalyObject \rightarrow DiagnosticFeature

诊断系统不是直接对一个“异常标记”进行处理,而是对异常对象的具体特征进行分析。


121.6 异常原因

121.6.1 异常原因定义

异常原因(Anomaly Cause)是能够直接或间接导致异常对象产生的对象、状态、行为、数据、结构、条件或事件。

可以定义原因对象:

C={O,S,B,D,St,K,E}C=\{O,S,B,D,St,K,E\}

其中:

  • OO:Object,对象;
  • SS:State,状态;
  • BB:Behavior,行为;
  • DD:Data,数据;
  • StSt:Structure,结构;
  • KK:Condition,条件;
  • EE:Event,事件。

例如:

异常:
设备温度过高

候选原因:
├── 冷却系统关闭
├── 冷却能力下降
├── 环境温度过高
├── 温度传感器错误
└── 设备负载过高

这些都是候选原因。

但是,候选原因并不等于真实原因。

因此:

CandidateCause≠ConfirmedCauseCandidateCause \neq ConfirmedCause

机器还必须通过原因匹配进一步判断。


121.7 原因与异常的关系

原因和异常之间可以建立因果关系:

Ci→AjC_i \rightarrow A_j

表示原因 CiC_i 可以导致异常 AjA_j

例如:

CoolingOff→TemperatureIncreaseCoolingOff \rightarrow TemperatureIncrease

进一步:

TemperatureIncrease→OverheatTemperatureIncrease \rightarrow Overheat

形成:

CoolingOff→TemperatureIncrease→OverheatCoolingOff \rightarrow TemperatureIncrease \rightarrow Overheat

如果机器观察到了:

OverheatOverheat

则可以反向寻找:

Overheat←TemperatureIncrease←CoolingOffOverheat \leftarrow TemperatureIncrease \leftarrow CoolingOff

这就是诊断过程中的逆向原因搜索。


121.8 原因匹配

121.8.1 原因匹配定义

原因匹配(Cause Matching)是将异常对象的特征与候选原因的特征、条件、关系和历史结果进行比较,以确定候选原因与当前异常之间匹配程度的过程。

定义原因匹配函数:

M(C,A)=Match(C,A)M(C,A)=Match(C,A)

其中:

  • CC:候选原因;
  • AA:异常对象;
  • MM:匹配结果。

最简单的匹配结果为:

M(C,A)∈{0,1}M(C,A)\in\{0,1\}

其中:

  • 00:不匹配;
  • 11:匹配。

但是实际诊断通常需要多个原因之间进行比较,因此可以进一步定义匹配度:

Score(C,A)=f(F,R,S,T,H)Score(C,A)=f(F,R,S,T,H)

其中:

  • FF:Feature,异常特征匹配;
  • RR:Relation,因果关系匹配;
  • SS:State,状态条件匹配;
  • TT:Time,时间关系匹配;
  • HH:History,历史经验匹配。

121.9 原因匹配的核心条件

原因匹配至少需要检查五个方面。

1. 特征匹配

判断原因是否能够解释异常表现。

例如:

CauseFeature↔AnomalyFeatureCauseFeature \leftrightarrow AnomalyFeature

如果异常表现与原因特征完全不相关,则匹配度低。

2. 状态匹配

判断原因发生时对象是否处于相关状态。

例如:

冷却系统 = OFF

与:

设备温度持续升高

具有较强状态关系。

3. 条件匹配

判断原因发生条件是否成立。

例如:

Temperature>80Temperature>80

只有在相应条件成立时,某些原因才具有意义。

4. 关系匹配

判断原因对象与异常对象之间是否存在已知关系:

Relation(C,A)=TRUERelation(C,A)=TRUE

例如:

CoolingSystem→TemperatureCoolingSystem \rightarrow Temperature

5. 时间匹配

判断原因是否在异常发生之前或异常形成过程中发生。

例如:

CoolingOff→5min→TemperatureIncreaseCoolingOff \rightarrow 5min \rightarrow TemperatureIncrease

时间顺序具有诊断意义。


121.10 原因匹配模型

可以建立统一匹配模型:

CM=wfF+wrR+wsS+wtT+whHCM= w_fF+ w_rR+ w_sS+ w_tT+ w_hH

其中:

  • CMCM:Cause Match Score,原因匹配分数;
  • FF:特征匹配分数;
  • RR:关系匹配分数;
  • SS:状态匹配分数;
  • TT:时间匹配分数;
  • HH:历史匹配分数;
  • wf,wr,ws,wt,whw_f,w_r,w_s,w_t,w_h:各项权重。

权重满足:

wf+wr+ws+wt+wh=1w_f+w_r+w_s+w_t+w_h=1

例如:

CM(C1,A)=0.85CM(C_1,A)=0.85 CM(C2,A)=0.52CM(C_2,A)=0.52 CM(C3,A)=0.21CM(C_3,A)=0.21

则:

C1>C2>C3C_1>C_2>C_3

可以将 C1C_1 排在最高优先级。

需要注意:

匹配度最高不等于绝对真实原因。

它表示当前结构、规则和证据条件下,C1C_1 是最符合当前异常的候选原因。


121.11 原因匹配与概率

在具有多个候选原因的情况下,可以进一步使用概率表示原因可信程度:

P(Ci∣A)P(C_i|A)

表示:

已知异常 AA 发生时,原因 CiC_i 的条件概率。

根据贝叶斯关系:

P(Ci∣A)=P(A∣Ci)P(Ci)P(A)P(C_i|A)= \frac{P(A|C_i)P(C_i)} {P(A)}

其中:

  • P(Ci∣A)P(C_i|A):观察到异常后的原因概率;
  • P(A∣Ci)P(A|C_i):原因发生时产生该异常的概率;
  • P(Ci)P(C_i):原因的先验概率;
  • P(A)P(A):异常发生的总体概率。

这样,WSaiOS可以同时使用:

规则匹配 + 结构匹配 + 条件匹配 + 概率计算

形成更加完整的诊断机制。

这仍然属于符号逻辑、规则计算和概率计算,而不是神经网络推理。


121.12 单一原因诊断

如果一个异常只对应一个明确原因:

A←CA \leftarrow C

则:

Diagnosis(A)=CDiagnosis(A)=C

例如:

异常:
数据库连接失败

检测:
数据库服务 = OFF

如果规则明确规定:

DatabaseService=OFF→ConnectionFailureDatabaseService=OFF \rightarrow ConnectionFailure

则可以直接得到:

Cause=DatabaseServiceOffCause=DatabaseServiceOff

这是直接诊断。


121.13 多原因诊断

现实对象通常存在多个可能原因:

A←{C1,C2,C3,…,Cn}A \leftarrow \{C_1,C_2,C_3,\ldots,C_n\}

此时不能简单选择第一个原因。

必须进行:

候选原因生成 → 原因匹配 → 匹配评分 → 原因排序 → 诊断选择

即:

A→Candidates→Match→Score→Rank→DiagnosisA \rightarrow Candidates \rightarrow Match \rightarrow Score \rightarrow Rank \rightarrow Diagnosis

例如:

异常:设备温度过高

C1:冷却系统关闭
C2:环境温度过高
C3:设备负载过高
C4:传感器异常

机器计算:

Score(C1,A)=0.91Score(C_1,A)=0.91 Score(C2,A)=0.63Score(C_2,A)=0.63 Score(C3,A)=0.78Score(C_3,A)=0.78 Score(C4,A)=0.35Score(C_4,A)=0.35

于是形成:

C1>C3>C2>C4C_1>C_3>C_2>C_4

诊断系统可以把 C1C_1 作为当前首要诊断原因,同时保留其他候选原因。


121.14 多重原因诊断

某些异常不是单一原因产生,而是多个条件共同产生:

C1∧C2→AC_1\land C_2\rightarrow A

例如:

HighLoad∧CoolingOff→OverheatHighLoad \land CoolingOff \rightarrow Overheat

这意味着:

  • 单独高负载可能不会造成严重异常;
  • 单独关闭冷却系统也可能不会立即造成严重异常;
  • 两者同时成立时才形成严重过热。

因此,诊断系统必须支持:

ANDAND

关系。

同时,也需要支持:

OROR

关系:

C1∨C2→AC_1\lor C_2\rightarrow A

表示多个原因中的任意一个都可能导致异常。

因此原因结构至少包括:

单原因、AND多原因、OR多原因、链式原因、间接原因。


121.15 原因链

异常可能不是由一个直接原因产生,而是经过多个中间状态逐步形成。

例如:

C1→S1→B1→R1→AC_1 \rightarrow S_1 \rightarrow B_1 \rightarrow R_1 \rightarrow A

具体可以表示:

冷却系统关闭 → 温度上升 → 设备进入高温状态 → 工作效率下降 → 结果异常

因此诊断系统不仅要寻找直接原因,还需要寻找原因链。

定义:

CauseChain={C1,C2,…,Cn,A}CauseChain=\{C_1,C_2,\ldots,C_n,A\}

并检查:

C1→C2→⋯→AC_1\rightarrow C_2\rightarrow\cdots\rightarrow A

如果链条中的每个关系均成立,则可以形成完整诊断路径。


121.16 诊断结果

121.16.1 诊断结果定义

诊断结果(Diagnosis Result)是机器根据异常对象、候选原因和原因匹配结果形成的结构化判断结果。

可以定义:

DR={A,C,S,E,P,R}DR=\{A,C,S,E,P,R\}

其中:

  • AA:异常对象;
  • CC:诊断原因;
  • SS:原因匹配分数;
  • EE:Evidence,诊断证据;
  • PP:Probability,原因概率;
  • RR:Result,最终诊断状态。

诊断结果不能只表示:

原因 = X

而应该保存:

异常对象
↓
候选原因
↓
匹配条件
↓
匹配分数
↓
诊断原因
↓
诊断可信程度
↓
诊断状态

121.17 诊断状态

诊断结果可以划分为:

UNKNOWN
POSSIBLE
LIKELY
CONFIRMED
REJECTED

其中:

  • UNKNOWN:无法确定;
  • POSSIBLE:存在可能;
  • LIKELY:高度可能;
  • CONFIRMED:已经确认;
  • REJECTED:候选原因被排除。

这样可以避免机器在证据不足时强行生成确定结论。

例如:

Score(C,A)<T1Score(C,A)<T_1

则:

UNKNOWNUNKNOWN

如果:

T1≤Score(C,A)<T2T_1\leq Score(C,A)<T_2

则:

POSSIBLEPOSSIBLE

如果:

T2≤Score(C,A)<T3T_2\leq Score(C,A)<T_3

则:

LIKELYLIKELY

只有当存在足够规则、证据或验证结果时,才能进入:

CONFIRMEDCONFIRMED


121.18 诊断验证

诊断不能停留在原因匹配阶段。

如果机器认为:

C→AC\rightarrow A

则应该进一步验证:

Test(C)→ResultTest(C)\rightarrow Result

例如机器判断:

冷却系统关闭

是设备过热的原因。

恢复冷却系统后:

Temperature↓Temperature\downarrow

并且:

Overheat→NormalOverheat\rightarrow Normal

那么该原因获得更强的验证支持。

因此:

Diagnosis→Treatment/Test→Observation→VerificationDiagnosis \rightarrow Treatment/Test \rightarrow Observation \rightarrow Verification

诊断结果可以因此从:

LIKELY→CONFIRMEDLIKELY \rightarrow CONFIRMED

或者:

LIKELY→REJECTEDLIKELY \rightarrow REJECTED

这使诊断形成可验证的机器认知过程。


121.19 诊断对象工程模型

在PHP OOP中,可以建立 Diagnosis 对象:

class Diagnosis
{
    public $diagnosisId;
    public $anomalyId;
    public $targetObject;
    public $candidateCauses;
    public $selectedCause;
    public $matchScore;
    public $evidence;
    public $probability;
    public $status;
    public $verification;
    public $createdAt;
}

候选原因可以定义为:

class Cause
{
    public $causeId;
    public $causeType;
    public $object;
    public $condition;
    public $state;
    public $behavior;
    public $relation;
    public $rule;
}

原因匹配器:

class CauseMatcher
{
    public function match($anomaly, $cause)
    {
        $score = 0;

        if ($this->matchFeature($anomaly, $cause)) {
            $score += 0.30;
        }

        if ($this->matchRelation($anomaly, $cause)) {
            $score += 0.25;
        }

        if ($this->matchState($anomaly, $cause)) {
            $score += 0.20;
        }

        if ($this->matchCondition($anomaly, $cause)) {
            $score += 0.15;
        }

        if ($this->matchHistory($anomaly, $cause)) {
            $score += 0.10;
        }

        return $score;
    }
}

该结构体现了WSaiOS的核心思想:

异常是结构化对象,原因也是结构化对象,诊断就是两个对象之间的规则匹配和计算。


121.20 诊断系统工程模块

WSaiOS可以建立独立的诊断模块:

Diagnosis System
│
├── AnomalyReceiver
├── AnomalyAnalyzer
├── CauseRepository
├── CauseGenerator
├── CauseMatcher
├── CauseScorer
├── CauseRanker
├── DiagnosisEngine
├── DiagnosisVerifier
└── DiagnosisStore

运行过程:

异常接收 → 异常分析 → 原因生成 → 原因匹配 → 原因评分 → 原因排序 → 诊断 → 验证 → 保存

其中:

AnomalyReceiver 接收异常对象;

AnomalyAnalyzer 提取异常特征;

CauseRepository 提供候选原因;

CauseGenerator 根据异常特征生成候选原因;

CauseMatcher 进行原因匹配;

CauseScorer 计算匹配分数;

CauseRanker 对候选原因进行排序;

DiagnosisEngine 生成诊断结果;

DiagnosisVerifier 验证诊断结果;

DiagnosisStore 保存诊断记录。


121.21 诊断规则

可以建立基础诊断规则:

规则1:

IF AnomalyDetected = TRUE
THEN GenerateCandidateCauses

规则2:

IF CauseRelationExists = TRUE
THEN CalculateCauseMatch

规则3:

IF CauseConditionSatisfied = TRUE
THEN IncreaseCauseScore

规则4:

IF CauseScore >= DiagnosisThreshold
THEN CreateDiagnosis

规则5:

IF VerificationSuccess = TRUE
THEN DiagnosisStatus = CONFIRMED

规则6:

IF VerificationFailed = TRUE
THEN DiagnosisStatus = REJECTED

由此形成:

Anomaly→Cause→Match→Score→Diagnosis→VerificationAnomaly \rightarrow Cause \rightarrow Match \rightarrow Score \rightarrow Diagnosis \rightarrow Verification


121.22 诊断状态机

诊断过程可以建立独立状态机:

Detected→Analyzing→CandidateGenerated→Matching→Ranked→Diagnosed→Verifying→ConfirmedDetected \rightarrow Analyzing \rightarrow CandidateGenerated \rightarrow Matching \rightarrow Ranked \rightarrow Diagnosed \rightarrow Verifying \rightarrow Confirmed

如果没有找到有效原因:

Matching→UnknownMatching \rightarrow Unknown

如果诊断验证失败:

Verifying→Rejected→AnalyzingVerifying \rightarrow Rejected \rightarrow Analyzing

如果存在多个高匹配原因:

Ranked→MultipleCandidates→FurtherDiagnosisRanked \rightarrow MultipleCandidates \rightarrow FurtherDiagnosis

这样诊断系统能够持续修正,而不是一次判断后永久结束。


121.23 诊断闭环

诊断最终应该进入机器认知闭环:

Observation→Detection→Anomaly→Diagnosis→Cause→Decision→Action→Result→VerificationObservation \rightarrow Detection \rightarrow Anomaly \rightarrow Diagnosis \rightarrow Cause \rightarrow Decision \rightarrow Action \rightarrow Result \rightarrow Verification

其中:

异常检测解决“发生了什么”;

诊断解决“为什么发生”;

决策解决“应该怎么办”;

行为解决“实际做什么”;

结果验证解决“诊断是否正确”。

因此可以形成:

异常→原因→诊断→验证\boxed{ 异常 \rightarrow 原因 \rightarrow 诊断 \rightarrow 验证 }

诊断不是机器认知的终点,而是从“异常认知”进入“原因认知”的关键桥梁。


121.24 诊断理论的核心模型

综合本章内容,可以建立完整诊断模型:

A={O,T,E,A,D,S,C}A=\{O,T,E,A,D,S,C\}

首先得到异常对象 AA

然后生成候选原因:

C={C1,C2,…,Cn}C=\{C_1,C_2,\ldots,C_n\}

对每个候选原因进行匹配:

Mi=Match(Ci,A)M_i=Match(C_i,A)

计算原因分数:

Scorei=f(Mi)Score_i=f(M_i)

进行排序:

C(1)>C(2)>⋯>C(n)C_{(1)}>C_{(2)}>\cdots>C_{(n)}

选择当前最佳诊断:

C∗=argmaxCiScore(Ci,A)C^*=argmax_{C_i}Score(C_i,A)

最终形成:

Diagnosis(A)=C∗Diagnosis(A)=C^*

如果经过验证:

Verify(C∗,A)=TRUEVerify(C^*,A)=TRUE

则:

DiagnosisStatus=CONFIRMEDDiagnosisStatus=CONFIRMED

否则:

DiagnosisStatus=REJECTEDDiagnosisStatus=REJECTED

或者返回重新诊断:

Diagnosis→ReanalysisDiagnosis \rightarrow Reanalysis


121.25 本章总结

诊断理论建立在异常检测理论之上。

第120章回答:

哪里异常?\boxed{哪里异常?}

第121章进一步回答:

为什么异常?\boxed{为什么异常?}

本章建立了五个核心概念:

第一,诊断定义。

诊断是根据异常对象寻找异常原因,并通过原因匹配、排序和验证形成诊断结果的过程。

第二,异常对象。

异常必须被结构化表示:

AO={Object,Type,Expected,Actual,Deviation,Severity,Condition}AO=\{Object,Type,Expected,Actual,Deviation,Severity,Condition\}

第三,异常原因。

原因是能够直接或间接导致异常的对象、状态、行为、数据、结构、条件或事件。

第四,原因匹配。

机器通过特征、关系、状态、条件、时间和历史等信息计算候选原因与异常之间的匹配程度:

Score(C,A)=f(F,R,S,T,H)Score(C,A)=f(F,R,S,T,H)

第五,诊断结果。

诊断结果不是简单的“原因=某个对象”,而是:

Diagnosis={Anomaly,Cause,Score,Evidence,Probability,Status}Diagnosis= \{ Anomaly, Cause, Score, Evidence, Probability, Status \}

最终形成完整诊断流程:

异常检测→异常对象→候选原因→原因匹配→原因排序→诊断结果→诊断验证\boxed{ 异常检测 \rightarrow 异常对象 \rightarrow 候选原因 \rightarrow 原因匹配 \rightarrow 原因排序 \rightarrow 诊断结果 \rightarrow 诊断验证 }

从工程角度看,诊断理论进一步把WSaiOS的机器认知能力从异常发现推进到原因识别

机器由此开始形成一种更加完整的认知结构:

实际对象→异常→原因→诊断→验证\boxed{ 实际对象 \rightarrow 异常 \rightarrow 原因 \rightarrow 诊断 \rightarrow 验证 }

这为后续的故障处理、原因消除、恢复控制以及诊断反馈建立了理论和工程基础。

Leave a Reply

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