如何使用 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::optimize unsat_core

    如何正确追踪z3 optimize未饱和核心 Z3 C z3 optimize当我添加时没有找到预期的解决方案不饱和核心跟踪 基于这些examples https github com Z3Prover z3 blob 9df6c10ad8
  • 使用函数在 z3 中创建列表

    我试图将这段伪代码转换为 SMT LIB 语言 但我卡住了 List function my fun int x list nil for i in 1 to x if some condition on i list concat i r
  • 在 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
  • 使用 Z3_solver_get_unsat_core 获取 unsat 核心

    假设这是非线性实数算术的约束集 例如 pred1 gt v2 x v0 x v1 y v0 y v2 y v0 y v1 x v0 x 0 pred2 gt v1 x v0 x v2 y v0 y v1 y v0 y v2 x v0 x 0
  • 有人尝试过用Z3本身来证明Z3吗?

    有没有人尝试证明Z3 http research microsoft com en us um redmond projects z3 与Z3本身 是否有可能使用 Z3 来证明 Z3 是正确的 更理论化的是 是否有可能使用 X 本身来证明工
  • 如何从 Z3 中的 Seq 类型中提取元素作为基本类型?

    如何将序列中的元素提取到基本类型 以便以下内容正常工作 define sort ISeq Seq Int define const x ISeq seq unit 5 define const y ISeq seq unit 6 asser
  • 在 Z3 中证明归纳事实

    我试图在 Microsoft 的 SMT 求解器 Z3 中证明一个归纳事实 我知道 Z3 一般不提供此功能 如Z3 guide http rise4fun com z3 tutorial guide 第 8 节 数据类型 但是当我们限制要证
  • Z3 求解器中 MAxSMT 和用户定义成本函数的组合

    我正在使用 Z3 来优化带有一些软约束 带有加权 MaxSMT 的成本函数 我很好奇 MaxSMT 和用户定义的成本函数如何交互 求解器是否最小化 MaxSMT 成本和目标函数两者 是否有优先级机制 我找不到这方面的任何文档 如果我遗漏了什
  • SMT中量化算术推理的局限性是什么?

    我在以下看似微不足道的基准测试中尝试了几种 SMT 求解器 CVC3 CVC4 和 Z3 set logic LIA set info smt lib version 2 0 assert forall x Int forall y Int
  • Z3 SMT 求解器中的常数相等

    我正在使用 Microsoft 的 Z3 SMT 求解器 并且我正在尝试定义自定义类型的常量 默认情况下 这些常量似乎并不不平等 假设您有以下程序 declare sort S 0 declare const x S declare con
  • 为什么 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整数
  • 通过 C/C++ API 对 Z3 中的 LIA 进行量词消除

    我想使用 Z3 通过 C C API 消除线性整数算术公式中的量词 考虑一个简单的例子 Exists x x 0 我尝试这样做 context ctx ctx set ELIM QUANTIFIERS true expr x ctx int
  • Z3 python对待x**2与x*x不同?

    看来Z3 Python接口不喜欢 运算符 它可以处理x x但不能处理x 2 如下例所示 gt gt gt x y x y Reals x y gt gt gt z3 prove Implies x 6 0 x 2 36 0 failed t
  • 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 来搜索优化的时间表 它工作得很好 除了有时即使对于小图也非常慢 但有时非常快 原因可能是我的调度问题的约束相当复杂 我试图加快速度 并偶然发现了一些关于增量解决方案的文章 据我了解 您可以使