SMT求解器中约束强化的效率

时间:2012-06-28 13:41:25

标签: z3 smt

解决优化问题的一种方法是使用SMT求解器来询问是否存在(坏)解决方案,然后逐步添加更严格的成本约束,直到命题不再可满足为止。例如,http://www.lsi.upc.edu/~oliveras/espai/papers/sat06.pdfhttp://isi.uni-bremen.de/agra/doc/konf/08_isvlsi_optprob.pdf中讨论了这种方法。

这种方法是否有效?也就是说,当试图解决其他约束时,解算器会重复使用先前解决方案中的信息吗?

1 个答案:

答案 0 :(得分:5)

解算器可以重用尝试解决先前查询时学习的词条。每当执行pop所有引理(自相应的push创建以来)被遗忘时,请记住,而不是在Z3中。因此,要实现这一点,您必须避免使用pushpop命令,并在需要撤消断言时使用“假设”。在下面的问题中,我描述了如何在Z3中使用“假设”: Soft/Hard constraints in Z3

关于效率,这种方法对于每个问题域都不是最有效的方法。另一方面,它可以在大多数SMT求解器之上实现。此外,伪布尔求解器(0-1整数问题的求解器)成功地使用类似的方法来解决优化问题。