GitHubの方にプルリクを送ろうと思っていたのですが,想像以上にVisualStudioでgitをうまく扱えないまま(あまり余暇もなく)二か月過ぎたのでこういう形で公開しておきます。
Rayは深層学習流行前の形の囲碁ソフトです。(間違っていたらコメント下さい)
AlphaGo以前と表現すると今は分かりやすいのだと思わます。
囲碁界隈は将棋ほど色々と出ていないようで未だに入門者のサンドバッグがGnuGoだったりするので,ちょうどRayを対戦相手にする準備をと考えておりました。
で,Windows環境でビルドする手順は以下のようになりました。
1.
includeパスを設定する。
Rayのフォルダ構成はソースとヘッダが別なのでそのままだとincludeされない。
CおよびC++では初歩である。
2.
UTF-8のソースを使えるようにする。MS文化圏ややこしいですね。
/utf-8 (ソースおよび実行文字セットを UTF-8 に設定する) | Microsoft Docs
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
[その他のオプション] で、/utf-8 オプションを追加して優先エンコードを指定します。
3.
sprintf()関数のワーニングを抑える
昨今危なくて使わない関数ですね。
メニュー[プロジェクト]-[プロパティ]を選択。
プロパティページ画面の、[構成プロパティ]-[C/C++]-[プリプロセッサの定義]で編集を選択
プリプロセッサの定義画面で、「_CRT_SECURE_NO_WARNINGS」を入力
4.
VLAを修正する。
MinorizationMaximization.cpp の149,150行目
train_thread_arg_t targ[threads];
std::thread *handle[threads];
可変長配列 (Variable Length Array, VLAと略す)である。
少々大袈裟だが,こいつは知る人は知る怨霊である。ここでは詳しく語らない。
ここで大変困った顔になった。
選択肢は
- Visual Studioをやめる(msys2など)
- Visual Studioでclangを使う
- ソースに手を入れる
の三択であった。
ソースに手を入れるのは最終手段にしたかったのだが,よくソースを見てみるとこのMinorizationMaximizationを呼び出しているところはひとつだけでTRAIN_THREAD_NUMを引いていることが確認できたので,TRAIN_THREAD_NUMの固定配列に変更することで問題なく対応できた。
VLAは導入された世代で馴染んだ人はカジュアルに使ってしまうのだろうか。
ところで,今年の囲碁大会は例年とスケジュールが異なるらしい。
10月にCGFオープン,11月にUEC杯と近い。
Rayベースの改造で出てもいいらしいので興味ある人は是非どうぞ。