SMT求解器dReal4安装指南

dReal4安装指南

dreal4是一款SMT求解器,作为一种自动推理工具,它专注于解决可以编码为实数上的一阶逻辑公式的问题。它的特殊优势在于处理涉及广泛非线性实函数的问题。dReal实现了δ-完整决策过程的框架。

dReal在输入公式上返回“unsat”或“δ-sat”,其中δ是用户指定的数值误差范围。当答案为“不满意”时,dReal保证公式是不可满足的。当答案为“δ-sat”时,它返回一组解,这些解都满足输入公式的δ-扰动形式。

dReal从各种工具中受益匪浅,包括ibex、picosat和capd。

目前网上关于dReal的中文教程很少(笔者在安装的时候没有找到),所以笔者介绍一下如何安装及入门dReal

安装

dReal仅支持macOS和Linux系统,以下是两个系统的安装命令

macOS 12 / 11 / 10.15:

/usr/bin/curl -fsSL https://raw.githubusercontent.com/dreal/dreal4/master/setup/mac/install.sh | bash
dreal

Ubuntu 22.04 / 20.04 / 18.04:

# 22.04
sudo apt-get install curl
curl -fsSL https://raw.githubusercontent.com/dreal/dreal4/master/setup/ubuntu/22.04/install.sh | sudo bash

# 20.04
sudo apt-get install curl
curl -fsSL https://raw.githubusercontent.com/dreal/dreal4/master/setup/ubuntu/20.04/install.sh | sudo bash

# 18.04
sudo apt-get install curl
curl -fsSL https://raw.githubusercontent.com/dreal/dreal4/master/setup/ubuntu/18.04/install.sh | sudo bash

# Test the installation.
DREAL_VERSION=4.21.06.2
/opt/dreal/${DREAL_VERSION}/bin/dreal

若无法连接github,则可在gitee下载镜像后,复制dreal_4.21.06.2_amd64.deb到setup/ubuntu/ 当前版本的文件夹下,运行install.sh,并注释掉以下一行

# Install dReal
DREAL_VERSION=4.21.06.2
DREAL_DEBNAME=dreal_${DREAL_VERSION}_amd64.deb
DREAL_URL=https://github.com/dreal/dreal4/releases/download/${DREAL_VERSION}/${DREAL_DEBNAME}
DREAL_SHA256=c1798357bd967bf84b06fdaf7e962e102ff6703b3dee546fdc02862a1ecc09f1
apt-get install --no-install-recommends wget -y
# 注释下面这一行
# wget "${DREAL_URL}"
if echo "${DREAL_SHA256}  ${DREAL_DEBNAME}" | sha256sum -c; then
    dpkg --install --skip-same-version ./"${DREAL_DEBNAME}" || apt-get -f install -y
    rm "${DREAL_DEBNAME}"
else
    echo "SHA256 does not match ${DREAL_DEBNAME}:"
    echo "    expected: ${DREAL_SHA256}"
    echo "    actual  : $(sha256sum "${DREAL_DEBNAME}")"
    exit 1
fi

在python上调用dReal接口

dReal的一些功能可以通过Python3访问。要安装绑定,请运行以下命令:

pip3 install dreal

注意,您仍然需要在系统中安装dReal必备组件,如IBEX和CLP。请进行以下操作。

安装先决条件

macOS 12 / 11 / 10.15:

git clone https://github.com/dreal/dreal4 && cd dreal4
./setup/mac/install_prereqs.sh

Ubuntu 22.04 / 20.04 / 18.04

git clone https://github.com/dreal/dreal4 && cd dreal4
sudo ./setup/ubuntu/`lsb_release -r -s`/install_prereqs.sh

install_prereqs.sh 安装以下安装包: bazel, bison, coinor-clp, flex, gmp, ibex, nlopt, python.

如果之前已经git clone了dReal4到本地,那么直接在dreal4主文件夹下执行以下命令即可

sudo ./setup/ubuntu/`lsb_release -r -s`/install_prereqs.sh

编译和测试

在dreal4主文件夹执行以下命令

bazel build //...
bazel test //...                     # Run all tests
# 以下命令似乎不影响python接口的调用
./bazel-bin/dreal/dreal <smt2_file>  # Run .smt2 file 

默认情况下,它构建发布版本。要生成调试生成,请运行 bazel build //... -c dbg.

在macOS操作系统中,通过 --apple_generate_dsym允许lldb/gdb显示符号。

Bazel使用系统默认编译器。要使用特定的编译器,请设置 CC 环境变量。例如,CC=gcc-7 bazel build//…

在CI中,我们测试dReal是否可以使用以下编译器构建:

Python运行测试

要测试Python接口,请在终端中运行python3并键入以下内容:

from dreal import *

x = Variable("x")
y = Variable("y")
z = Variable("z")

f_sat = And(0 <= x, x <= 10,
            0 <= y, y <= 10,
            0 <= z, z <= 10,
            sin(x) + cos(y) == z)

result = CheckSatisfiability(f_sat, 0.001)
print(result)

最后一个print语句应给出:

x : [1.247234518484574339, 1.247580203674002686]
y : [8.929064928123818135, 8.929756298502674383]
z : [0.06815055407334302817, 0.06858905276351445757]

更多例子在 dreal4/dreal/test/python.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值