2

每次我在同一个问题上运行 minisat 时,我都想得到不同的解决方案。我可以通过使用 minisat 的“rnd-seed”参数来做到这一点。它只是随机化变量选择,所以每次我都能得到不同的解决方案。即使此参数在我的机器(Ubuntu16)上完美运行,它也不适用于在 Ubuntu 机器上运行的 gcloud(谷歌云)。

我想我遗漏了一小部分,但我不知道那是什么。

注意:我不想将解决方案的谈判提供给 minisat 以获得不同的解决方案。我实际上需要随机化变量选择。

编辑:让我解释一下为什么我需要随机解决方案。我解决了很多 SAT 问题,通常这些 SAT 问题看起来很像。所以,如果我不能随机变量选择,我大部分时间都会得到非常相似的解决方案,这是我不想要的。因此,我实际上并没有在同样的问题上运行 minisat。

Edit-2:@sascha 想让我解释一下“有效”和“无效”的含义。当我在我的电脑上运行一个 cnf 文件时,每次我得到不同的解决方案。但是,当我在 gcloud 机器上运行相同的 cnf 文件时,我总是得到相同的解决方案。

4

1 回答 1

1

选项 -rnd-seed 不会随机化分支变量选择。相反,它允许您为 Minisat 使用的伪随机数生成器设置种子。

除非使用 -rnd-freq 选项,否则分支的变量选择不涉及随机性。传入一个介于 0 和 1 之间的浮点值。0 表示没有随机性,1 表示尝试在每个分支中使用随机变量。该代码仅尝试随机选择一个变量,大概是因为在任意大的优先级队列中搜索未设置的变量会变得非常昂贵。如果该尝试失败,Minisat 将使用正常的优先级队列进行分支。

于 2018-06-08T23:38:55.287 回答