【发布时间】:2014-06-12 15:46:28
【问题描述】:
我在当前使用 Z3 for Java 的项目中遇到了一些性能问题:
基本上我目前的大部分限制都非常简单:
例如:(f(x) = 2 && f(y) <= 3) || f(x) <=5
-
我正在使用整个项目共享的静态上下文和求解器实例:
public class ConstraintManager { static Context ctx; static Solver solver; ... }
如果我通过同一个 ctx 实例生成 expr 数十亿次,这会成为问题吗?何时是调用ctx.Dispose() 的最佳时间,或者,管理 ctx 的最佳方式是什么?
我调用了
expr.Simplify()来简化一些约束,例如:f(x)=3 && f(x)<=2。 但是这个 API 结果非常慢。尤其是约束的长度增加了。这是一个已知问题还是因为我使用不正确?我正在使用
expr.substitute(expr1, expr2),但我注意到z3 在替换后会将expr 转换为let-binding 形式。这是为了让公式更紧凑吗?
【问题讨论】: