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`=假
即导入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.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`=假