使用MAXSMT进行增量学习

时间:2019-12-11 14:52:19

标签: z3 smt

我们可以在z3中以增量方式使用MaxSMT求解器的先前解决方案(优化)吗?另外,是否有任何方法可以在优化程序上打印出软断言?

1 个答案:

答案 0 :(得分:2)

如果您询问是否可以递增地运行z3OptiMathSAT ,答案是。 em>带有MaxSMT问题。 (使用API​​)。

所有具有相同id 的软子句-在执行check-sat-的那一刻被视为同一MaxSMT目标的一部分。本质上,OMT求解器会懒惰地评估MaxSMT目标的相关软子集。这对z3OptiMathSAT都适用。

  

早期发现的最优解可能与迭代过程后期的最优解相距很远。

处理MaxSMT问题时,OMT求解器可以重用 增量调用中的学习子句可能取决于所使用的优化算法。

我看到两种可能的情况:

  • 一个正在使用基于核心的MaxSMT引擎。在这种情况下,探索问题的复杂程度不断提高的形式可能有助于识别原始问题的易处理子集。但是,请注意,涉及在先前迭代中学习到的软约束的引理在以后的阶段可能没有用(实际上,OMT解算器将丢弃所有这些子句,并在必要时对其进行重新计算)。

  • 一个正在使用基于 sat 的MaxSMT引擎。在这种情况下,除了将搜索重点放在特定组的(可能是相关的?)软子句上之外,我不清楚将问题分成较小的块的好处。可以立即为OMT求解器提供所有软约束以及硬超时,并且在警报触发时,它仍然能够提供部分最优的解决方案。 (涉及成本函数的T-Lemmas在增量调用中将不再有用,因为成本函数会发生变化。在最佳情况下,OMT求解程序会丢弃它们。在最坏的情况下,这些T-Lemmas仍保留在环境中并在不改变解决方案的情况下使搜索变得混乱。

    我承认,由于两种方法都会带来开销,因此很难预测OMT求解器的性能。一方面,我们有 incremental 调用的开销,而且优化过程会从头开始多次重启。另一方面,我们需要在更大范围的软子句上执行BCP的开销。我猜想,对于足够多的软子句集,平衡会转向 incremental 方法。 [这将是一个有趣的调查主题,我很想读一篇有关它的论文!]