优化z3输入

时间:2013-01-08 17:34:37

标签: z3

我正在尝试优化从我的模型生成的z3 python输入。我能够在15k约束(200个状态)的模型上运行它,然后z3在合理的时间内停止完成(<10分钟)。有没有办法优化从我的模型生成的约束?

3种状态的模型:

http://pastebin.com/EHZ1P20C

1 个答案:

答案 0 :(得分:2)

使用自定义策略可以提高脚本http://pastebin.com/F5iuhN42的性能。 Z3允许用户定义自定义策略/解算器。 This tutorial展示了如何使用Z3 Python API定义策略/策略。在脚本http://pastebin.com/F5iuhN42中,如果我们替换行

s = Solver()

s = Then('simplify', 'elim-term-ite', 'solve-eqs', 'smt').solver()

运行时间将从30秒减少到1秒(在我的机器上)。

程序Then正在创建一个由4个步骤组成的策略/策略:

  • 简化器(即应用x + 1 - x + y ==&gt; 1 + y

  • 等规则的重写器
  • 删除If(a, b, c)格式的表达式,其中bc不是布尔值。该脚本广泛使用这种表达方式。策略elim-term-ite将应用消除这种表达的转换。

  • 等式求解器。它适用于x = a And F[x] ==&gt;等转换。 F[a]。在上面的脚本中,这种策略可以消除1000多个变量。

  • 策略smt在Z3中调用通用SMT求解器。

方法.solver()将Z3策略/策略转换为提供addcheck方法的求解器对象。我在消息开头包含的教程有更多详细信息。