Logic SAT解算器设置默认结果(cryptominisat)
我正在用SAT建模一个问题,并试图用它来解决它。如果变量没有约束,我想给它一个默认值 我看了一下手册,Logic SAT解算器设置默认结果(cryptominisat),logic,solver,sat,Logic,Solver,Sat,我正在用SAT建模一个问题,并试图用它来解决它。如果变量没有约束,我想给它一个默认值 我看了一下手册,set\u default\u polarity似乎就是答案。我试过了,但没有达到我的预期效果。我不太明白极性这个词。一些谷歌搜索没有帮到我,因为我不熟悉逻辑 因此,我的问题是: 请您解释一下什么是极性,或者给我指一些入门级的资料好吗 cryptominisat(或通常在SAT解算器中)中是否有接口来设置逻辑变量的默认值?这种功能的术语是什么 谢谢。cryptominisat--hhelp(注意
set\u default\u polarity
似乎就是答案。我试过了,但没有达到我的预期效果。我不太明白极性这个词。一些谷歌搜索没有帮到我,因为我不熟悉逻辑
因此,我的问题是:
cryptominisat--hhelp
(注意额外的h
!)提供以下扩展帮助:
.....
--polar arg (=auto) {true,false,rnd,auto} Selects polarity
mode. 'true' -> selects only positive
polarity when branching. 'false' ->
selects only negative polarity when
brancing. 'auto' -> selects last
polarity used (also called 'caching')
.....
我首先使用--polar=false
让cryptominisat
搜索带有false/0
变量的解决方案,因为我的示例中大多数解决方案变量都是这样的
在源代码中,这对应于solverconf.h
:
enum class PolarityMode {
polarmode_pos
, polarmode_neg
, polarmode_rnd
, polarmode_automatic
};
相应的SolverConf
变量为PolarityMode polarity\u模式
在main.cpp
中显示了如何在程序中设置此配置属性:
if (vm.count("polar")) {
string mode = vm["polar"].as<string>();
if (mode == "true") conf.polarity_mode = polarmode_pos;
else if (mode == "false") conf.polarity_mode = polarmode_neg;
else if (mode == "rnd") conf.polarity_mode = polarmode_rnd;
else if (mode == "auto") conf.polarity_mode = polarmode_automatic;
else throw WrongParam(mode, "unknown polarity-mode");
}
if(vm.count(“polar”)){
字符串模式=vm[“polar”].as();
如果(模式==“真”)配置极性模式=polarmode位置;
否则,如果(模式=“假”)配置极性模式=极性模式;
否则,如果(模式==“rnd”)配置极性模式=极性模式;
否则,如果(模式==“自动”)配置极性模式=极性模式=自动;
否则抛出错误参数(模式,“未知极性模式”);
}
其他SAT解算器使用的术语有
阶段
或符号
可以通过命令行sat.phase=always\u false
进行参数化,以首先尝试false phase
。见a。事实上,我的第一个关于StackOverflow的问题是在2012年
正在使用命令行语法--sign def=neg首先执行假极性