(第10回UEC杯コンピュータ囲碁大会)
http://www.computer-go.jp/uec/public_html/index.shtml
いや、もう第10回で終わってしまうんだが、次がない大会への参加方法を書いていてもいいだろう。
ノー・ネーム・碁・サーバー (NNGS)に対応しようぜ
この大会では別に 指し手は人力の手入力でも構わない、という話しを前にしたが コンピューターの言う通りに2000手も指すのは嫌だ。サーバーに対応させて自動化したい。
NNGS (source forge)
https://sourceforge.net/projects/nngs/
サーバーのソースはここに置いてある。バージョンはわたしが見る限り ずっと 1.1.22 だ。
書き方を見ると多分 Linux か何かなんだろう。
これ、人と人が対局するサイトを作るサーバーなんで、
nngsmain.c ファイルに main 関数があって、main_event_loop 関数にラッピングされた net_select 関数が くるくると回って対局者のログインを待っている。
これを自宅のPCで開局できれば……、とか思ってたんだが わたしは Linuxのインストールと基本操作でつまづいて Windows に Cygwin を入れようとして またつまづいたんでやらなかったんだが、 自宅サーバーができる人なら できるんじゃないか。開局をやってみてはどうだろうか。
で、コンピューター囲碁開発者は 別に サーバーの開局なんかしなくても、次の2つを知ってればいいわけだ。
- サーバーとの通信は CgfGoBan にやってもらう。API(関数3つほど)を覚える
- 通信プロトコル(コマンド5つほど)を覚えて つなぎに行く。ぶっつけ本番で 大会で接続できることを祈る
囲碁の通信プロトコルは GMP と、GTP の2つだけ
- GMP (Go Modem Protocol; 碁モデム・プロトコル)
- GTP (碁テキスト・プロトコル)
バイナリでもばりばり書くぜ、という人は GMP を、テキストを送受信するぜ、という人は GTP を書く。
GMP (Go Modem Protocol; 碁モデム・プロトコル)
「Go Modem Protocol」(britgo)
http://www.britgo.org/tech/gmp.html
何バイトを飛ばして、何ビット目にフラグが立っている、といった 電気通信だぜ。
そういうえば UEC杯とは 電気通信大学のことだぜ。
似たようなものに楽器の入力を送受信する MIDI とかがあるし、他にもいっぱいあるだろう。
わたしはサーバーのテスト環境を開局できなかったんで、これは使わなかった。
GTP (Go Text Protocol; 碁テキスト・プロトコル)
「19.2 Running GNU Go in GTP mode」(GNU Go)
http://www.gnu.org/software/gnugo/gnugo_19.html#SEC192
GTP は、GMPをテキスト形式にしたものだ。
バイナリよりはテキストの方が扱いやすいだろう、とうことで GNU Go 3.8 で実装されているらしいんだが、 GNU Go 3.8 のソースコードは読むのが嫌になるほどとても難しい。
マニュアルにはあんまり載ってないが、ソースを読むとコマンドが 300個ぐらいあったんじゃないか。
「19.6 GTP command reference」(GNU Go)
http://www.gnu.org/software/gnugo/gnugo_19.html#SEC200
このうち、UEC杯で使うコマンドは 5種類 ぐらいだ。むしろそれ以外を送信して問題が起こったら処罰されてしまう。
「3.プロトコル」(第10回UEC杯コンピュータ囲碁大会)
http://www.computer-go.jp/uec/public_html/network.shtml
だいぶ 実装方法が絞られてきたのではないか。
サーバーとの通信は CgfGoBan にやってもらう。API(関数3つほど)を覚える
「コンピュータ囲碁プログラム CGF碁盤プロトコル」(Qiita)
http://qiita.com/muzudho1/items/ddf9eb068ecfce8c5ec2
APIの使い方は説明した。これが一番簡単、C++ さえ読書きできれば……。
CgfGoBan に丸投げすることで、通信は行けそうだ。
コンピュータ囲碁ソフトを自作しよう
「コンピュータ囲碁プログラム 設定を作ろう」(Qiita)
http://qiita.com/muzudho1/items/51ae95477b669ba61f29#_reference-5b5fe9f2cfa413bbeee8
「コンピュータ囲碁プログラム ゲームデータを作ろう」(Qiita)
http://qiita.com/muzudho1/items/f7049ad58a6b19a41761#_reference-40f14ba19ab43cd3962a
「コンピュータ囲碁プログラム 盤上を走査しよう」(Qiita)
http://qiita.com/muzudho1/items/b5fbe7f9a6dd9fb1b989#_reference-38f35238e3ccded9b64f
「コンピュータ囲碁プログラム 囲碁のルール」(Qiita)
http://qiita.com/muzudho1/items/51537ba182c44c0829ff#_reference-e30c26335b2dd37cd70e
続きを書く時間がないぜ。
持っていくもの
- ノートPC
- 自作のコンピューター囲碁ソフト
また、遠隔PCを使う場合はその用意。
例)わたしが持っていくもの
シンプルなものでファイルは3つだけ。
- cgfgoban.exe ※これが CGF碁盤
- cgfthink.dll ※これが API。思考部もこの中
- stone.wav ※石を置いたときの音
.exe を叩くとこんな感じ。
碁盤が描かれているのが cgfgoban.exe が出したウィンドウで、CGF碁盤は CGFシンクを別ウィンドウとして出す(黒い画面)。
1つのCGF碁盤は1つのCGFシンクと対応する。
同じ CGFシンク同士で対局することは 1つのCGF碁盤でできるが、
異なる2つのCGFシンクで対局したいときは、2つのCGF碁盤を立ち上げればいいが、そのやり方は忘れた。
[対局(P)] - [対局開始(N)] と進む。
これで 人間vsコンピューター でも、コンピューターvsコンピューター でも、サーバーを中継した対局でもできる。
ただ、コンピューター将棋の floodgate みたいな、コンピューター用に開局して常時稼働しているサーバーが無いんだが……。歴史的には floodgate はコンピューター囲碁の対局サーバーの CGOS みたいになることを目指しているので先輩は囲碁の方なんだが。
大会のテストサーバー
「5.テストサーバ」(第10回UEC杯コンピュータ囲碁大会)
http://www.computer-go.jp/uec/public_html/network.shtml
おや、動かんね。どうも、
CSAのコンピュータ将棋の場合、GPS将棋か何かがテスト相手をしてくれるんだが、
UECのコンピュータ囲碁の場合、サーバーだけ開局してるんで 自分vs自作ソフトで対局してくれ、
ということらしい。
そうか。
動かね。ぶっつけ本番でいいや。
解説終わり。
次の記事
「コンピュータ囲碁プログラム CgfGoBan を改造しよう」(Qiita)
http://qiita.com/muzudho1/items/f0d22cb8d12f41172b00
追記
CgfGoBanの対局開始ダイアログボックスでは、URLの後ろに :9696 とポート番号を付けてはいけないらしい。