CryptoMinistat 5.0.1绑定(SAT解算器)

pycryptosat的Python项目详细描述


对CythTimeNISAT SAT求解器的绑定< BR> = BR/> > BR/>此目录提供CythTimeSISAT在C++级别上的Python绑定,
即导入PyCirectoAT时,财产税CryptoMinistat解算器成为
Python进程本身的一部分。

编译
----
pycryptosat Python包在编译CryptoMinistat时编译它不能单独编译,必须与cryptoministat同时编译您需要python开发库才能编译:


````
apt get install python dev
```

cmake然后指出pycryptosat将被编译:

````
cd cryptominiat
mkdir build
cd build
cmake….
[…]
--找到pythoninterp:/usr/bin/python2.7(找到合适的版本“2.7.9”,最低要求是“2.7”)
--找到pythonlibs:/usr/lib/x86_-linux-gnu/libpython2.7.so(找到合适的版本“2.7.9”,最低要求是“2.7”)
--python_可执行文件:filepath=/usr/bin/python2.7
--python_库:filepath=/usr/lib/x86_64-linux-gnu/libpython2.7.so
--python_include_dir:filepath=/usr/include/python2.7
--pythonlibs_version_string=2.7.9
--确定,找到python解释器,libs和头文件
--构建python接口
[…]
```


调用
“make install”时,它将生成pycryptosat库并安装它。


用法
----

“pycryptosat”模块有一个对象,`` solver``有两个函数
``solve``和``add`clause`。

`add`clause()``函数接受一个可iterable的文本列表,例如
``[1,2]``它表示真值``1或2=true```。例如,
``add_子句([1])``将变量``1``设置为``True`。

>;>s=Solver()
>;>s.add_子句([1,2])
>;sat中,solution=s.solve()
>;>print sat
true
>;>print solution
(none,true,true)

元组的第一部分表示
问题是否可以满足。在这种情况下,它是“真的”,即可以满足。第二个
部分是一个包含解决方案的元组,前面没有,因此可以用变量号索引到
中。例如,``solution[1]``返回
variabe``1``的值。


``solve()``方法有选择地接受一个参数``assumptions``它允许用户以临时方式将值设置到解算器中的特定变量。这意味着,如果问题是可满足的,但例如,如果变量2为FALSE,那么“solve([-2])”将返回“UNSAT”但是,对“solve()”的后续调用仍将返回一个解决方案。
如果使用的不是假设的“add_clause()”,随后的
``solve()``调用将返回不可满足的结果。

``Solver``接受以下关键字参数:
*``confl`limit``:传播限制(整数)
*``verbose``:详细级别(整数)

`confl`limit``参数为解算器设置一种超时限制如果时间不够,则返回````(none,none)``。


例如
----


>
让我们来考虑下面的子句,用
dimacs`cnf<;http://en.wikipedia.org/wiki/wiki/confive/confive_normal_form>;`
格式::

>p cnf 5 3 3
>1-5 4 0
-1-5 4 4 4 0
-1 5 3 3 3 3 3 4 0 0
-3-4 0
-1-5 5 4 4 0 0
-1-5 4 0 0 0
-
在这里,我们有5个变量和3个子句,第一个子句是
(x\:sub:`1'或不x\:sub:`5'或x\:sub:`4')。
请注意,变量x\:sub:`2'不用于任何子句,
这意味着对于x\:sub:`2'=true的每个解,我们ust
也有一个x::sub:`2`=False的解决方案在python中,每个子句都被
最方便地表示为整数列表。当然,将每个解也表示为整数列表是有意义的,其中符号
对应于布尔值(+表示真和-表示假),而
绝对值对应于i\:sup:`th`变量::

>;>;import pycryptosat
>;>;solver=pycryptosat.solver()
>;>;解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案。解决方案:x:子:子:1`=x:子:子:4`=x:子:5`=true,
x:子:2`>x:子:2`>2`>>>>>>;解决方案。解决方案。解决方案:解决方案。解决方案:解决方案。解决方案([-3,--4,--4,--4,--4]>=x\:sub:`3`=假

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java@AfterEach注释在Spring测试中被忽略   散列如何使用bouncy castle在Java中创建SHA512摘要字符串?   java无法使用Okhttp获取响应cookie   100个数的java阶乘   多线程如何在Java中实现对象计数器   java我的精灵不显示背景   java如何在com上应用PanelSlideListener。索特里。滑动面板。SlidengUpPanelLayout SlideUp库   java如何在JDBC中使用WHERE EXISTS函数   java Swing:标签前景中的白色被绘制为黑色   获取java的时间戳。util。另一个java的日期对象为(10/7/14)。util。日期对象(2014年10月7日星期二11:21:00)   java如何在Spring/OpenJPA 1中重新创建用于更新行锁定的选择   java在保存另一个maven项目中的类时,有没有办法让eclipse识别对该类的更改?   java如何解决Spring中的Servlet上下文错误?   java在mongodb中删除记录   显示的java片段与当前片段重叠,而不是替换它