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

李壮  等:基于局部搜索的并行扩展规则推理方法                                                          2747


             本文提出的并行处理是一种结合了对解空间化简的预处理方法.在选择特定的变量之后,对原子句集进行
         化简,化简后的子句集与原子句集是逻辑等价的,这也极大地降低了对整个子句集求解的空间需求;并在
         ERACC 算法中加入了对初始值的赋值限制,改变了 ERACC 对初始值赋为 1 的单调做法,使求解器整体求解能
         力得到了较大地提升.
         2.1   CPVI算法

             我们通过选取变量的启发式算法,对出现在每个子句中的文字赋予权值.从文字出现在各个子句中的累计
         次数计算出得分最高的变量.首先,遍历原始子句集获得所有文字的数组,从数组中选取最大数对应的变量.如
         果同等数量的变量有若干个,那么从中随机选取需求个数作为初始变量,变量个数由所划分的解空间参数决定.
         变量选取算法如下,其中,vs=(var,score)表示变量及对应的得分,其中,var 表示变量,score 表示变量的得分.
             算法 1.  计算选取的变量 CPVI(computing the picking variables initially).
             输入:CNF 公式 F={C 1 ,…,C m },选取变量个数α;
             输出:CNF 公式 F 中包含最多文字的前α个变量的集合 result.
             1   result←∅,vs←∅;
             2   {v 1 ,v 2 ,…,v n }←getAL(F)       //函数 getAL 返回 CNF 公式 F 中所有变量的集合
             3   FOR (i←1; i<n+1; i++)             //初始化数组 score
             4      vs i .var←v i ;
             5      vs i .score←0;
             6   FOR (i←1; i<n+1; i++)             //对每个变量循环
             7      FOR (j←1; j<m+1; j++)          //对每个子句循环
             8         IF vs i .var∈C j
             9         THEN vs i .score=vs i .score+1;  //数组 score 的第 i 个元素表示第 i 个变量的得分
             10 sv←sort(vs,n);                     //函数 sort 根据 score 域对数组 vs 进行从大到小的排序
             11 ns←{sv α .var};
             12 i←α+1;
             13 k←1;
             14 IF sv α .score=sv i .score
             15 THEN
             16     WHILE (i<n+1 and sv α .score=sv i .score)
             17        ns←ns∪{sv i .var};
             18        i←i+1;
             19     i←α−1;
             20     WHILE (i>0 and sv α .score=sv i .score)
             21        ns←ns∪{sv i .var};
             22        k←k+1;
             23        i←i−1;
             24     svars←random(ns,k);            //函数 random 返回从集合 ns 中随机选取 k 个元素
             25     result←{sv 1 .var,…,sv α−k .var}∪svars;
             26 ELSE result←{sv 1 .var,…,sv α .var};
             27 RETURN result.
             算法 1 采取一种遍历求和排序的方式来计算各个变量的得分集合,从而选取权重最高的变量作为化简子
         句集的初始变量.算法第 2 行表示程序遍历了整个子句集 F 并统计了所有变量集合;第 3 行~第 5 行对所有的变
         量及其得分清零;第 6 行~第 10 行分别描述了对所有变量和每个变量在各个子句中的双重循环,得到变量集合
   118   119   120   121   122   123   124   125   126   127   128