</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Submit" />
<input type="reset" name="reset" value="Reset" />//确认提交,或者重新输入
</td>
</tr>
</form>
</body>
</html>
该程序命名为index.php,同样把该程序放在C:\xampp\htdocs\test中,然后打开网页运行http://localhost/test/index.php如下:
(图2.2.4)
2.3 生成器操作及结果
假设,输入v=4,c=16,filenumber=88:
(图2.3.1)
提交之后的文件输出结果为output88.cnf,并保存在C:\xampp\htdocs\test中:
(图2.3.2)
打开盖输出文件夹,则可以看到,里面是一个元素取值范围为4,子句个数为16的cnf 3sat(下一节中将会介绍)合取范式:
(图2.3.3)
上述步骤即为生成器的编写和使用步骤,如要得到大量3SAT合取范式,则只需要在Submit之后点击网页上出现的Input again,则会回到初始输入v,c,filenumber的页面,这段程序代码就是上述第一个程序cnf.php中最后一句话所实现的功能。
3 SAT解决器(SAT Solver)
3.1 SAT解决器的选择及特点
在此,选择了MiniSat Solver,因为MiniSat是一个比较简单的,而且是一个基于开原算法的SAT解决器,设计这个解决器的目的就是能够让研究者从这个解决器起步,去深入研究SAT。它是在麻省理工学院(MIT)发表的许可证,目前在很多项目上得到了应用。
首先,MiniSat从2003年就开始着力于通过向人们提供一个小巧的,有效的,并且能生成较好的文档的解决器来帮助人们从SAT入门。它的第一个版本只有600行的代码(不包括注释和空行),但是它却拥有有目前最先进的版本(2003版)的解决器的所有的功能以及特点。在以后的几个版本中,代码的数量有所增加,功能也有所提升,纵使如此,它本身还是非常的小,在2005年的SAT竞赛中,1.13版本的MiniSat解决器仍然被认为是最先进的解决器,至少在所有公开的版本中是这么认为的。
其次,MiniSat具有一切特殊的,其他解决器达不到的特点。第一点,它操作简单,容易修改,因为代码行数少,并且它生成的文档很容易理解,容易操作。它是被精心设计成一个理想的起点,用来让初学者适应SAT技术并理解SAT问题。第二点,它是一个高度有效的解决器,在2005年的SAT竞争中,在所有类别的解决器中获胜。MiniSat 解决器既能作为初学者用来入门的工具,又能作为一个应用程序来深入研究SAT。第三点:它的设计原理是为了适应整体性,他能够支持递增的SAT,而且它具有增加子句限制以外限制条件。它凭借着自身的易于操作的特点,成为了一个其他工具的整体上的基础工具,比如一个模型检查器,或者一个更多限制条件的解决器。
3.2 SAT解决器工作原理
MiniSat的工作原理很简单,们可以很容易就掌握,和其他许多解决器一样,MiniSat要求它的输入格式为合取范式(也就是CNF形式,或者cnf形式),CNF的促成板块如下:
元素:元素是指一个变量(比如x),或者一个反变量(比如-x)。
子句:子句是多个变量的集合,当中连接词是“或(OR)”,可以写成“|”,在同一个子句中,变量是不可以重复的。 SAT+MiniSAT三元可满足性问题的研究与实现(4):http://www.751com.cn/jisuanji/lunwen_1929.html