Z3:提供解决方案的随机解决方案

时间:2013-09-12 17:20:50

标签: z3

我在http://rise4fun.com/z3/tutorial

中尝试了以下代码
(declare-const a Int)
(assert (> a 100))
(check-sat)
(get-model)

结果始终为a=101。我在答案中需要一些随机性,它会产生[101,MAXINT)范围内的随机数。例如,获取seed=1000并提供a=12344seed=2323提供a=9088765和....

我应该在这个简单的代码中添加什么?

1 个答案:

答案 0 :(得分:4)

线性算术求解器基于Simplex算法。因此,解决方案不会是随机的。 位向量求解器基于SAT,您可以通过在位向量算法中编码问题并选择随机相位选择来获得“随机”解决方案。这是一个示例(也可用here):

(set-option :auto-config false)
(set-option :phase-selection 5) ;; select random phase selection
(declare-const a (_ BitVec 32))
(assert (bvugt a (_ bv100 32))) ;; a > 100 as a bitvector constraint
(check-sat)
(get-model)
;; try again
(check-sat)
(get-model)
;; try again
(check-sat)
(get-model)