Page 160 - 《软件学报》2025年第12期
P. 160

欧阳继红 等: HSDiag: 变种碰集算法求解诊断                                                      5541


                 变量). 如: 变量  9  表示  i 9 为高电平, −9  表示  i 9 为低电平, 变量  1  表示组件  N 1 故障. 假设观测到系统的输入   i 7 –i 1 的
                                                                                                     1
                 值分别是{−7, 8, 9, 10, 11}, 系统的输出  o 1 和 4  o 1 值是{14, 15}. 显然, 如果组件都正常工作, 得到的理论值应为
                                                       5
                 {−14, −15}, 故该电路必然存在故障组件. 基于冲突集求诊断主要分为两个阶段, 计算冲突集和计算极小碰集.

                                            1-12-9-10               1 -12        1 3 6      1 2 3
                          i 16                                                                   MCS  基
                  i 7                    o 14  1 12 9               2 -13 -12    1 3 7      1 2 4
                      N 5
                                      N 3                计算冲突集                                        于
                                            1 12 10                 2 13 12  冲突集       对应
                                 i 13                     数据格式                  极小不             碰集    冲
                  i 8                       2-13-8-12               6 -17 -12  算法      组件
                              N 2                                               可满足             算法
                                            2 13 8                  6 17 12                           突
                  i 9                                                            子集
                         i 12               2 13 12                 3 -13                             集
                  i   N 1                                    1 -12                           1        求
                  10                        5-16-7-9                4 -13 -17
                                                             2 -13 -12                       2
                                            5 16 7     −7                                             诊
                                  i 17  N  o 15  5 16 9      2 13 12                         3 4      断
                  i 11        N 6      4               8  单 6 -17 -12
                                            6-17-12-11  9
                                            6 17 12    10  元 6 17 12  1 -12       1 12 -13 -17
                           (a) c17电路                      传 3 -13                                     基
                                            6 17 11    11           2 -13 -12     2 -12 -13 17        于
                                            3-14-16-13  14  播 4 -13 -17  2 13 12  碰集  3 4 -12 13 17
                                  ∧
                       ¬ N 1 →(i 12 ⇔ (i 9 i 10 ))  3 14 16  15     6 -17 -12  算法      获得             变
                               ¬
                                                                                                      种
                                  ∧
                       ¬ N 2 →(i 13 ⇔ (i 8 i 12 ))  3 14 13  Obs    6 17 12            诊断             碰
                               ¬
                               ¬ 13 i 16 ))
                       ¬ N 3 →(i 14 ⇔ (i ∧  4-15-13-17    计算碰集      3 -13                             集
                               ¬ 13 i 17 ))
                       ¬ N 4 →(i 15 ⇔ (i ∧  4 15 13       数据格式      4 -13 -17       1 2               求
                                            4 15 17
                               ¬ 7 ∧
                       ¬ N 5 →(i 16 ⇔ (i i 9 ))                                     3 4               诊
                                  ∧ i        CNF 编码                                                   断
                               ¬
                       ¬ N 6 →(i 17 ⇔ (i 11  12 ))
                          (b) 系统描述                                 (c)  诊断算法
                                             图 3 两种算法计算      c17  电路的候选诊断

                    第  1  阶段: 计算冲突集. 该阶段一般是基于哈斯图, 首先对编码中的子句生成一个序列, 根据哈斯图中的节点
                 顺序调用   SAT  求解器判断组成的编码是否可满足, 若不满足则生成一个冲突集合, 通过修剪规则遍历所有的节点
                 后, 就能够得到所有极小冲突集.
                    对于图   3(c), 首先对观测值   Obs 进行单元传播, 转化成计算冲突集数据格式的合取范式编码, 白色字体变量在
                 编码中不会出现, 它对应不可满足子句的组件. 假设调用                 SAT  求解器, 获得两个极小冲突集{1, 3, 6}, {1, 3, 7}, 它
                 们对应的组件分别是{1, 2, 3}, {1, 2, 4}.
                    第  2  阶段: 计算诊断. 调用碰集算法对第        1  阶段获得的极小冲突集进行求解. 一共获得            3  个极小碰集{1}, {2},
                 {3, 4}.
                    可见, 最终得到的极小碰集就是待诊断的故障组件. 在模型诊断中, 部分解的丢失很有可能由于最后一步的故
                 障检测, 而错过最有可能的故障位置           [25] , 然而要得到所有的极小碰集需要先计算所有的极小冲突集, 否则求出的
                 解集可能不完备或者不是诊断解. 如图            3, 若调用  SAT  求解器只得到一个极小冲突集{1, 2, 3}, 则极小碰集{3}就不
                 是一个诊断解, 因为就算组件         N 3 故障也不能解释系统观测.
                  2   基于变种碰集直接求诊断
                    基于冲突集计算诊断, 在检查子句可满足时, 实际上就是在对子句集进行碰集求解. 基于冲突集计算诊断在编
                 码生成方面时, 组件变量不出现在编码中. 在图             3(c) 中, 首先对所有子句进行一个排序, 计算出不可满足子句{1, 3,
                 6}, {1, 3, 7}后, 需要对组件进行一个映射, 对应的组件变量才是模型诊断中需要的极小冲突集{1, 2, 3}, {1, 2, 4}.
                 若组件变量出现在编码中, 则所有的子句都是可满足的, 如一个可满足解{1, 2, 3, 4, 6}.
                  2.1   碰集算法求解诊断

                    为了保证所提出策略的正确性, 我们对编码中的变量进行定义.
                    定义  8. 组件变量和    (单) 传播变量   (component variable and (single) propagation variable). 在编码中, 诊断解中
                 的变量为组件变量, 其余变量为传播变量. 若编码中传播变量不存在补集, 则为单传播变量.
                    在图  3(c) 的  CNF  编码中, 变量  7–17  是传播变量, 1–6  是组件变量. 如编码中仅存在       9  而不存在−9, 则  9  为单
   155   156   157   158   159   160   161   162   163   164   165