繁体   English   中英

Z3py,随机不同解生成

[英]Z3py, random different solution generation

from z3 import *
import random
a = Int('a')
b = Int('b')

s = Tactic('qflra').solver()
s.add(a > 10)
set_option('smt.arith.random_initial_value', True)
set_option('smt.random_seed', random.randint(0, 2 ** 8))

while s.check() == sat:
    m = s.model()
    print m[a]
    s.add(a != m[a])
    set_option('smt.random_seed', random.randint(0, 2 ** 8))

结果似乎只是随机了一秒钟......然后它才开始给出连续的数字。

4294966399
4294966398
4294966397
4294966396
4294966395
4294966394
4294966393
11
12
13
14
4294966400
15
16
17
18
19

我怎样才能让它更随机? 至少,不是连续数字的列表。 我的最佳目标是拥有一个在解决方案空间中分布相当均匀的解决方案列表。

我认为您将随机化与抽样混为一谈。 正如@JohanC 指出的那样,您通常会修复一个随机种子,以便在多次运行的 SMT 中获得一致的结果。 仅仅因为你改变了种子,并不意味着你会得到不同的结果。 与设置一些随机数相比,采样是一个完全不同的(也更加困难)问题。 否则,你所做的就是正确的; 要找到所有可设置的选项,请运行z3 -p > options.txt并在options.txt查找关键字种子和随机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM