Z3是否支持优化问题

2023-12-02

我在去年八月份的一篇文章中看到Z3不支持优化。 但它也表示,开发人员正计划添加此类支持。

我在来源中找不到任何表明发生这种情况的内容。

谁能告诉我我关于没有支持的假设是否正确,或者是否已添加但我不知何故错过了它?

谢谢, 奥马尔


如果您的优化具有整数值目标函数,则一种效果相当好的方法是运行二分搜索以获得最佳值。假设您正在解决一组约束C(x,y,z),最大化目标函数f(x,y,z).

  1. 找到任意解(x0, y0, z0) to C(x,y,z).
  2. Compute f0 = f(x0, y0, z0)。这将是您的第一个下限。
  3. 只要您不知道目标值的任何上限,就尝试解决约束C(x,y,z) ∧ f(x,y,z) > 2 * L, where L是你的最佳下限(最初,f0,那么无论你发现什么都更好)。
  4. 一旦你有了上限和下限,应用二分搜索:解决C(x,y,z) ∧ 2 * f(x,y,z) > (U - L)。如果公式可满足,您可以使用模型计算新的下限。如果还不满意的话(U - L) / 2是一个新的上限。

如果您的问题未达到最大值,则步骤 3. 将不会终止,因此如果您不确定是否可以,则可能需要对其进行限制。

你当然应该使用push and pop逐步解决一系列问题。您还需要能够提取中间步骤的模型并评估f在他们。

我们在工作中使用了这种方法Kaplan并取得合理的成功。

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

Z3是否支持优化问题 的相关文章

  • z3 实数的存在主义理论

    Z3决定非线性实数运算的存在片段吗 也就是说 我可以用它作为决策程序来测试是否 带有 和 x 的无量词公式有实数解吗 是的 Z3有一个非线性多项式实数运算的存在片段的判定过程 当然 该过程是以可用资源为模完成的 该过程相当昂贵 本文 htt
  • 如何在z3py中表示对数公式

    我对 z3py 很陌生 我正在尝试在 z3py 中编写以下对数表达式 log x y 我确实经常搜索堆栈溢出并遇到类似的问题 但不幸的是我无法得到足够满意的答案 请帮我 更一般地说 我们如何使用 Z3 定义日志 我获得任何吸引力的唯一方法是
  • 确定任意命题公式中变量的上/下界[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 给定一个任意命题公式 PHI 某些变量的线性约束 确定每个变量的 近似 上限和下限的最佳方法是什么 有些变量可能是无界的 在这种情况下 算
  • 使用布尔运算符在 Z3 中定义约束

    比方说 我想使用 Z3 约束将字符串的每个字符限制为字符集 a zA Z0 9 我可以使用布尔运算符来指定吗 举个例子 input BitVec input s i 8 for i in range 10 for i in range 10
  • 通过 Z3 C++ API 使用浮点运算

    我正在尝试使用 Z3 解决非线性实数问题 我需要 Z3 来生成多个解决方案 在问题域中 精度并不是关键问题 我只需要小数点后一位或两位小数 因此 我需要设置 Z3 不探索实数的所有搜索空间 以最大限度地减少找到多个解决方案的时间 我正在尝试
  • Z3 上下文序列化/反序列化?

    是否可以序列化 反序列化 Z3 上下文 来自 C 如果没有 这个功能有计划吗 我认为这个功能对于现实世界的应用程序很重要 当前 API 不直接支持此功能 下一版本将支持多个求解器 我们将提供用于将断言从一个求解器复制到另一个求解器并检索断言
  • 检索 Z3Py 中的值会产生意外结果

    我想找到一个表达式的最大间隔e对所有人来说都是如此x 编写这样的公式的方法应该是 Exists d ForAll x in d d e and ForAll x not in d d e 为了得到这样一个d 公式f在 Z3 中 看上面的 可
  • Z3 返回型号不可用

    如果可能的话 我想要对我的代码有第二意见 问题的约束条件是 a b c d e f是非零整数 s1 a b c and s2 d e f 是集合 The sum s1 i s2 j for i j 0 2必须是一个完美的正方形 我不明白为什
  • 如何使用 z3py 进行增量求解

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

    如何正确追踪z3 optimize未饱和核心 Z3 C z3 optimize当我添加时没有找到预期的解决方案不饱和核心跟踪 基于这些examples https github com Z3Prover z3 blob 9df6c10ad8
  • 在 Z3 中使用 SMT 约束时获取合法范围信息的(次)最佳方法

    这个问题与我之前的问题相关 在 Z3 中使用 SMT 约束时是否可以获得合法的范围信息 https stackoverflow com questions 53676016 is it possible to get a legit ran
  • 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_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
  • 在 SMTLIB v2 输入中使用 :pattern 不断获得“未知”结果

    我在 Z3 中使用 SMTLIBv2 输入格式和模式时遇到问题 通过以下输入 我不断得到 未知 结果 declare datatypes L L0 L1 declare fun path List L declare fun checkTr
  • 为什么 Z3 中的运算符“/”和“div”给出不同的结果?

    我试图用两个整数来表示一个实数 并将它们用作实数的分子和分母 我写了以下程序 declare const a Int declare const b Int declare const f Real assert f a b assert
  • 在使用和不使用推送调用的情况下对 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 求解部分 包括 纯 布尔传播和 纯 布尔冲突子句检
  • SMT中量化算术推理的局限性是什么?

    我在以下看似微不足道的基准测试中尝试了几种 SMT 求解器 CVC3 CVC4 和 Z3 set logic LIA set info smt lib version 2 0 assert forall x Int forall y Int
  • 尝试在Python中使用Z3找到布尔公式的所有解决方案

    我是 Z3 的新手 正在尝试制作一个求解器 将每个可满足的解决方案返回到布尔公式 从其他 SO 帖子中记下笔记 我已经编写了我希望能起作用的代码 但事实并非如此 问题似乎是 通过添加以前的解决方案 我删除了一些变量 但它们又在后面的解决方案
  • 通过 C/C++ API 对 Z3 中的 LIA 进行量词消除

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

随机推荐

  • Android - 模拟器处于横向模式,屏幕不旋转

    When I switch to landscape mode NUMPAD 7 or CTRL F11 the emulator rotates the screen to landscape orientation but the An
  • 如何分析 Closure Compiler 包大小

    我有一个 ClojureScript 中的应用程序 它使用 Google 的 Closure Compiler 作为编译器后端 使用高级优化得到的捆绑包似乎太大了 我责怪依赖项 但如何找出哪些模块占用输出包中最多的字节 我扫描了所有闭包编译
  • Fedora 12 上的 phpredis

    我正在尝试安装 phpredis 来使用我的 php 但问题是 每次我尝试让它工作时 我的 error log 都会发送以下错误 code PHP 致命错误 在 var www html testme php 第 5 行中找不到类 Redi
  • System V 中 x86_64 的 C 浮点值调用约定是什么?

    我目前正在深入研究汇编领域 主要是从 x86 64 C 和 System V AMD64 的角度 通常针对 Linux 通过按顺序使用以下寄存器 整数 以及隐含的指针 值的调用约定非常简单 RDI RSI RDX RCX R8 R9 XMM
  • 在 Python 中将函数传递给 re.sub

    我的字符串中某处包含一个数字 我试图用它们的文字符号替换这个数字 即 3 gt 3 我有一个函数可以做到这一点 现在的问题是找到字符串中的数字 同时保持字符串的其余部分完好无损 为此 我选择使用re sub函数 它可以接受 可调用 然而 传
  • 尝试在我的 WAR 中运行 Spring @Transactional 服务方法时出现“事务未激活”

    我正在使用 Spring 3 1 1 RELEASE Hibernate 4 1 0 Final 和 JBoss 7 1 1 Final 当我尝试运行一个已将该方法注释为 Transactional 的服务方法时 事务完成后出现以下错误 1
  • 展平非常嵌套的循环[重复]

    这个问题在这里已经有答案了 如果我有一组像这样的循环 x for a in x 0 for b in x 1 for c in x 2 Do something with a b c 有没有一种简单的方法可以简化它 特别是当它有更多级别时
  • 类变量函数

    Say this gt varname等于一个字符串 其中is callable 返回真 要调用它我必须做 temp this gt varname temp 或者 有另一种方法可以调用它而不必创建两行吗 只做的问题 temp this g
  • 当对象确实是字符串时,强制转换与将对象转换为字符串

    这并不是一个真正的问题 但我很好奇 当我将字符串保存在 DataRow 中时 它会被转换为 Object 当我想使用它时 我必须将它转换为ToString 据我所知有几种方法可以做到这一点 第一种是 string name string D
  • 如果类是在带有元注释的组件之后定义的,则该类不可注入

    我刚刚开始 Angular2 快速启动项目 让一个简单的应用程序运行起来 我添加了DataService类 这样代码就会有关注点分离 最初我添加了DataService类在我的应用程序主要组件之后编写 即MyAppComponent像下面这
  • Android开发-getMenuInflater(R.menu.main, menu)

    我正在学习 android 并遵循简单的相机应用程序教程 我复制了一段代码 但出现错误 我不知道为什么 我正在使用的教程是 http iwearshorts com blog android development 102 代码片段是 Ov
  • Windows Phone 7 用户扩展属性

    被引导到这里后 http msdn microsoft com en us library microsoft phone info userextendedproperties getvalue 28v VS 92 29 aspx 我在侧
  • Azure Active Directory 发布注销 URL

    我希望在用户注销 Azure AD Office 365 时将他们重定向到我的应用程序网页 虽然根据来自的文档https greeneyeits com p 520 我们可以在那里编辑注销后链接 URL 并在用户注销 Azure AD Of
  • 如何在PowerShell中使用Windows API AuditEnumerateCategories函数?

    我想得到当前的高级安全审核策略使用 PowerShell 我可以用auditpol exe 但其输出因操作系统语言而异 这使得解析变得困难 The settings存储在 REG NONE 值中HKEY Local Machine Secu
  • 用于计算某些值在多行中出现的次数的 SQL 查询

    假设我有一个选举数据表 将其称为 选举 每次选举每个选民一行 如下所示 VoterID ElectionID A 1 A 2 B 1 C 2 D 3 E 1 E 2 我想知道在选举 1 和选举 2 中都投票的选民人数 我不关心其他人 该数字
  • 如何将 Laravel 变量传递到我的 AngularJS 视图中?

    我正在构建一个小型照片应用程序来学习 AngularJS 1 3 我有 PHP 背景 所以从概念上来说这对我来说是相当不同的 我想将一个变量 我的照片文件夹的 URL 传递到我的 AngularJS 视图 一个 html 文件 中 我怎样才
  • 更新站点时 git hook 出现问题

    我在服务器上建立了一个网站并使用git来维护它 为此 我创建了两个 git 存储库 其中一个位于 HOME site我推向一个非裸的 var www每次进行更改时都应该从裸存储库中提取 为了自动更新非裸存储库 我创建了一个并授予执行权限po
  • android 在 ndk/JNI 的 cc/c++ 中获取 IMEI

    我会尝试得到imei使用 C C 使用 ndk 获取设备的数据并使用 JNI 检索结果 const char res exec get out service call iphonesubinfo 3 在 shell 中工作 但在我的应用程
  • 如何进行git克隆并进入创建的目录

    How to git clone一个项目 然后cd一次进入新创建的目录 git clone http xxx optional folder name cd
  • Z3是否支持优化问题

    我在去年八月份的一篇文章中看到Z3不支持优化 但它也表示 开发人员正计划添加此类支持 我在来源中找不到任何表明发生这种情况的内容 谁能告诉我我关于没有支持的假设是否正确 或者是否已添加但我不知何故错过了它 谢谢 奥马尔 如果您的优化具有整数