Page 124 - 《软件学报》2021年第9期
P. 124

2748                                 Journal of Software  软件学报 Vol.32, No.9,  September 2021

         的得分数组 vs i .score,并对其进行排序;第 12 行~第 24 行表示当出现得分均等的若干个变量时,从中随机选取所
         需个数变量;最后输出所选择的变量.
             变量得分的计算,令 F 为 CNF 公式,C i ={l 1 ,…,l k }为子句集中任意子句(i∈(0,m]),m 为子句数,W i 为子句相关
         联文字的权值.则变量 v 基于 F 的得分函数为
                                                    m
                                           Score ()v = ∑ |δ (, ) |C l × W i .
                                                         i
                                                   i= 1
             在以上公式中,δ为二元谓词特征函数,代表多值逻辑的取值.令 l 表示在子句 C i 中变量 v 所对应文字的取值.
         δ的具体定义如下:
                                                ⎧ 1,   C中的 l为正文字
                                         δ (, )Cl = ⎨  i        .
                                            i    −
                                                ⎩  1, C中的 l为负文字
                                                     i
             以上公式给出了变量得分的计算方式,基本思想为:根据文字出现在子句中的形式取相应的值.正文字取
         1(变量所对应文字为 l时取 1),负文字取−1(变量所对应文字为¬l 时取−1).通过求和计算累计变量的得分,根据得
         分将变量排序,进而选取所需变量.该方法的时间复杂度是线性的,因此,该预处理方法所需时间在求解的过程
         中所占比重是极小的.
             例 1:令 CNF 公式 F={A∨C∨¬D,¬B∨¬G∨H,¬A∨E∨G∨¬H,C∨E∨H,¬D∨G∨¬H},在该测试用例中,每个变量
         相对应的文字权值 W i 为 1,则变量的得分如下:
             •   Score(A)=|1×1|+|0×1|+|(−1)×1|+|0×1|+|0×1|=2;
             •   Score(B)=|0×1|+|(−1)×1|+|0×1|+|0×1|+|0×1|=1;
             •   Score(C)=|1×1|+|0×1|+|0×1|+|1×1|+|1×1|=2;
             •   Score(D)=|(−1)×1|+|0×1|+|0×1|+|0×1|+|(−1)×1|=2;
             •   Score(E)=|0×1|+|0×1|+|1×1|+|1×1|+|0×1|=2;
             •   Score(G)=|0×1|+|(−1)×1|+|1×1|+|0×1|+|1×1|=3;
             •   Score(H)=|0×1|+|1×1|+|(−1)×1|+|1×1|+|(−1)×1|=4.
             由例 1 可以看出:给定 CNF 公式 F 中,所有文字的权值为 1,在对变量选择的过程中扫描一次即可得知变量
         的得分.在选取变量阶段,我们选取得分最高的变量(例 1 中的变量 F).在硬件条件允许的条件下,我们可以选择
         多个变量.如果我们选择 3 个变量,那么会根据得分依次选择变量 G 和变量 H,而第 3 个变量的选取则在得分相
         等的变量{A,C,D,E}中随机选取一个.
             我们的目的在于对原解空间进行最大程度化简,因此选择了得分最高的变量作为初始变量.最理想的情况
         是存在某个变量出现在每个子句中,这样可以最大程度地降低子句集规模,得到的问题规模最小.即:在预处理
         阶段约简了原子句集,其约简后的结果与原子句集是逻辑等价的.
             定理 1.  预处理阶段,化简后的子句集与原子句集是逻辑等价的.
             证明:固定了极大项中的文字之后,原子句集中带有互补文字的子句可直接忽略,因为这样的子句是无法扩
         展出当前极大项的;而带有相同的文字可以忽略不计,只看除了该文字剩余部分的子句.这样,剩余变量的模型
         组成了新的极大项,与化简后的子句集相对应,即,同原极大项和原子句集是逻辑等价的.
             例 2:令 CNF 公式 F={A∨B∨C∨D,¬A∨B∨¬C∨E,¬A∨¬B∨¬G,¬A∨B∨¬D∨¬E,B∨C∨¬D∨G},按照算法 1 选取
         变量,我们应选择的变量为 A 和 B.如果我们单看其中的一个子空间,变量取值为¬A 和 B,那么化简的原子句集为
         F′={¬C∨E,¬D∨¬E,C∨¬D∨G},新的解空间是由变量{C,D,E,G}所组成的极大项空间.
             由例 2 可以看出:在保证了逻辑等价的前提下,化简后的子句集规模已经远远地小于原子句集的规模.实验
         证明:不论在时间还是空间上,都有了很大的提高.
         2.2   PERM算法
             选择变量的目的在于化简解空间,而并行的目的是基于化简基础上能够全面地对子句集求解.由于选择的
         变量组合的不同,对子句集化简的程度也不同.基于该问题,我们会选择几种化简后,求解效率最高的那个子空
   119   120   121   122   123   124   125   126   127   128   129