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

Logic SAT解算器设置默认结果(cryptominisat),logic,solver,sat,Logic,Solver,Sat,我正在用SAT建模一个问题,并试图用它来解决它。如果变量没有约束,我想给它一个默认值 我看了一下手册,set\u default\u polarity似乎就是答案。我试过了,但没有达到我的预期效果。我不太明白极性这个词。一些谷歌搜索没有帮到我,因为我不熟悉逻辑 因此,我的问题是: 请您解释一下什么是极性,或者给我指一些入门级的资料好吗 cryptominisat(或通常在SAT解算器中)中是否有接口来设置逻辑变量的默认值?这种功能的术语是什么 谢谢。cryptominisat--hhelp(注意

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

我看了一下手册,
set\u default\u polarity
似乎就是答案。我试过了,但没有达到我的预期效果。我不太明白极性这个词。一些谷歌搜索没有帮到我,因为我不熟悉逻辑

因此,我的问题是:

  • 请您解释一下什么是极性,或者给我指一些入门级的资料好吗

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

  • 谢谢。

    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首先执行
    假极性