分支启发的变元的赋值优化算法、布尔可满足性验证算法制造技术

技术编号:28058830 阅读:8 留言:0更新日期:2021-04-14 13:33
本发明专利技术公开了一种分支启发的变元的赋值优化算法、布尔可满足性验证算法。其中分支启发的变元的赋值优化算法,至少一个变元采用以下赋值步骤进行赋值:对待赋值的变元进行第一次赋值;计算赋值以后所述待赋值的变元在分支启发中发生n次冲突的第一时间;将第一次赋值的值进行取反并以取反后的值对待赋值的变元进行第二次赋值;计算赋值以后所述待赋值的变元在分支启发中发生n次冲突的第二时间;比较第一时间和第二时间,选择时间短的那次赋值的值对待赋值的变元进行赋值。本发明专利技术可以加快分支启发算法的计算时间。支启发算法的计算时间。支启发算法的计算时间。

【技术实现步骤摘要】
分支启发的变元的赋值优化算法、布尔可满足性验证算法


[0001]本专利技术涉及等价性验证工具中的布尔可满足性验证
,尤其涉及分支启发的变元的赋值优化算法,以及采用了该赋值优化算法的布尔可满足性验证算法。

技术介绍

[0002]布尔可满足性验证算法通常包含三个主要部分:分支启发算法、演绎机制和BCP(即BCP传播)、以及冲突分析和学习。
[0003]其中,分支启发算法就是选择一系列的决策变量来识别一个快速满足的任务,比较典型的分支启发算法有以下三种。
[0004]第一种随机赋值(RAND),使用简单的决策启发式方法从未赋值变量中随机选择下一个决策变量。根据子句或含义的最大数目,例程选择决策变量。
[0005]第二种动态最大组合和(DLCS),它选择未解析子句中出现次数最多的变量。需要区分所学从句和原语从句。GRASP提出了动态最大个体和(DLIS)决策启发式算法。选择未解析子句数最多的文本。
[0006]第三种变状态独立衰减和(VSIDS)决策启发式算法,主要处理过程如下:
[0007](1)每个极性中的每个变量都有一个计数器,初始化为0。
[0008](2)将子句添加到数据库时,与该子句中每个文本相关联的计数器将递增。
[0009](3)(未赋值)变量和具有最高计数器的极性在每个决策时被选择。
[0010](4)默认情况下,领带是随机断开的,尽管这是可配置的。
[0011](5)周期性地,所有计数器被一个常数除。
[0012]此外,为了在决策时更快地选择计数器值最高的变量,在BCP和冲突分析期间(使用当前实现中的STL集),将维护按计数器值排序的未分配变量列表。
[0013]总的来说,第三种策略可以被视为试图满足冲突子句,尤其是试图满足最近的冲突子句。由于困难问题会产生许多冲突(因此会产生许多冲突子句),因此冲突子句在文字计数方面占主导地位,因此这种方法的主要区别在于统计数据的低通过滤(由上述步骤(5)指示)如何有利于最近冲突子句生成的信息。这种策略的另一个关键特性是,由于它独立于变量状态(除非我们必须选择一个未赋值的变量),它的开销非常低,因为只有在发生冲突时才更新统计数据,并且相应地,会有一个新的冲突子句。即使如此,在一些困难的实例中,决策相关的计算仍然占运行时间的10%。(冲突分析也是运行时的10%,剩余的80%的时间花在BCP传播上。)最终,采用这种策略大大提高了所有最困难问题的性能,而不损害任何简单问题的性能,我们认为这是衡量其成功与否的真正标准。
[0014]在搜索的初始阶段,由于冲突次数较少,VSIDS的活性分数是不准确的,因此通过活性所选择的分支决策具有一定的随机性。另外如何对所选择的变元进行赋值也是需要考虑的,如果是选择不当的话,那么分支启发算法的计算时间将会耗费比较长时间,从而导致计算效率较低。

技术实现思路

[0015]为了解决现有技术中对变元赋值导致计算效率较低的技术问题,本专利技术提出一种分支启发的变元的赋值优化算法、布尔可满足性验证算法。
[0016]本专利技术提出的分支启发的变元的赋值优化算法,至少一个变元采用以下赋值步骤进行赋值:
[0017]对待赋值的变元进行第一次赋值;
[0018]计算赋值以后所述待赋值的变元在分支启发中发生n次冲突的第一时间;
[0019]将第一次赋值的值进行取反并以取反后的值对待赋值的变元进行第二次赋值;
[0020]计算赋值以后所述待赋值的变元在分支启发中发生n次冲突的第二时间;
[0021]比较第一时间和第二时间,选择时间短的那次赋值的值对待赋值的变元进行赋值。
[0022]进一步,所述分支启发的变元中第一个待赋值的变元采用所述赋值步骤进行赋值。
[0023]进一步,所述分支启发的变元中第二个待赋值的变元至最后一个待赋值的变元均采用所述赋值步骤进行赋值。
[0024]进一步,所述分支启发的第一个待赋值的变元通过对CNF文件每个变元的权重进行计算,选择所述权重最高的变元作为SAT求解器的第一个待赋值的变元。
[0025]进一步,所述对CNF文件中每个变元的权重进行计算,包括:
[0026]将CNF文件中的所有文字以子句为单位读入一个二维容器之中;
[0027]对所述存放子句的二维容器进行遍历分别计算CNF文件中每个待赋值的变元的权重。
[0028]进一步,计算每个待赋值的变元的权重具体包括:
[0029]在遍历子句的过程中,当某个待赋值的变元出现在某个子句中,则根据公式Weight
当前
=1/当前子句文字数计算其当前权重;
[0030]当该待赋值的变元在之后的子句中再次出现时,则采用公式Weight
当前
=Weight
历史累加
+1/当前子句文字数对其权重进行累加;
[0031]直至所有子句遍历完成,得到所有待赋值的变元的权重。
[0032]进一步,所述待赋值的变元的第一次赋值的值为1。
[0033]本专利技术提出的布尔可满足性验证算法,在对CNF文件进行布尔可满足性验证时,采用采用上述任一一种技术方案所述的分支启发的变元的赋值优化算法对各个变元进行赋值。
[0034]本专利技术针对现有技术中VSIDS分支启发策略存在的不足,根据权重确定第一个待赋值的变元,在对第一个待赋值的变元进行赋值后,计算发生n次冲突的时间t1,再将该变元的赋值取反,计算发生n次冲突的时间t2,取时间短的赋值进行下一次分支启发赋值,或者取相同时间内发生冲突最多的变元赋值对当前待赋值的变元进行赋值,还可以采用相同的方式进行下一次分支启发赋值。通过本专利技术可以尽快找到符合变元的赋值,加快计算时间,具体测试时间的优化如表1所示,最好的例子中计算时间减少97%,平均时间减少50%以上。
[0035]本专利技术涉及到的技术术语如下:
[0036]·
变元:在命题逻辑中,bool变元x
i
可以取真值0(false)或1(true);
[0037]·
文字:变元x
i
或它的否定如果Bool变元x
i
赋值为1,则文字x
i
满足,如果变元x
i
赋值为0,则文字满足。
[0038]·
子句:一些文字的析取,例如子句中文字的个数称为子句的大小。一个子句中如果有至少一个文字满足,则该子句满足。如果子句中多有文字都不满足,则该子句不满足。
[0039]·
CNF公式:一些子句的合取,例如
[0040]·
SAT问题:布尔可满足性问题Boolean Satisfiability Problem。即,判断能否找出一组赋值,使得给定的CNF公式中的所有子句满足。
[0041]·
自由变元:未被赋值的变元。在所有的最开始,所有的变元都是自由变元。
[0042]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分支启发的变元的赋值优化算法,其特征在于,至少一个变元采用以下赋值步骤进行赋值:对待赋值的变元进行第一次赋值;计算赋值以后所述待赋值的变元在分支启发中发生n次冲突的第一时间;将第一次赋值的值进行取反并以取反后的值对待赋值的变元进行第二次赋值;计算赋值以后所述待赋值的变元在分支启发中发生n次冲突的第二时间;比较第一时间和第二时间,选择时间短的那次赋值的值对待赋值的变元进行赋值。2.如权利要求1所述的分支启发的变元的赋值优化算法,其特征在于,所述分支启发的变元中第一个待赋值的变元采用所述赋值步骤进行赋值。3.如权利要求1所述的分支启发的变元的赋值优化算法,其特征在于,所述分支启发的变元中第二个待赋值的变元至最后一个待赋值的变元均采用所述赋值步骤进行赋值。4.如权利要求1所述的分支启发的变元的赋值优化算法,其特征在于,所述分支启发的第一个待赋值的变元通过对CNF文件每个变元的权重进行计算,选择所述权重最高的变元作为SAT求解器的第一个待赋值的变元。5.如权利要求4所述的分支启发的变元的赋值优化算法,其特征在于,所述对CN...

【专利技术属性】
技术研发人员:刘美华毕舜阳张岩黄国勇金玉丰
申请(专利权)人:国微集团深圳有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1