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
内查找关键字seed和random相关问题 更多 >
编程相关推荐