SAT求解器设置默认结果(cryptominisat)

时间:2017-01-17 02:43:30

标签: logic solver sat

我正在使用SAT对问题进行建模并尝试使用cryptominisat来解决它。如果没有约束,我想给我的变量一个默认值。

我查看了手册,set_default_polarity似乎就是答案。我尝试了但它没有按照我的预期工作。我真的没有在这里得到polarity这个词。一些谷歌搜索没有帮助我,因为我不熟悉逻辑。

所以,我的问题是:

  1. 您能否解释一下polarity是什么,或者将我指向某些介绍级资源?

  2. 在cryptominisat(或通常是SAT求解器)中是否有接口来设置逻辑变量的默认值?这种功能的术语是什么?

  3. 感谢。

1 个答案:

答案 0 :(得分:0)

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

我使用cryptominisatfalse/0首先搜索带有solverconf.h变量的解决方案,因为我的示例中有大多数解决方案变量。

在来源中,这对应于enum class PolarityMode { polarmode_pos , polarmode_neg , polarmode_rnd , polarmode_automatic };

SolverConf

相应的PolarityMode polarity_mode变量为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"); } 中显示了如何在程序中设置此配置属性:

phase

其他SAT解算器使用signsat.phase=always_false等字词。

Microsoft Z3可以通过命令行false phase进行参数化,首先尝试StackOverflow。查看related question。实际上,这是我在2012年--sign-def=neg的第一个问题。

Clasp正在使用命令行语法false polarity首先获取"Houston is a good city." "I went to San Diego." ...