每次我在同一个问题上运行minisat时,我想获得不同的解决方案。我可以使用" rnd-seed" minisat的参数。它只是随机化变量选择,所以每次我可以得到不同的解决方案。尽管此参数在我的机器(Ubuntu16)上运行良好,但它不适用于在Ubuntu机器上运行的gcloud(Google Cloud)。
我想我错过了一小部分,但我无法弄清楚那是什么。
注意:我不想为minisat提供解决方案以获得不同的解决方案。我实际上需要随机化变量选择。
编辑:让我解释为什么我需要随机解决方案。我解决了很多SAT问题,通常这些SAT问题看起来很像。所以,如果我不能随机选择变量,我大部分时间都会得到非常类似的解决方案,这是我不想要的。因此,我实际上并没有针对同样的问题运行minisat。
编辑-2:@sascha希望我解释我的意思"工作"并且"不起作用"。当我在PC上运行cnf文件时,每次我得到不同的解决方案。但是,当我在gcloud机器上运行相同的cnf文件时,我总是得到相同的解决方案。
答案 0 :(得分:1)
选项-rnd-seed不随机化分支变量选择。相反,它允许您为Minisat使用的伪随机数生成器设置种子。
除非使用-rnd-freq选项,否则分支的变量选择不涉及随机性。传递0到1之间的浮点值.0表示没有随机性,1表示尝试使用每个分支的随机变量。代码只会尝试随机选择一个变量,大概是因为在任意大的优先级队列中搜索未设置的变量会变得非常昂贵。如果那次尝试失败,Minisat将使用普通优先级队列进行分支。