我有一大堆线性实数算术约束要解决,我逐步将它们提供给求解器。经过一段时间后,Z3似乎总是陷入困境。 Z3内部是否会改变其解决约束的策略,例如远离Simplex算法并尝试其他算法等。或者我是否必须明确指示Z3这样做?我正在使用Z3py。
答案 0 :(得分:2)
如果没有进一步的细节,就不可能准确回答这个问题。
通常,如果没有设置逻辑并运行默认策略或在没有其他选项的情况下调用(check-sat)
,Z3将在第一次看到push
命令时切换到不同的解算器;在此之前,它可以使用非增量求解器。
增量求解器带有增量求解器的所有正面和负面,即最初可能更快,但它可能无法在一段时间后利用先前学习的引理,并且它可能只记得太多不相关的事实。此外,启发式可以“记住”稍后不适用的信息,例如,在弹出所有内容并且推送相同变量的不同问题之后,“好”变量排序可能变为坏的。过去,一些用户发现使用增量求解器进行一些查询会更好,但是当它变得太慢时从头开始。