2015年05月27日

古い弱いGNUGoメモ

弱いうちの対局相手は、コンピュータが気兼ねしなくて良い、というものの、
弱いコンピュータ碁があまりないので、どうすんのよ?ってこと。

最近の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以下だと死活が弱く、混戦にするとたまに勝てることは気づきました。)
posted by curren at 00:37| Comment(0) | TrackBack(0) | 日記 - 囲碁 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。