概要
SMTPlan+は,自動計画(Automated planning)の分野でPDDL(Planning Domain Definition Language)で記述された問題を解くソルバーの一つです.Githubでソースコードが公開されていますが最新の環境ではビルドできません.
issueにビルドできた環境の書き込みがあったため,それを参考にすることで私の環境でもビルドすることができました.
必要な環境を構築するための説明が結構散らばっていたので,この記事では具体的なコマンドについて備忘録を兼ねて投稿したいと思います.
SMTPlan+とは
SMTPlan+は,ロンドン大学キングス・カレッジのPlanningグループが開発したPDDLソルバーです.
SMTPlan+は,いくつかに分かれるPDDLのバージョンのうちPDDL+に対応しており,ひとつ前のバージョンであるPDDL2.1に対して,
- Nonlinear change
- Processes
- Events
- Timed Initial Literals
- Epsilon separation
- Cascading events
といったより複雑な内容をもつ問題を解くことが可能です.
詳細なアルゴリズムについては,プロジェクトサイトと論文が参考になります.
SMTPlan+のビルド
それでは実際にビルドしていきたいと思います.
参考にしたもの
SMTPlan+は最終更新日が2019年であるためか,最新のビルド環境や依存ライブラリでは素直にビルドできません.
Githubページのissueの最終投稿にビルドできた例があるので,この情報を参考にビルドしていきたいと思います.
gccやCMakeのダウングレードが必要なため,私は仮想環境を用意しビルドを行いました.
Dockerの準備
私は公式のgccのイメージをベースにしていくことにしました.gccはバージョン7.4.0である必要があります.
docker pull gcc:7.4.0
docker run -it gcc:7.4.0
その他準備
CMakeLists.txtの書き換えが必要なので,なにかしらのエディタをインストールします.
sudo apt update
sudo apt install nano
CMake
CMakeはバージョン3.10.2である必要があります.
wget -O cmake-3.10.2.tar.gz https://cmake.org/files/v3.10/cmake-3.10.2.tar.gz
tar xzvf cmake-3.10.2.tar.gz
cd cmake-3.10.2
./bootstrap && make && make install
Boost
Boostはバージョン1.56.0である必要があります.
git clone https://github.com/boostorg/boost.git
cd boost
git checkout refs/tags/boost-1.56.0
git submodule update --init --recursive
sudo apt install python-dev
./bootstrap.sh --prefix=/usr/
./b2
sudo ./b2 install
piranha
piranhaはバージョン0.10である必要があります.
wget -O piranha-0.10.tar.gz https://github.com/bluescarni/piranha/archive/refs/tags/v0.10.tar.gz
tar xzvf piranha-0.10.tar.gz
cd piranha-0.10
sudo apt install libmpfr-dev
mkdir build
cd build
cmake ../
sudo make install
mp++
mp++はバージョン0.9である必要があります.
wget -O mppp-0.9.tar.gz https://github.com/bluescarni/mppp/archive/refs/tags/v0.9.tar.gz
tar xzvf mppp-0.9.tar.gz
cd mppp-0.9
mkdir build
cd build
cmake ../
sudo make install
z3
wget -O z3.tar.gz https://github.com/Z3Prover/z3/archive/refs/heads/master.tar.gz
tar xzvf z3.tar.gz
cd z3-master
python scripts/mk_make.py
cd build
make
sudo make install
SMTPlan
いよいよ本体です!
wget -O SMTPlan.tar.gz https://github.com/KCL-Planning/SMTPlan/archive/refs/heads/master.tar.gz
tar xzvf SMTPlan.tar.gz
cd SMTPlan-master/SMTPlan
sudo apt install flex
CMakelists.txtの書き換えを行います.12行目の
set(CMAKE_CXX_FLAGS "-std=c++0x")
を以下に書き換えます.
set(CMAKE_CXX_FLAGS "-std=c++0x -pthread")
続いてビルドを行っていきます.
mkdir build
cd build
cmake ..
make -j4
事後処理
出来た実行ファイルをパスが通っているところに置いておきたかったのでコピーしました.
cp SMTPlan-master/SMTPlan/build/SMTPlan /usr/local/bin/
動作確認
TBD