LoginSignup
1
2

More than 5 years have passed since last update.

第10回UEC杯コンピュータ囲碁大会に参加しようぜ

Last updated at Posted at 2017-03-17

Gazo
(第10回UEC杯コンピュータ囲碁大会)
http://www.computer-go.jp/uec/public_html/index.shtml

いや、もう第10回で終わってしまうんだが、次がない大会への参加方法を書いていてもいいだろう。

ノー・ネーム・碁・サーバー (NNGS)に対応しようぜ

この大会では別に 指し手は人力の手入力でも構わない、という話しを前にしたが コンピューターの言う通りに2000手も指すのは嫌だ。サーバーに対応させて自動化したい。

Gazo
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; 碁モデム・プロトコル)

Gazo
「Go Modem Protocol」(britgo)
http://www.britgo.org/tech/gmp.html

何バイトを飛ばして、何ビット目にフラグが立っている、といった 電気通信だぜ。
そういうえば UEC杯とは 電気通信大学のことだぜ。

似たようなものに楽器の入力を送受信する MIDI とかがあるし、他にもいっぱいあるだろう。

わたしはサーバーのテスト環境を開局できなかったんで、これは使わなかった。

GTP (Go Text Protocol; 碁テキスト・プロトコル)

Gazo
「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を使う場合はその用意。

例)わたしが持っていくもの

Gazo

シンプルなものでファイルは3つだけ。

  • cgfgoban.exe ※これが CGF碁盤
  • cgfthink.dll ※これが API。思考部もこの中
  • stone.wav ※石を置いたときの音

.exe を叩くとこんな感じ。

Gazo

碁盤が描かれているのが cgfgoban.exe が出したウィンドウで、CGF碁盤は CGFシンクを別ウィンドウとして出す(黒い画面)。

1つのCGF碁盤は1つのCGFシンクと対応する。

同じ CGFシンク同士で対局することは 1つのCGF碁盤でできるが、
異なる2つのCGFシンクで対局したいときは、2つのCGF碁盤を立ち上げればいいが、そのやり方は忘れた。

Gazo

[対局(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 とポート番号を付けてはいけないらしい。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2