关于 Z3 for Java 的性能问题

2023-12-25

我在当前使用 Z3 for Java 的项目中遇到了一些性能问题: 基本上我当前的大多数限制都非常简单: 例如:(f(x) = 2 && f(y) <= 3) || f(x) <=5

  1. 我正在使用整个项目共享的静态上下文和解算器实例:

    public class ConstraintManager {
        static Context ctx;
        static Solver solver;
        ...
    }
    

如果我通过同一个 ctx 实例生成 expr 数十亿次,这会出现问题吗?什么时候是调用的最佳时间ctx.Dispose(),或者,管理 ctx 的最佳方式是什么?

  1. 我调用了expr.Simplify()简化一些约束,例如:f(x)=3 && f(x)<=2。 但这个 API 结果非常慢。特别是约束长度增加。这是一个已知问题还是因为我使用不当?

  2. 我在用expr.substitute(expr1, expr2),但我注意到 z3 在替换后会将 expr 转换为 let 绑定形式。这是为了让公式更紧凑吗?


  1. Simplify 执行简单的代数简化。在某些情况下您可以控制其行为。例如,* 分布在 + 上,但这可能会导致真正的开销,并且可以关闭这种简化。从命令行使用 z3 -pm:simplify 来检查参数。 (另一方面,Z3 不太可能解决这种简化成本太高的公式)。
  2. “let-bounds”由打印机提供。在内部,术语表示为共享节点的有向无环图。将 DAG 打印为树可能非常昂贵(在最坏的情况下是指数级的)。因此,当打印机确定这会给出较短的打印长度时,它会引入 let 表达式。

.NET 和 Java API 使用垃圾收集器来管理术语的生命周期。它们由 GC 自行决定回收。为了获得最佳性能,您可以自行管理引用计数,但随后您必须绕过支持的 API。已发布的源代码包含与执行此操作相关的 JNI/pinvoke。请注意,滚动您自己的低级 API 需要大量工作,而且低级引用计数也不像受支持的 API 那样易于编程。

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

关于 Z3 for Java 的性能问题 的相关文章

随机推荐

  • SQL Server批量导入UTF-8数据格式文件

    我一直在参考以下页面 http msdn microsoft com en us library ms178129 aspx http msdn microsoft com en us library ms178129 aspx 我只是想从
  • Pyautogui 和 pyscreeze 崩溃,windll.user32.ReleaseDC 失败

    我正在尝试比较 pyautogui 脚本中的某些像素值 但在多次成功运行后 或者有时直接在第一次调用时 它会崩溃并显示以下错误消息 Traceback most recent call last File F Koodit Python H
  • 计划将 solr 6.x 升级到 8.x。请提供升级步骤?

    需要迁移所有索引或升级索引 是否可以直接 6 x 到 8 x 或者 6 x 到 7 x 然后 7 x 到 8 x 请帮助我完成这件事 您应该开始阅读提供给的完整文档从 7 x 之前的版本升级到 Solr 8 x https lucene a
  • 在 CSS/HTML 中为不同的屏幕尺寸设置自动高度和宽度

    I have 2 issues有了这个布局 feature content 灰色背景 使其高度和宽度适应不同的屏幕尺寸 现在 在大屏幕上 feature content离页脚很远 无论屏幕尺寸如何 我都想删除一个水平滚动条 我想要 adap
  • 如何在系统级别将目录添加到 Perl 库路径?

    在标准 Linux 设置中 我可以在哪里添加目录 INC多变的 In the etc profile文件中 我添加了 export PERLLIB PERLLIB foo bar export PERL5LIB PERL5LIB foo b
  • 将盐与哈希密码一起存储的安全性如何

    如果您查看过 ASP NET 会员系统的表架构 它们会存储原始密码的哈希值以及用于生成密码的盐 请参阅下面的架构 dbo aspnet 会员资格 ApplicationId UserId Password PasswordFormat Pa
  • AngularJS 多重解析

    这是我的ui router特定路线的配置 state app merchant url start merchant views mainView templateUrl partials start merchant html css a
  • Tensorflow模型保存和加载

    如何像我们在 do keras 中所做的那样用模型图保存张量流模型 我们可以保存整个模型 权重和图表 并稍后导入 而不是在预测文件中再次定义整个图表 在喀拉斯 checkpoint ModelCheckpoint RightLane epo
  • 新手:了解 main 和 IO()

    在学习 Haskell 时 我想知道何时执行 IO 操作 我在几个地方发现了这样的描述 I O 操作的特殊之处在于 如果它们落入主函数中 就会执行它们 但在下面的示例中 greet 永远不会返回 因此不应打印任何内容 import Cont
  • 更改所有页面的文本方向

    我正在开发一个可以使用多种语言的网络项目 我已经完成了所有这些 我还有一件事 以英文显示时的页面是从左到右 我网站上的某些语言需要从右到左 请注意 我的问题是关于整个页面而不是字段中的文本 请问我该怎么做 我使用此代码来启动多种语言的线程
  • 如何在 Rails 4 中查询数组列?

    我找不到关于如何查询的好文章array columns在 Rails 中 我遇到需要查询 Rails 中的数组列 我从一篇教授如何进行基本查询的文章中找到here http blog arkency com 2014 10 how to s
  • 如何在 MySQL 中调度存储过程

    我有这个存储过程 例如 我如何以 5 秒的间隔运行它 就像删除时间戳超过一天的数据的例程一样 DROP PROCEDURE IF EXISTS delete rows links GO CREATE PROCEDURE delete row
  • 如何用零替换交叉表查询中的空值?

    基于 Access 中的以下 SQL TRANSFORM Sum Shape Length 5280 AS MILES SELECT ONSHORE AS Type Sum qry CurYrTrans Miles AS Total Of
  • Android 的 SceneKit 等效项是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我创建了一个ARKit https developer apple com augmented rea
  • 有没有办法在 R Markdown 中的嵌入式 LaTeX 方程中使用 r 代码的结果

    有没有类似的命令 Sexpr可以在 R Markdown 文档中的嵌入式 LaTeX 方程中使用吗 我想用这样的东西形成一个简单的线性回归方程 hat Y Sexpr coef model 1 Sexpr coef model 2 cdot
  • 从android中的SeekBar获取值

    我如何从 a 获取值SeekBar 我有一个具有三个 SeekBar 的类的代码 PRICEbar 我想将这些 SeekBars 的值传递给下一个 Activity 屏幕 作为意图 我知道如何实现 OnClickListener 但如何提取
  • Django:DetailView从外键获取对象

    我的模型事件有一个基于类的 DetailView 并且想要显示通过外键相关的类别条目 模型 py class Event models Model name models CharField max length 50 def get ab
  • Subversion 中的 Mercurial:移动、重命名和标签

    我有一个具有以下布局的 subversion 存储库 svnrepo projectA trunk svnrepo projectA tags svnrepo projectA branches svnrepo projectB trunk
  • 如果显式使用同一模块中的类型,则 Prism 框架不会加载模块

    我们有一个使用 prism 5 框架的 WPF 应用程序 使用 DirectoryModuleCatalog 加载模块 同时 如果我引用引导程序所在的启动项目中的模块之一并使用其中的类型 则该模块将被跳过加载 看起来 prism 框架正在跳
  • 关于 Z3 for Java 的性能问题

    我在当前使用 Z3 for Java 的项目中遇到了一些性能问题 基本上我当前的大多数限制都非常简单 例如 f x 2 f y lt 3 f x lt 5 我正在使用整个项目共享的静态上下文和解算器实例 public class Const