增量削弱Maxsat

Incremental weakening Maxsat

我对 MaxSat 有所了解,并且已经使用 MSU3 以及使用 minisat API 的顺序编码实现了一个朴素的 Maxsat 求解器

我想知道是否有办法加快这个求解器的速度。

我带着这篇论文来了: https://www.researchgate.net/publication/264936663_Incremental_Cardinality_Constraints_for_MaxSAT

那是关于增量弱化及其使用累加器编码的实现

有没有办法通过顺序编码实现增量弱化?

这会大大加快速度吗?

Is there a way to implement incremental weakening with sequential encoding?

顺序计数器编码可以增量构建,也就是说,给定一个电路<= k(1..n)这可以扩展到<= k+1(1..n)<= k(1..n+1).当在 OptiMathSAT 中声明一个新的软条款时,我们在两个方向上将 顺序计数器 电路的大小递增 1(即 kn).我看不出为什么这不能仅在一个维度上完成。

快速浏览一下结果部分后,看起来 迭代编码 明显优于 增量弱化 技术。因此,您不妨尝试实施前一种方法而不是后者。

迭代编码 技术需要从<= 0(1..n) 开始并沿k 维度逐步扩展顺序计数器编码。 (论文中提到,有些MaxSAT算法可能要在两个方向都增加电路)。

  • 顺序计数器电路的输入将是每个软条款的否定文字,因此电路计算伪造的软条款的数量。

  • 在第一次迭代中,s_n_1 将被假定为 false,将所有输入反向传播到 false(即强制所有软条款是 true).

  • 如果第一步是unsat,扩展<= 0(1..n)编码<= 1(1..n),然后假设s_n_1trues_n_2 在下一次可满足性检查时成为 false。在搜索过程中,一旦一个软条款被分配给 false,其余的软条款就会反向传播到 true,除非发现新的冲突。

  • 重复。

Will that give a considerable speed up?

如果没有可靠的实验,很难预测性能。但是,我的建议是去做:实施这种方法应该那么难,而且论文的结果看起来很可靠。

顺序计数器编码需要O(n * k)个子句,与累加器编码相同的数字在应用[=53之后=]k-简化 在 pag。 6、O(n * k)辅助变量。鉴于类似的内存占用,也可能获得类似的性能提升。