python - Z3py,随机不同的解决方案生成
问题描述
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
查找关键字种子和随机。
推荐阅读
- azure - Azure ARM 角色分配不同的资源组
- c# - ASP.NET Core 3.1 Web 应用程序在 IIS Express 上运行时抛出错误 500.30,但在使用 dotnet watch run 时不会
- google-admin-sdk - G Suite Admin SDK 用户观察在可检索名称更改之前发送通知
- javascript - 在 AJAX 中将数据与 FormData 一起作为一个对象发送
- postgresql - AWS RDS Postgres 连接失败
- javascript - 使用 iframe Internet Explorer/Edge 中的 Javascript 将字节数组呈现为 pdf
- c# - lucene.net DoubleRangeFacetCounts 不处理多值字段
- django - 如何通过触发 django post_save 信号创建相同模型的多个对象
- sql - 如何在 Oracle 中搜索字符串
- c# - C#从excel标题第一行存储命名范围