1

假设您有一个 CNF 公式,其中一些变量标记为特殊。
有没有办法让 SAT Solver(比如 minisat)找到一个解决方案,最大化分配给 true 的特殊变量的数量?

4

3 回答 3

3

你(我)想要的叫做 Partial Max Sat。有一个名为 qmaxsat 的求解器,它似乎工作得很好。

于 2013-01-31T22:45:47.190 回答
0

不确定是否所有这些都可以处理特殊变量的指示,但至少维基百科为搜索提供了一些方向:

有几个求解器提交到最后的 Max-SAT 评估:

  • 基于分支定界:Clone、MaxSatz(基于 Satz)、IncMaxSatz、IUT_MaxSatz、WBO。
  • 基于可满足性:SAT4J、QMaxSat。
  • 基于不可满足性:msuncore、WPM1、PM2。

检查所有这些的描述应该是可管理的。

于 2013-02-07T12:44:51.663 回答
0

您可以使用 PBC 求解器,例如 minisat+ http://minisat.se/MiniSat+.html 他们使用称为伪布尔约束的附加约束来求解常规 CNF 文件 Minisat+ 还支持此类约束的优化,据我了解,它可以解决您的问题

让 x1, .... xn 是你想要最大化的变量 o 真值分配然后你可以定义约束最大化 +1 x1 ..... +1 xn minisat+ 解决了这样的优化问题

于 2014-02-26T12:48:03.310 回答