Macでelmoを使ってみた

Macへelmoの導入が成功したので備忘録として残しておく。
基本的にはネット上の情報を頼りに作業は進めました。

また手探りで進めて細かい検証をしていないため、もしかしたらやらなくてもいい手順が入っているかもしれません。
その辺はコメントなどで指摘いただければと思います。

コンピューター将棋を動かすためには以下の三つが必要らしいです。

- 評価関数
- 定跡
- 思考エンジン

このうち、前の二つが`elmo`として公開されており、最後のが`やねうら王2017 Early`として公開され、elmoの思考エンジンとして利用されているようです。

# 環境
- OS: macOS Sierra
- Homebrew インストール済み
- Xcodeコマンドラインツール インストール済み

# 事前準備
やねうら王をMacでビルドするために、デフォルトの`clang`ではなく`gcc`を利用します。
なぜ`clang`のままではダメだったかというと、`fatal error: 'cstdint' file not found`が解決できなかったため。
（`clang`のまま通す方法もありそうだけど……）
というわけで、以下の手順を進め`gcc`を利用できるようにします。

[OS X El Capitanにgccを入れてシンボリックリンクを作成][link-gcc]のサイトを参考に、Homebrewを利用して`gcc`をインストールし、さらに`gcc`コマンドと`g++`コマンドを利用できるようにしておきます。

```shell-session
$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/7.1.0/libexec/gcc/x86_64-apple-darwin16.7.0/7.1.0/lto-wrapper
Target: x86_64-apple-darwin16.7.0
Configured with: ../configure --build=x86_64-apple-darwin16.7.0 --prefix=/usr/local/Cellar/gcc/7.1.0 --libdir=/usr/local/Cellar/gcc/7.1.0/lib/gcc/7 --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-7 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl --with-system-zlib --enable-checking=release --with-pkgversion='Homebrew GCC 7.1.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --disable-nls --with-native-system-header-dir=/usr/include --with-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk
Thread model: posix
gcc version 7.1.0 (Homebrew GCC 7.1.0) 
```

# 導入手順

## やねうら王ダウンロード
落とし方は任意ですが、今回は`git`で。
場所も任意で問題ないはず。

```shell-session
$ git clone https://github.com/yaneurao/YaneuraOu.git
```

## コンパイラの変更
エディタを使ってMakefile内のコンパイラを指定している箇所を`clang++`から`g++`に変更。

```diff
$ git diff
diff --git a/source/Makefile b/source/Makefile
index 28b596b..421a13e 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -6,8 +6,8 @@ YANEURAOU_EDITION = YANEURAOU_2017_EARLY_ENGINE
 
 
 # clangでコンパイルしたほうがgccより数%速いっぽい。
-# COMPILER = g++
-COMPILER = clang++
+COMPILER = g++
+# COMPILER = clang++
 
 # 標準的なコンパイルオプション
 CFLAGS   = -std=c++14 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fpermissive
```

## ビルド
ここからは[elmoをやねうら王で使用する方法](link-elmo)のサイトを参考に進めていけば問題ないはずです。

makeの指定は使用しているPC（実際にはCPU）に合わせて指定するようですね。

```shell-session
$ cd source/
$ make avx2
```

ビルドが成功したら動作確認。

```shell-session
$ ./YaneuraOu-by-gcc
usi
```

動作確認できたらexeディレクトリに実行に必要なファイルを集約します。
以前はexeディレクトリがリポジトリに存在したようなんですが、今は見当たらないので自分で用意します。

```shell-session
$ cd ..
$ mkdir -p exe/2017Early/{book,eval}
$ mv source/YaneuraOu-by-gcc exe/2017Early/
```

## elmo取得
公開されている[elmoのバイナリファイル](https://drive.google.com/file/d/0B0XpI3oPiCmFalVGclpIZjBmdGs/view)をダウンロードして解凍。

`book/yaneura_format/standard_book.db`を`book`ディレクトリに、
`eval/*`を`eval`ディレクトリにコピーします。

結果、`exe/2017Early`ディレクトリは以下のような構成になります。

```shell-session
$ tree
.
└── 2017Early
    ├── YaneuraOu-by-gcc
    ├── book
    │   └── standard_book.db
    └── eval
        ├── KKP_synthesized.bin
        ├── KK_synthesized.bin
        └── KPP_synthesized.bin

3 directories, 5 files
```

配置できたら動作確認。

```shell-session
$ cd exe/2017Early/
$ ./YaneuraOu-by-gcc
usi
isready
```

以下のような結果が出力されていればうまくいっています。

```
info string Eval Check Sum = 65cd7c55a9d4cd9 , Eval File = elmo(WCSC27)
```

## 将棋ぶらうざQの導入
[将棋ぶらうざQの公式サイト](http://park.geocities.jp/sbrowser_q/)からMac版のソフトをダウンロード、解凍します。

手元の環境だと`SbrowserQ`はうまく動かなかったので、`SbrowserQ_Bundle_Java8`をアプリケーションディレクトリにコピーして、起動します。
（アプリケーションディレクトリにコピーしないと起動に失敗しました）

[設定]>[将棋エンジン設定...]を選択、
[追加]ボタンを押し、エンジンファイルパスに、先ほどビルドした`YaneuraOu-by-gcc`を選択します。

これでelmoを使用した対局や検討が可能になりました。
なお実際に利用する際には、オプションから`BookDepthLimit`を`0`に、`ConsiderationMode`のチェックをONにするそうです。

# 参考サイト
- [elmoをやねうら王で使用する方法](link-elmo)
- [OS X El Capitanにgccを入れてシンボリックリンクを作成][link-gcc]

[link-elmo]:https://kisagai.com/project/engineshogibanusage/elmo%E3%82%92%E3%82%84%E3%81%AD%E3%81%86%E3%82%89%E7%8E%8B%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
[link-gcc]:http://www.ketsuago.com/entry/2016/07/07/003437