弱いコンピュータ碁があまりないので、どうすんのよ?ってこと。
最近のGNU Goが強すぎるので、
昔の弱いころのGNU Goを使おうという発想です。
しかしいろいろ機能やI/Fが異なるので、利用が難しかったりします。
その辺りの調査内容をメモ。
【前提:最近のGNU Go(3.8とか)】
・棋力:KGS 7k前後 (GnuGoBot38)
・ソースコード:公式からダウンロード可能
http://ftp.gnu.org/gnu/gnugo/
・実行ファイル:だいたいどっかで入手可能
・GTP version 2に対応している
→多くの囲碁GUIソフトで対局可能
・デフォルトで投了する (投了させないためには --never-resign オプションを付ける)
【3.0】
・棋力:不明
・ソースコード:開発用リポジトリからダウンロード
http://git.savannah.gnu.org/cgit/gnugo.git/tag/?id=gnugo-3-0-0
・実行ファイル:各自でコンパイルして作成
・GTP version 2に対応していない。
→GTP version 1は使用可能。
(genmoveコマンドの代わりに、genmove_black, genmove_whiteコマンドを使う etc.)
・投了しない
・GTPモードで起動オプション --gtp-inputが使えない
→代わりに、リダイレクトでGTPコマンドファイルを読み込ませる
・GTPモードで起動オプション --infileが使えない
→代わりに、GTPコマンド(loadsgf)でSGFファイルを読み込む
・GTPモードで起動オプション --boardsizeが使えない
→代わりにSGFファイルのSZ[]でサイズを指定する
・GTPモードで起動時にバージョン・Copyrightメッセージが出力される
→--quietオプションで抑制する
【2.6】
・棋力:不明 (調査中)
・ソースコード:公式からダウンロード可能
・実行ファイル:各自でコンパイル
・GTP非対応
→asciiモードで、--infileオプションでSGFファイルを読み込ませて、次の一手を生成可能
・GTPモードで起動時にバージョン・Copyrightメッセージが出力され、抑制不可
→メッセージは無視する
・7路盤だと、異常な座標に打つことがある
(明らかな悪手、自らの眼を潰す、着手禁止点に打つ等)
→9路盤以上だと発生しない様子。
【2.4】
・棋力:不明
・ソースコード:※入手不能?
・実行ファイル:各自でコンパイル
※ソースコード未入手のため、詳細動作不明
【2.0】
・棋力:KGS 12k前後 (gnugo2)(調査中)
・ソースコード:派生したコード(Aloril氏による簡易GTP対応, 19路以外対応版)が下記に存在
http://osdn.jp/projects/sfnet_londerings/releases/
・実行ファイル:各自でコンパイル
・--infileオプションが無い
→代わりに同義の-lオプションを使う(-lオプションは最新版でも使用可能)
・GNUGoがパスしたときにアサーションエラーが発生する(19路以外のみ?)
→ソースコード(main.c, util.c)を改変して、不正座標を返したときはパスと見なし、assertionしないようにする
・コンソール以外からの使用時(phpからの呼出等)に、asciiモードではなくgmp(Go Modem Protocol)モードになってしまう
→ソースコード(main.c)を改変して、isatty()での判定による強制gmpモード化させないようにする
【liberty 1.0 (GNUGo 1.2〜2.0の時期の派生)】
・棋力:KGS 16k前後 (libertybot)(調査中)
・ソースコード:派生したコード(Aloril氏による簡易GTP対応)が下記に存在
http://osdn.jp/projects/sfnet_londerings/releases/
・実行ファイル:各自でコンパイル
・インターフェースがかなり違う(まだ使い方がよく分かりません...)
⇒Aloril氏による修正バージョンでは、GTPによる対局に強制されるっぽい。
GTPコマンド(PLAY, reg_GENMOVE等)打てば動作させられますが、単体ではつらい。
囲碁クライアントや、ネット碁サイト接続に特化させた作りになっていると思われる。
・SGFファイル読込など、途中局面から開始する手段が用意されてない。
(gtpのplayコマンドなどで読み込ませる?)
・低路数(13路未満)でCPUが白番で、黒番が初手天元近くに打つと、CPUが二手目でパスする。
(空き隅無しと判定してしまうため。)
【1.2】
・棋力:調査中(30k以下?) (調査中)
・ソースコード:公式からダウンロード可能
・実行ファイル:各自でコンパイル
→ Windows(32bit)の実行バイナリ作ってみました。こちら(gnugo.exe)です。(ご利用は自己責任でお願いします。)
・インターフェースが、対話方式による対局しかできない
・19路以外に未対応(ソースコード上、バリバリ"19"とか"18"とか直値埋込)
・saveコマンドでgnugo.datに局面保存する機能があるっぽい
→gnugo.dat生成すれば、途中局面からの手生成ができそう
参考:
http://gorogoronyan.web.fc2.com/igo/kgs_bot1.html
http://senseis.xmp.net/?GNUGo
http://kamakama.s151.xrea.com/makegnugo.exe.html
情報の観点が偏っていますが、折角なので共有します。
なお、内部ロジックの3.8, 3.0, 2.6, 2.0切替対応のデバッグ時に、
私ではその違いに気づけず、正しく切り替わってるか確認できないのが悲しいです。
(総じて負ける。ただし、2.6以下だと死活が弱く、混戦にするとたまに勝てることは気づきました。)