如何使用 z3py 进行增量求解

2024-01-03

我正在使用 Z3 求解器的 python API 来搜索优化的时间表。它工作得很好,除了有时即使对于小图也非常慢(但有时非常快)。原因可能是我的调度问题的约束相当复杂。 我试图加快速度,并偶然发现了一些关于增量解决方案的文章。 据我了解,您可以使用增量求解来通过仅应用部分约束来修剪一些搜索空间。

所以我原来的代码看起来像这样:

for constraint in constraint_set:
    self._opt_solver.add(constraint)
self._opt_solver.minimize(some_objective)
self._opt_solver.check()
model = self._opt_solver.mode()

我现在将其更改为以下内容:

for constraint in constraint_set:
    self._opt_solver.push(constraint)
    self._opt_solver.check()
self._opt_solver.minimize(some_objective)
self._opt_solver.check()
model = self._opt_solver.mode()

我基本上用“push”命令替换了“add”命令,并在每次推送后添加了一个 check() 。

首先:我的总体方法正确吗? 此外,我遇到了一个无法摆脱的异常:

self._opt_solver.push(constraint) TypeError: push() takes 1 positional argument but 2 were given

谁能给我一个提示,我做错了什么。另外可能还有一个 z3py 教程解释(可能有一些示例)如何通过 python api 使用增量求解。

我的最后一个问题是:这是否是最小化求解器执行时间的正确方法,或者是否有不同/更好的方法?


功能push不需要争论。它创建了一个“回溯”点,您可以pop到后来。看这里:http://z3prover.github.io/api/html/classz3py_1_1_solver.html#abc4ae989afee7ad164844640537107d9 http://z3prover.github.io/api/html/classz3py_1_1_solver.html#abc4ae989afee7ad164844640537107d9

所以它看起来push根本不是您真正想要/需要的。您应该简单地一一添加约束并调用check。然而,我非常怀疑每次添加后的检查是否会显着加快速度。特别是优化求解器(与常规求解器相反)通常从头开始解决所有问题。 (参见此处的相关讨论:https://github.com/Z3Prover/z3/issues/1577 https://github.com/Z3Prover/z3/issues/1577)

关于增量:Python API 是自动“增量”的。增量只是意味着调用命令的能力check()多次,解算器不会忘记之前看到的内容。 (即,调用check,断言更多事实,致电check再次;第二check将从一开始就考虑到所有断言。)您不应该对此做出任何假设,这会给您带来比调用更快的速度check最后一次:这完全取决于启发法和所涉及的决策程序,这取决于手头的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 z3py 进行增量求解 的相关文章

  • Z3 -smt2 -in:获取Z3版本

    使用选项启动后可以获得Z3的版本吗 smt2 in 就像是 get z3 version Z3 4 3 2 x64 Desired reply 在SMT LIB 2 0前端 我们可以使用命令 get info version 该命令是标准的
  • Z3/SMT:我什么时候应该选择推送/弹出来重置?

    我使用 Z3 来解决符号执行器产生的路径条件 该执行器以深度优先顺序探索状态空间 与 CUTE DART 或 可能 SAGE 非常相似 我们正在尝试使用 Z3 的不同方式 在一种极端情况下 我们将每个查询发送到 Z3 并在之后立即 重置 它
  • Z3Py 中最大值的模型不正确

    我想找到一个表达式的最大间隔e对于所有 x 都成立 编写这样的公式的方法应该是 Exists d ForAll x in d d e and ForAll x not in d d e 为了得到这样一个d 公式f在 Z3 中 看上面的 可能
  • Z3 Optimize 最大和最小功能背后的理论是什么?

    我写这封信是为了询问 Z3 Optimize 功能背后的理论 算法 特别是它的maximum and minimum功能 这对我来说似乎很神奇 它是某种二分搜索吗 它如何有效地计算出这里的最大 最小值 我试图搜索相关功能的源代码 例如 ex
  • 在 Mac OS X 上构建 z3

    我正在尝试建立Z3 http z3 codeplex com releases view 95640在 Mac OS X 上 按照 README 文件 我刚刚执行了 autoconf configure make 收到错误 omp h 文件
  • 如何将 Z3 与 C++ 结合使用

    我想将 Z3 与 C 一起使用 并且我遵循了安装指南 使用 Visual Studio 命令提示符在 Windows 上构建 Z3 https github com Z3Prover z3 building z3 on windows us
  • 为什么0=0.5?

    我注意到 Z3 4 3 1 在处理 smt2 文件时出现一些奇怪的行为 If I do assert 0 0 5 就会得到满足 但是 如果我改变顺序并执行 assert 0 5 0 这是不能令人满意的 我对发生的情况的猜测是 如果第一个参数
  • 有人尝试过用Z3本身来证明Z3吗?

    有没有人尝试证明Z3 http research microsoft com en us um redmond projects z3 与Z3本身 是否有可能使用 Z3 来证明 Z3 是正确的 更理论化的是 是否有可能使用 X 本身来证明工
  • 在使用和不使用推送调用的情况下对 UFBV 上的 Z3 进行增量调用

    我正在 UFBV 查询上运行 Z3 目前查询包含2个调用check sat 如果我把push 1刚过check sat Z3在30秒内解决了查询 如果我不放任何push 1根本没有 因此有两个电话check sat没有任何push 1他们之
  • 如何估计在 z3 for SMT 中解决 SAT 部分所花费的时间?

    我已经使用探查器 gprof statshere http www ccs neu edu jaideep example2 stats包括调用图 并试图将所花费的时间分为两类 I SAT 求解部分 包括 纯 布尔传播和 纯 布尔冲突子句检
  • 在 Z3 中证明归纳事实

    我试图在 Microsoft 的 SMT 求解器 Z3 中证明一个归纳事实 我知道 Z3 一般不提供此功能 如Z3 guide http rise4fun com z3 tutorial guide 第 8 节 数据类型 但是当我们限制要证
  • 尝试在Python中使用Z3找到布尔公式的所有解决方案

    我是 Z3 的新手 正在尝试制作一个求解器 将每个可满足的解决方案返回到布尔公式 从其他 SO 帖子中记下笔记 我已经编写了我希望能起作用的代码 但事实并非如此 问题似乎是 通过添加以前的解决方案 我删除了一些变量 但它们又在后面的解决方案
  • 为什么 Z3 在这个简单的输入上返回“未知”?

    这是输入 set option auto config false set option mbqi false declare sort T6 declare sort T7 declare fun set23 T7 T7 Bool ass
  • z3 中的函数声明

    在 z3 中是否可以声明一个以另一个函数作为参数的函数 例如 这个 declare fun foo Int Bool Int 似乎不太管用 谢谢 正如 Leonardo 提到的 SMT Lib 确实not允许高阶函数 这不仅仅是语法限制 使
  • 根据求解器的决定执行 get-model 或 unsat-core

    我想知道 SMT LIB 2 0 脚本中是否有可能访问求解器的最后一个可满足性决策 sat unsat 例如 以下代码 set option produce unsat cores true set option produce model
  • Z3:检查模型是否唯一

    Z3 有没有办法证明 表明给定模型是唯一的并且不存在其他解决方案 一个小例子来演示 declare const a1 Int declare const a2 Int declare const a3 Int declare const b
  • Z3 C API 在运行时更改超时

    是否可以使用 C API 在运行时更改求解器的超时值 为了设置超时 可以执行以下操作 Z3 config cfg Z3 mk config Z3 set param value cfg SOFT TIMEOUT 10000 set time
  • 使用SMT-LIB使用公式计算模块数量

    我不确定使用 SMT LIB 是否可以做到这一点 如果不可能 是否存在可以做到这一点的替代求解器 考虑方程 a lt 10 and a gt 5 b lt 5 and b gt 0 b lt c lt a with a b and c整数
  • Z3:FP 和 BitVector 之间的转换?

    SMTLIB2 中是否有任何方法可以在 BitVector 和 FP 之间进行转换 例如 int2bv 和 bv2int 函数 为了澄清 我正在寻找位的原始表示 而不是例如 BitVec 形式的舍入整数 准确地说 SMTLIB中的浮点运算还
  • Z3 的简化

    declare datatypes SE BROKEN ON OFF declare const s SE declare const a Int simplify or s ON s OFF s BROKEN simplify and g

随机推荐

  • 移动Web应用程序的服务器端架构

    在我开发过的大多数桌面 Web 应用程序中 您都需要一个服务器端 Web 框架 服务器端 Web 框架 Struts Spring MVC 等 具有某种用于处理请求的控制器 然后是用于生成动态内容的模板引擎 Velocity JSP 等 现
  • Oracle 10G XE 的 JDBC 驱动程序

    我已经安装了Oracle 10G XE 我想使用 JDBC 连接到它 我应该使用哪个驱动程序以及从哪里下载它 谢谢 在安装了服务器的机器上 Oracle JDBC 驱动程序位于ORACLE HOME jdbc lib 就放ojdbc14 j
  • 如何暂停用js和html5制作的简单画布游戏?

    在遵循 YouTube 上的一些简单教程后 我创建了一个简单的贪吃蛇游戏 问题是游戏没有暂停功能 例如 当按 P 时 游戏应该暂停 恢复 并且当蛇碰到画布边界时 游戏会自行重新启动 但这是另一个问题 这是我拥有的游戏的完整代码 https
  • 函数参数的 JavaScript 执行上下文

    function Apple this name apple function Orange this name orange this apple new Apple this apple onCalled function alert
  • 如何访问nestjs服务器上上传的图像

    我有一个 Nestjs 服务器 并且已经上传了图像 但是当我尝试访问这些图像时 它们是一堆无法解释为图像的东西 我还尝试将它们转换为 blob 然后将其转换为 objectURL 然后将其设置为 img 标签的 src 但这也不起作用 上传
  • Git 推送失败。错误:RPC 失败;卷曲 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60

    当我尝试将我的代码推送到bitbucket 我在终端中收到此错误 LibreSSL SSL read SSL ERROR SYSCALL errno 60 stopped the pause stream Closing connectio
  • 属性更改时不调用按钮命令 CanExecute

    我有一个带有文本框和按钮的表单 当该文本框的值更改时 按钮命令不会调用其命令的 CanExecute 方法 命令参数已设置但似乎没有更改 加载窗口后 该按钮保持禁用状态
  • ie8 respond.js 'undefined' 为 null 或不是对象

    我在用着响应 js https github com scottjehl Respond 该库 1 并且我收到该对象的以下函数的错误 translate function styles href media here I got undef
  • 如何防止调用 System.exit() 终止 JVM?

    我几乎可以肯定这是不可能的 但值得一试 我正在为某个工具编写命令行界面 我说的是一个调用另一个 Java 应用程序的 Java 应用程序 该工具调用System exit执行后 这又终止了我自己的执行环境 我不想要这样 有什么办法可以忽略S
  • 使用 jquery 和 ajax 发送授权标头

    我在 stackoverflow 上查看了以下问题 但我想做的事情却没有运气 Ajax 授权请求标头一次又一次失败 https stackoverflow com questions 9820170 ajax authorization r
  • grails spring security core - 为隐藏的脚手架操作添加安全性

    人们可以使用注释 例如 Secured ROLE ADMIN 在一个操作或整个类上 似乎工作正常 应用 spring security core 提供的安全控制 有没有办法将安全性应用于隐藏的脚手架操作 而不将安全约束应用于整个类 我想对某
  • 如何缓存离线模式下的网页内容?

    我正在开发一个应用程序的一部分 其中应用程序应该从在线存储 网站 仅为此目的而构建 读取产品图像和价格 对产品图像和价格进行本地存储 以便它可以离线时显示产品图片和价格 会有一个按钮 一旦按下 它的工作就是同步本地缓存 我怎样才能实现这个
  • 消除成员函数中的幻数的最佳实践

    我有一种重复使用幻数的方法 但仅在一种方法中使用 class Foo def Bar str year str 0 1 to i 2000 month str 2 ord 48 day str 3 ord 48 hour str 4 ord
  • Office Communicator 状态如何工作?

    我有兴趣了解更多有关微软办公通讯器 http office microsoft com en us communicator default aspxIM 客户端 以及它如何确定您的存在 即您是否在计算机旁或不在计算机旁 任何人都可以向我指
  • 如何允许Tomcat WAR应用程序写入文件夹

    我想要我的网络应用程序作为战争部署ROOT war具有写入权限 var www html static images这样它就可以将上传和转换的图像写入该文件夹 以便 nginx 可以静态地为其提供服务 目前它不起作用并触发java nio
  • 易失性无符号整型 * const

    下面这行代码的目的是什么const关键词 volatile unsigned int const UART0DR unsigned int 0x10009000 我明白了volatile unsigned int 有点 但为什么是const
  • 如何在ag-grid中预设列过滤器

    我有一个Ionic Angular应用程序使用ag grid 我希望某些网格在加载网格时自动应用过滤器 用户无需执行任何操作 我尝试了以下方法 onGridReady params params api sizeColumnsToFit g
  • JavaScript 中的 IIFE 调用

    我见过两种使用 IIFE 的方法 我知道还有更多 function console log this call this function console log this 有什么理由使用 call this 在第一个上 惯于 在函数内产生
  • 可能的错误? xlwings 无法运行 Excel 宏? [复制]

    这个问题在这里已经有答案了 我在让 xlwings 从 Python 运行宏时遇到问题 尽管遵循 xlwings 文档中的代码 但我无法让 xlwings 执行 Excel 宏 例如 在名为 Book xlsm 的 Excel 工作簿中 i
  • 如何使用 z3py 进行增量求解

    我正在使用 Z3 求解器的 python API 来搜索优化的时间表 它工作得很好 除了有时即使对于小图也非常慢 但有时非常快 原因可能是我的调度问题的约束相当复杂 我试图加快速度 并偶然发现了一些关于增量解决方案的文章 据我了解 您可以使