Page 393 - 《软件学报》2024年第4期
P. 393

蒋璐宇 等: 针对   MUS  求解问题的加强剪枝策略                                                    1971



                 19.     MUS ← Shrink(midseed)
                 20.     output MUS
                 21.     map ← map ∧ BlockUp(midseed)
                 22.    end if
                 23.   end if
                 24.  end if
                 25. end while

                  3   利用关键  MSS  的加强剪枝策略

                    本文提出一种加强对哈斯图的剪枝策略, 并提出关键                  MSS  的概念. 根据  MUS、MCS   和  MSS  之间的关系, 我
                 们可以通过关键      MSS  进一步对哈斯图进行剪枝操作. 本节首先给出所提出剪枝策略的理论依据, 之后介绍将其结
                 合到  MARCO  算法和   MARCO-MAM   算法中的整体算法流程.
                  3.1   算法的理论基础
                    现有的   MARCO  算法和   MARCO-MAM    算法的剪枝过程均通过已找到的            MUS  和  MSS  来完成的, 在哈斯图
                 中裁剪掉   MUS  的全部超集、MSS      的全部子集, 从而缩减了算法的搜索空间. 然而, 当求解的                MSS  具有某些特定
                 的结构特征时, 可以利用这些         MSS  对搜索空间进行进一步的剪枝操作. 在下述定义                14  中, 我们给出了这种满足
                 “具有特定的结构特征的        MSS”的定义.
                    定义  14. 关键极大可满足子集       (critical MSS, cMSS). 给定一个子句集  C, 称一个极大可满足子集       M  是  C  下的
                                                         |M| = |C|−1 , 即, C  中只有一个子句不在  M  中.
                 一个关键极大可满足子集当且仅当集合的基数满足
                    定义  15. 子极小不可满足子集       (subMUS). 称所有关键极大可满足子集的补集中唯一的子句组成的集合为子
                 极小不可满足子集.
                    在给出关键     MSS  和  subMUS  的定义后, 我们对本文所提出的加强剪枝策略            ABC  表述如下.
                    算法每求出一个关键        MSS  时, 更新  subMUS  并判断其可满足性: 若可满足, 则对代表集合           subMUS  的节点做
                 BlockDown  操作; 否则, 输出  subMUS  为  MUS, 算法结束.
                    性质  1. 集合  subMUS  一定包含在每一个     MUS  中.
                    证明: 假设给定的子句集        C  中有  n 个  cMSS, 每个  cMSS  记为  cMSS i (1 ⩽ i ⩽ n) cMSS i  中缺少的子句记为  c i  ,
                                                                                  ,
                 则  subMUS  = {c 1 ,...,c n } . 根据每个  MSS  的补集都是一个  MCS, 则有每个  cMSS i  对应的  MCS i = {c i } , 又根据  MUS
                 和  MCS  互为极小碰集的性质可知, 每个        MUS  中必然包含    c 1 ,...,c n  . 因此集合  subMUS  必然是每个  MUS  的子集,
                 它一定包含在每一个       MUS  中.
                    性质  2. 使用  MARCO  类算法框架每搜索到一个关键           MSS, 剪枝后哈斯图中的剩余节点一定是代表              subMUS
                 的超集的节点.
                    证明: 哈斯图中的节点除代表          subMUS  和其超集的节点外, 剩余节点或者是代表            subMUS  真子集的节点, 或
                 者是与   subMUS  之间无包含关系的集合的节点. 采用反证法证明.
                    首先, 假设剩余节点中存在代表           subMUS  真子集中的节点. (1) 该节点代表空集: 由于空集是任何一个关键
                 MSS  的子集, 因此算法在找到第        1  个关键  MSS  时, 就已经通过   BlockDown  操作将代表空集的节点剪枝, 故剩余
                 节点中一定没有代表空集的节点. (2) 该节点代表              subMUS  的一个非空真子集: 令该非空真子集为            Q, 则  Q  中至

                 少存在一个元素      e  , 使得  e ∈ subMUS  且  e  <  Q. 由  e ∈ subMUS  可知, 已求解出的关键  MSS  必有一个为集合  P=
                 {i|i ∈ 子句集C且i , e} , 即从子句集  C  中去除一个元素    e 的集合. 由于集合    Q  中没有元素   e , 而集合  P  是所有没有
                     e 的集合中基数最大的集合, 故必有          Q  是  P  的子集, 而集合  P  又是一个关键   MSS, 求解出该关键      MSS  时通
                 元素
                 过  BlockDown  操作已经将其全部子集所在节点剪枝, 因此不存在这样的集合                 Q, 故假设不成立, 剩余节点中没有代
   388   389   390   391   392   393   394   395   396   397   398