将棋エンジンAperyをCentOS7.1でビルドする手順を記載します。
(本記事の続編として、将棋所(GUIソフト)の動作環境(Mono)をインストールし、Aperyを登録して対局する手順を公開予定です。)
⇒続編書きました
CentOS7.1で将棋GUIソフト「将棋所」を動作させる
公式ドキュメント
http://hiraokatakuya.github.io/apery/ に各種ドキュメントが公開されています。
コンパイラのバージョン確認
g++ 4.8が必要です。
[loft@hoge ~]$ g++ --version g++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [loft@hoge ~]$
g++が入っていない、もしくはバージョンが4.8未満の場合はインストールして下さい。
CentOS6.7にg++4.8をインストールする手順を、以下記事に記載しています。
CentOS6.7にgcc、g++ 4.8をインストールする
ソースコードの入手
githubから入手します。
[loft@hoge ~]$ cd /home/loft/apery/git/ [loft@hoge git]$ git clone https://github.com/HiraokaTakuya/apery.git [loft@hoge git]$ cd ./apery/ [loft@hoge apery]$ ls -al total 64 drwxrwxr-x. 7 loft loft 4096 Nov 9 21:34 . drwxrwxr-x. 3 loft loft 18 Nov 9 21:32 .. drwxrwxr-x. 2 loft loft 49 Nov 9 21:36 bin -rw-rw-r--. 1 loft loft 35147 Nov 9 21:33 Copying.txt drwxrwxr-x. 8 loft loft 4096 Nov 9 21:33 .git -rw-rw-r--. 1 loft loft 87 Nov 9 21:33 .gitmodules drwxrwxr-x. 2 loft loft 4096 Nov 9 21:35 obj -rw-rw-r--. 1 loft loft 5454 Nov 9 21:33 Readme.txt drwxrwxr-x. 2 loft loft 4096 Nov 9 21:35 src drwxrwxr-x. 6 loft loft 72 Nov 9 21:33 utils [loft@hoge apery]$
なお、今回ビルドしたバージョンは以下よりハッシュ値685720d3204527ae3848b206310663bde64745c6です。
[loft@hoge apery]$ git log commit 685720d3204527ae3848b206310663bde64745c6 Author: HiraokaTakuya <hiraoka64@gmail.com> Date: Sat Aug 29 11:34:08 2015 +0900 △7八角対策 commit 9da6354be5e580a03b8d8c55095ff8ee6eab2314 Author: HiraokaTakuya <hiraoka64@gmail.com> Date: Tue Aug 11 00:46:08 2015 +0900 searchmoves 対応 commit 18090bd93cec284f37b27e6ccd1d314692647079 Author: HiraokaTakuya <hiraoka64@gmail.com> Date: Tue Aug 11 00:09:49 2015 +0900 比較順序変更による高速化
ビルド
srcディレクトリに移動しmakeコマンドでビルドします。
[loft@hoge apery]$ cd ./src/ [loft@hoge src]$ make g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/main.o -c main.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/bitboard.o -c bitboard.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/init.o -c init.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/mt64bit.o -c mt64bit.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/position.o -c position.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/evalList.o -c evalList.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/move.o -c move.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/movePicker.o -c movePicker.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/square.o -c square.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/usi.o -c usi.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/generateMoves.o -c generateMoves.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/evaluate.o -c evaluate.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/search.o -c search.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/hand.o -c hand.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/tt.o -c tt.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/timeManager.o -c timeManager.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/book.o -c book.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/benchmark.o -c benchmark.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/thread.o -c thread.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/common.o -c common.cpp g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -o ../obj/pieceScore.o -c pieceScore.cpp g++ -o apery ../obj/main.o ../obj/bitboard.o ../obj/init.o ../obj/mt64bit.o ../obj/position.o ../obj/evalList.o ../obj/move.o ../obj/movePicker.o ../obj/square.o ../obj/usi.o ../obj/generateMoves.o ../obj/evaluate.o ../obj/search.o ../obj/hand.o ../obj/tt.o ../obj/timeManager.o ../obj/book.o ../obj/benchmark.o ../obj/thread.o ../obj/common.o ../obj/pieceScore.o -lpthread -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp [loft@hoge src]$
make完了後、実行ファイル(apery)が生成されたことを確認します。
[loft@hoge src]$ ls -al total 984 drwxrwxr-x. 2 loft loft 4096 Nov 9 21:35 . drwxrwxr-x. 7 loft loft 4096 Nov 9 21:34 .. -rwxrwxr-x. 1 loft loft 463585 Nov 9 21:35 apery ( : 略 )
AperyをCentOS7.1でビルドする手順は以上です。
続いて、動作確認手順を記載します。
*_synthesized.binの準備
実行ファイルは/apery/bin/配下にコピーしておきます。
[loft@hoge src]$ cp ./apery ../bin/
Readme.txtに記載されているように、bin/配下に*_synthesized.binがない場合、
エンジンの起動に時間がかかります。
以下のようにエンジンを起動後、”info string start setting eval table”と表示される場合は、
エンジン起動からUSIプロトコルの通信ができるようになるまで数分かかる状態です。
この状態のまま将棋所にエンジンとして登録しようとするとエンジンとの通信ができないため失敗します。
(「これは USI エンジンではありません。」とダイアログが出る)。
エンジン起動後すぐにUSIプロトコルの通信ができるよう、予め*_synthesized.binを準備しておく必要があります。
[loft@hoge apery]$ cd /home/loft/apery/git/apery/bin/ [loft@hoge bin]$ ./apery info string start setting eval table (数分かかる) info string end setting eval table (ここまで処理が進むとUSIプロトコル文字列の入出力が可能となる。 上記処理をスキップさせるために*_synthesized.binの準備が必要。)
*_synthesized.binの準備方法はいくつかありそうです。
(より適切な方法がありましたら是非コメント欄にてご指摘宜しくお願い致します。)
方法1 WCSC25 versionのzipに入っているファイルを使う
http://hiraokatakuya.github.io/apery/から、WCSC25 version (for Windows 64bit)のzipファイル(apery_wcsc25.zip)をダウンロードし、任意のディレクトリに格納、解凍します。
[loft@hoge bin]$ cd /home/loft/apery/ [loft@hoge apery]$ unzip apery_wcsc25.zip
apery_wcsc25.zipを解凍したディレクトリのbin/配下に20150501というフォルダがありますので、
今回ソースコードからビルドした実行ファイル(bin/apery)のあるbin/配下にコピーします。
[loft@hoge apery]$ cp ./apery_wcsc25/bin/20150501/ ./git/apery/bin/ -rfp [loft@hoge apery]$ cd .git/apery/bin/ [loft@hoge bin]$ ls -al total 464 drwxrwxr-x. 3 loft loft 64 Nov 9 23:51 . drwxrwxr-x. 7 loft loft 4096 Nov 9 21:34 .. drwxrwxr-x. 2 loft loft 83 May 6 2015 20150501 -rwxrwxr-x. 1 loft loft 463585 Nov 9 23:05 apery [loft@hoge bin]$
20150501というディレクトリ名は、*_synthesized.bin格納ディレクトリ名のデフォルト値として定義されているようです。
この状態でエンジンを起動します。
今度はすぐにUSIプロトコルの入出力が可能な状態になっていますので、
以下のようにusiと入力すると、エンジンがusiokと出力します。
[loft@hoge apery]$ cd /home/loft/apery/git/apery/bin/ [loft@hoge bin]$ ./apery usi id name Apery Debug Build id author Hiraoka Takuya option name Best_Book_Move type check default false option name Book_File type string default book/20150503/book.bin option name Byoyomi_Margin type spin default 500 min 0 max 2147483647 option name Clear_Hash type button option name Emergency_Base_Time type spin default 200 min 0 max 30000 option name Emergency_Move_Horizon type spin default 40 min 0 max 50 option name Emergency_Move_Time type spin default 70 min 0 max 5000 option name Eval_Dir type string default 20150501 option name Max_Book_Ply type spin default 32767 min 0 max 32767 option name Max_Random_Score_Diff type spin default 0 min 0 max 32600 option name Max_Random_Score_Diff_Ply type spin default 40 min 0 max 32767 option name Max_Threads_per_Split_Point type spin default 5 min 4 max 8 option name Min_Book_Ply type spin default 32767 min 0 max 32767 option name Min_Book_Score type spin default -180 min -32601 max 32601 option name Minimum_Thinking_Time type spin default 1500 min 0 max 2147483647 option name MultiPV type spin default 1 min 1 max 594 option name OwnBook type check default true option name Skill_Level type spin default 20 min 0 max 20 option name Slow_Mover type spin default 100 min 10 max 1000 option name Threads type spin default 1 min 1 max 64 option name Use_Sleeping_Threads type check default false option name USI_Hash type spin default 32 min 1 max 65536 option name USI_Ponder type check default true option name Write_Synthesized_Eval type check default false usiok
この状態ならばエンジン起動後すぐにUSIプロトコルの入出力ができていますので、
将棋所にエンジンとして登録することができます。
方法2 WCSC25 versionのzipに入っているスクリプトを使う
こちらは当ブログ管理人は未確認の方法です。
apery_wcsc25.zipを解凍したディレクトリのbin/配下にmake_synthesized_eval.shというスクリプトがあり、
今回ソースコードからビルドした実行ファイル(bin/apery)のあるbin/配下にコピーします。
chmod +xで実行権を付与し、実行すると、恐らく*_synthesized.binファイルが生成されるものと思われます。
将棋所を使用した対局や棋譜解析
対局や棋譜解析を行うには、将棋所のようなUSIプロトコルに対応したGUIソフトに
今回ビルドした実行ファイル(bin/apery)をエンジンとして登録する必要があります。
また、将棋所をCentOSで動作させるためにMonoのインストールも必要です。
次回の記事に手順を記載します。
⇒続編書きました
CentOS7.1で将棋GUIソフト「将棋所」を動作させる