SMT 语法中的矩形拟合(Z3 求解器)

Posted

技术标签:

【中文标题】SMT 语法中的矩形拟合(Z3 求解器)【英文标题】:Rectangle fitting in SMT syntax (Z3 solver) 【发布时间】:2022-01-11 04:29:37 【问题描述】:

我尝试将 N 个不同大小的矩形块放入一个网格中,通过公式化 作为 CSP 问题。 块不应相互重叠,它们可以接触到边缘,并且可以有 空的地方。 例如,将 4 个 2x2 大小的矩形块放入 8x8 网格中。 (改变块的数量、块的大小和网格的大小。)我知道公式为

我尝试编写程序或脚本来生成公式,但我很困惑,我无法用 SMT 语法编写。如果有人帮助我,我会感激不尽。谢谢。

【问题讨论】:

解决你的(作业?)问题:选择你的决策变量;定义每个变量的类型和值范围;定义约束;将您的模型翻译成SMT2 语法;运行 Z3。如果您在路上遇到困难,请发布一个具体问题。 您可能会从我为related question 发布的MinizInc model 中受益。 【参考方案1】:

您应该具体说明您尝试了什么,什么没有奏效。如果您的问题与语法有关,那么这里有一些帮助您入门的方法:

(set-option :produce-models true)

(declare-fun xi () Int)
(declare-fun wi () Int)
(declare-fun xj () Int)
(declare-fun wj () Int)

(assert (or (<= (+ xi wi) xj)
            (<= (+ xj wj) xi)))

上面对公式中的前两个析取进行了编码。您可以根据需要添加其他变量并断言所有其他条件。

【讨论】:

以上是关于SMT 语法中的矩形拟合(Z3 求解器)的主要内容,如果未能解决你的问题,请参考以下文章

Gecode branch()函数的z3替代方案?

angr 文档翻译(3):解析器引擎——符号表达式和约束求解

使用 Z3/SMT-LIB2 定义集合理论

使用 Z3 SMT 解决谓词演算问题

用于 SMT 中的所有用途

SMT 求解器的局限性