Z3 使用MAXSMT的增量学习

Z3 使用MAXSMT的增量学习,z3,smt,optimathsat,Z3,Smt,Optimathsat,我们可以在z3中以增量方式使用MaxSMT解算器(优化)的先前解决方案吗?此外,是否有任何方法可以在优化器上打印出软断言?如果您询问是否在技术上可以使用MaxSMT问题增量运行z3或OptiMathSAT,则答案是是。(使用API) 在执行检查sat时,具有相同id的所有软子句都被视为同一MaxSMT目标的一部分。本质上,OMT解算器惰性地评估MaxSMT目标的相关软子句集。这适用于z3和OptiMathSAT 在迭代过程的早期阶段找到的最优解可能与后期阶段的最优解相差很远 在处理MaxSMT问

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

如果您询问是否在技术上可以使用MaxSMT问题增量运行
z3
OptiMathSAT
,则答案是是。(使用API)

在执行
检查sat时,具有相同
id的所有软子句都被视为同一MaxSMT目标的一部分。本质上,OMT解算器惰性地评估MaxSMT目标的相关软子句集。这适用于
z3
OptiMathSAT

在迭代过程的早期阶段找到的最优解可能与后期阶段的最优解相差很远

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

我看到两种可能的情况:

  • 一种是使用基于内核的MaxSMT引擎。在这种情况下,探索复杂程度不断增加的问题的公式可能有助于确定原始问题的可处理子集。但是,请注意,涉及在以前迭代中学习的软约束的引理在以后的阶段可能不会有用(实际上,OMT解算器将丢弃所有这些子句,并在必要时重新计算它们)

  • 一种是使用基于sat的MaxSMT引擎。在这种情况下,我不清楚将问题分成更小的部分的好处,而不是将搜索集中在特定的(?可能相关?)软子句组上。OMT解算器可以一次给出所有软约束以及硬超时,当警报触发时,它仍然能够产生部分最优解。(涉及成本函数的T-引理在增量调用中不会有用,因为成本函数会发生变化。在最好的情况下,OMT解算器会丢弃它们。在最坏的情况下,这些T-引理会留在环境中,并在不改变解的情况下扰乱搜索)

    我承认,预测OMT解算器的性能有点困难,因为这两种方法都会带来开销。一方面,我们有增量调用的开销和优化过程从零开始多次重启的事实。另一方面,我们在一组更大的软子句上执行BCP的开销更大。我猜想,对于足够大的软条款集,平衡会转向支持增量方法。[这将是一个有趣的调查主题,我想读一篇关于它的论文!]


如果您询问在技术上是否可以使用MaxSMT问题增量运行
z3
OptiMathSAT
,那么答案是是。(使用API)

在执行
检查sat时,具有相同
id的所有软子句都被视为同一MaxSMT目标的一部分。本质上,OMT解算器惰性地评估MaxSMT目标的相关软子句集。这适用于
z3
OptiMathSAT

在迭代过程的早期阶段找到的最优解可能与后期阶段的最优解相差很远

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

我看到两种可能的情况:

  • 一种是使用基于内核的MaxSMT引擎。在这种情况下,探索复杂程度不断增加的问题的公式可能有助于确定原始问题的可处理子集。但是,请注意,涉及在以前迭代中学习的软约束的引理在以后的阶段可能不会有用(实际上,OMT解算器将丢弃所有这些子句,并在必要时重新计算它们)

  • 一种是使用基于sat的MaxSMT引擎。在这种情况下,我不清楚将问题分成更小的部分的好处,而不是将搜索集中在特定的(?可能相关?)软子句组上。OMT解算器可以一次给出所有软约束以及硬超时,当警报触发时,它仍然能够产生部分最优解。(涉及成本函数的T-引理在增量调用中不会有用,因为成本函数会发生变化。在最好的情况下,OMT解算器会丢弃它们。在最坏的情况下,这些T-引理会留在环境中,并在不改变解的情况下扰乱搜索)

    我承认,预测OMT解算器的性能有点困难,因为这两种方法都会带来开销。一方面,我们有增量调用的开销和优化过程从零开始多次重启的事实。另一方面,我们在一组更大的软子句上执行BCP的开销更大。我猜想,对于足够大的软条款集,平衡会转向支持增量方法。[这将是一个有趣的调查主题,我想读一篇关于它的论文!]


这在OptiMathSAT中通过API实现,我想z3也是如此。评估优化模型上的每个软条款,然后“使用它”——这是一个相当笼统的答案,因此我将其作为评论。您能否稍微细化一下问题,以便更好地定义其范围并理解手头的问题?例如,如果我从一组小的软约束开始,请检查模型,然后添加另一组小的软约束