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

5542                                                      软件学报  2025  年第  36  卷第  12  期


                 传播变量. 为了方便描述, 用       e c 、e p 、e s 分别代表组件变量、传播变量及单传播变量. 利用碰集算法直接计算诊断
                 时需要返回待诊断的组件, 所以把组件变量放入编码中.
                    定义  9. 极大可满足子集     (maximal satisfiable subset, MSS) [11] . 给定子句集  U, 若  F  ⊆ U, F  称作  U  的极大可满足
                 子集, 当且仅当    F  是可满足的, F  再添加一个子句是不可满足的.
                    定义  10. 极小修正集    (minimal correction set, MCS') [11] . 给定子句集  U, 若  F  ⊆ U, F  称作  U  的极小修正集, 当且
                 仅当  U\F  是可满足的, U\F  再添加一个子句是不可满足的.
                    由图  4  可知, 在基于模型诊断中, 极小不可满足子集和极小冲突集是等价的, 而计算他们的极小碰集, 即极小
                 修正集和极小碰集也是等价的          [11] . MSS  和极小诊断互为补集, 利用碰集算法, 在不改变碰集算法的规则前, 优先选
                 取传播变量, 选取所有可以满足的子句            (相当于求解极大可满足子集), 对于不可满足的子句选取组件变量进行碰
                 集求解   (相当于求解补集), 最终的碰集解只需要保留组件变量.

                                                         极小碰集
                                         极小不可                            极小修正
                                         满足子集                               集
                                                                 互为补集
                                                               极大可满
                                         等价         系统描述                     等价
                                                                足子集
                                                                 互为补集
                                         极小冲突                             极小诊断
                                            集             极小碰集

                                               图 4 系统描述到候选诊断关系图

                    命题  1. 碰集算法计算带有组件变量的          CNF  编码可以获得所有极小诊断.
                    下面分别从正确性和完备性来对命题              1  进行证明.
                    正确性: 由诊断定义      1  可知, 需要找到一个极小诊断∆ 来满足系统所产生的所有子句. 利用碰集算法首先找到
                 不含组件的最大可满足的子集           MSS, 剩余不可满足的子句       (MSS  的补集) 用组件变量代替, 即极小诊断.
                    完备性: MCS'的补集是      MSS (具有一一对应关系), 根据已有算法可知            MCS'是完备性的, 那么可以推出         MSS
                 的完备性, 故   MSS  的补集也是完备的.
                    证毕.
                    例  3: 利用碰集计算图     3(c) 中  F={{1, −12}, {2, −13, −12}, {2, 13, 12}, {6, −17, −12}, {6, 17, 12}, {3, −13}, {4,
                 −13, −17}}的极小诊断.
                    假设利用碰集算法, 在不选取组件变量的前提下, 碰集                HS={12, −13, −17}对应的一个  MSS(F)={{2, −13, −12},
                 {2, 13, 12}, {6, −17, −12}, {6, 17, 12}, {3, −13}, {4, −13, −17}}, 则剩下一个集合{1, −12}, 需要选取组件变量  1 (选
                 取变量−12  会形成不可行解), 因碰集中只需要保留组件变, 故碰集                HS  只需要返回诊断解{1}.
                    直接调用碰集算法得到的解中含有大量的非组件变量. 为了避免产生过多的冗余解, 在变量选取的时候, 优先
                 选取传播变量, 并删除含有单传播变量的子句. 我们提出一种集合分裂策略, 该策略结合碰集算法, 大幅度减少左
                 右分支的冗余子句.
                  2.2   集合分裂
                    在求解诊断时, 因获得的解是极小的, 故可以删除含有单传播变量                     e s 的子句. 我们用引理   1  给出, 并用碰集知
                 识进行证明.
                    引理  1. F  和  F'有相同的极小诊断, 其中    F'={F−{S}|S   ∈ ∧ e s   ∈ S}.
                                                               F
                    证明: 首先证明∆是      F'的极小诊断也是      F  的极小诊断. 因   e s 可以满足子句集    S, 当∆对  e s 进行传播时, e s 已经
                 与  S  有交集, 不会改变∆的值, 故∆也是     F  的极小诊断. 下面证明∆是      F  的极小诊断解也是      F'的极小组件诊断解.
                    反证法: 若∆是    F  的极小诊断, 因   F'是  F  的真子集, 故∆也是  F'的诊断. 接着证明极小性, 根据极小性原理, 若∆
   156   157   158   159   160   161   162   163   164   165   166