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 JavaFX触控事件未触发Ubuntu 20.04触控笔记本电脑   java如何在AWT中关闭窗口?   java Dagger 2:注入具有构造函数参数的成员   创建对象的Java调用类   对象我想在A.java中添加两个数字,并在B.java中打印结果(如何?)   java如何使用AWS SDK for Android从数字海洋空间下载图像?   java Facebook sdk 4.0.1无法使用Android studio获取某些字段   4分钟后web应用程序(Angular 8和Rest API)中的java自动会话超时   在Eclipse for Java EE developers edition中禁用HTML警告   java按字母顺序排列字符串我错过了什么明显的东西吗?   java在Jshell中println和printf有什么不同