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是否可以使用以下编译器构建:
- Ubuntu: clang-10, clang-11, clang-12, clang-13, clang-14, gcc-9, gcc-10, gcc-11, gcc-12
- macOS: Apple clang
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.