CGFオープン(コンピューター囲碁の大会の1つ)って、どうやって参加すんの(^~^)?

📖 CGFオープン

ramen-tabero-futsu2.png
「 👆 明日だが……
どうやって参加すんの?」

📖 大会要項

kifuwarabe-futsu.png
「 👆 大会要項を読めだぜ」

ohkina-hiyoko-futsu2.png
「 文章は読まないから、 ペラペラ マンガ にする必要があるのよ」

20211008go1.png
サーバー
おなまえ: NNGS (No Name Go Server)
URL: yss-aya.com
Port: 9696
Program: 2018年のAI竜星戦、2019,2021年のUEC杯で用いたNNGSサーバ

ramen-tabero-futsu2.png
「 👆 ぼんやり思い出してきたぜ」

20211008go2a2.png

ohkina-hiyoko-futsu2.png
「 👆 コンピューター囲碁大会の 最も有名な通信プロトコル、 GTP (Go Text Protocol) を使う前提で話を進めましょう」

kifuwarabe-futsu.png
「 わたしは GTP だぜ」

20211008go5a1.png

ramen-tabero-futsu2.png
「 👆 でも GTP って、 コンピューター囲碁の思考エンジンの実行ファイルと、 GUI との間で通信するプロトコルだよな?
NNGS とは どうやって通信すんの?」

20211008go7a1.png

ohkina-hiyoko-futsu2.png
「 👆 Telnet(テルネット)よ」

ramen-tabero-futsu2.png
「 👆 思い出してきた……」

ohkina-hiyoko-futsu2.png
「 GUI と サーバーの間には 通信プロトコルのようなものはなく、
Login: とか 入力プロンプトが出てくるのよ。今でいう Webサイトを CUI にしたようなやつよ」

📖 No Name Go Server (NNGS)

kifuwarabe-futsu.png
「 👆 NNGS は 2009年8月30日が最後の更新で、それ以降 UEC杯コンピューター囲碁大会で ちょっと修正してるが、
参加者は 特に気にしなくていいぜ」

ramen-tabero-futsu2.png
「 多分、 インターネットでは ブログも SNS もとっくに流行っていて スマホでタッチもある時代、
Telnet は廃れたんだろ」

ohkina-hiyoko-futsu2.png
「 一周回って これすごい って驚くことになるわよ。 GUI 無いので逆に」

kifuwarabe-futsu.png
「 CUI は良いが、せめて Telnet ではなくて SSH が良かったかな」

20211008go3.png

ramen-tabero-futsu2.png
「 👆 じゃあ とにかく、 NNGSサーバーとおしゃべりできる GUI を探してくればいいのかだぜ?」

📖 2021年CGFオープン 大会要項 5.通信対局方式

ohkina-hiyoko-futsu2.png
「 👆 大きな選択肢は、2つねぇ。
さっきの 大会要項の 5番にも書いてあるんだけど」

📖 CgfGoBan

ramen-tabero-futsu2.png
「 あれっ、ダウンロードできね! 👆 作者のページから落とすか……」

20211008go8.png

ohkina-hiyoko-futsu2.png
「 👆 1つは CgfGoBan を使うことと……」

20211008go9.png

ohkina-hiyoko-futsu2.png
「 👆 もう1つは GTP_20180715.tar.gz 圧縮ファイルを解凍して Rubyスクリプトを介して GTPの思考エンジンと NNGSサーバーを
つなぐことなんだろうけど」

kifuwarabe-futsu.png
「 お父んは Windows で Rubyスクリプト動かす方法分かんね、といって 投げたんだぜ」

ramen-tabero-futsu2.png
「 👆 思い出してきたぜ」

20211008go11a2.png

ramen-tabero-futsu2.png
「 👆 じゃあ こういう アーキテクチャー が Windows ユーザーにはいいのかだぜ?」

ohkina-hiyoko-futsu2.png
「 Windows ユーザー自体が少数派なんで、 会場で2人ぐらいいるかな、という 構成ねぇ」

GTPを使う思考エンジンを用意しろだぜ

📖 これで書ける!「コンピュータ囲碁講習会」

kifuwarabe-futsu.png
「 👆 この講習会のページに置いてあるサンプルを 最後の方までやれば、 GTPプロトコルを実装したコンピューター囲碁ソフトを
作れるぜ、9路 だけど」

ramen-tabero-futsu2.png
「 じゃあ サンプルのコードの思考部を ぐちゃぐちゃにして 独自性をクリアーして 出たろ」

ohkina-hiyoko-futsu2.png
「 じゃあ GTP を実装できているかどうか、チェックしましょう」

20211008go12.png

ramen-tabero-futsu2.png
「 👆 講習会のサンプルの レッスン15 でもいいの?」

kifuwarabe-futsu.png
「 もっと ぐちゃぐちゃにしろよ?」

思考エンジンからGUIへGTPプロトコル

20211008go13.png

📖 Dina Burdakova Wins European Women’s Go Championship 2021

ohkina-hiyoko-futsu2.png
「 👆 国際囲碁連盟(International GO Federation)の記事から、囲碁盤を見てほしいんだけど、
囲碁は マスじゃなくて 交点 なんだけど、
交点を指す符号のアルファベットに I (アイ) は無いのだけは 注意しなさい」

kifuwarabe-futsu.png
「 囲碁盤は 90°回転しても 左右反転しても 勝負に影響しないんで、
筋がアルファベットで 段が数字でも、
段がアルファベットで 筋が数字でも、
両方アルファベットでも、
両方数字でも、
両者で通じていれば 勝負には影響しないが、とりあえず GTPでは アルファベット 数字 の順だぜ」

Example:

= D4

kifuwarabe-futsu.png
「 👆 イコール、半角スペース1個、アルファベット1文字、数1文字、改行、空行
これが 思考エンジンが GUIへ送る GTPプロトコルの指し手だぜ」

Example:

= pass

ohkina-hiyoko-futsu2.png
「 👆 コンピューター囲碁では いつでもパスできて、パスの送り方も こうよ。
イコール、半角スペース1個、pass、改行、空行」

ohkina-hiyoko-futsu2.png
「 なんで いつでもパスできるかと言うと、先にパスをした方は『わたしは勝てます、まだ指しますか』、
続けてパスをした方は『わたしの負けです、ここで終わります』の意味になってるからなのよ」

kifuwarabe-futsu.png
「 あとは 置くところがないときに pass だな」

Example:

= 

ohkina-hiyoko-futsu2.png
「 👆 GUI から 思考エンジンへ コマンドが送られてきたけど、特に返すものもないコマンドのときは
イコール、半角スペース1個、改行、空行
を 送り返しとけばいいわよ」

ramen-tabero-futsu2.png
「 他には?」

ohkina-hiyoko-futsu2.png
「 とりあえず これだけ分かってりゃ 対局できるわよ」

ramen-tabero-futsu2.png
「 えっ!! コンピューター囲碁の思考エンジン作んの、 簡単すぎない????」

20211008go14.png

kifuwarabe-futsu.png
「 逆に、 GUI や Rubyスクリプト側から どんなコマンドが送られてくるかは、 GUI によるぜ」

ramen-tabero-futsu2.png
「 そんなん困るぜ」

ohkina-hiyoko-futsu2.png
「 対応できないコマンドがくれば

? 任意のメッセージ

返しときゃいいのよ。
クエスチョンマーク、半角スペース1個、任意のメッセージよ」

ramen-tabero-futsu2.png
「 おーっ!」

  • boardsize - 盤のサイズを n路 にしてください
  • clear_board - 盤を初期化してください
  • quit - 思考エンジンを終了してください
  • protocol_version - GTPプロトコルのバージョンを返してください(2 を返せばよい)
  • name - 思考エンジンの名前を返してください
  • version - 思考エンジンのバージョンを返してください
  • list_commands - 対応しているコマンドの改行区切りリストを返してください
    • Example: = boardsize\nclear_board\nquit\nprotocol_version\nname\nversion\nlist_commands\nkomi\ngenmove\nplay\n\n
  • komi - コミを x にしてください
  • genmove - あなたが着手する座標を返してください
  • play - 石の色と座標を指定しますので、置いてください

ohkina-hiyoko-futsu2.png
「 👆 コンピューター囲碁講習会のサンプルで書かれているのは これだけねぇ」

ramen-tabero-futsu2.png
「 よっしゃ」

20211008go15a1.png

ramen-tabero-futsu2.png
「 思考エンジンのプログラムを実行して、 GUIが思考エンジンにコマンドを送ってきた、という想定で
わたしが GUI の代わりに コマンドを打鍵するぜ」

kifuwarabe-futsu.png
「 おう、打てだぜ」

20211008go16.png

ramen-tabero-futsu2.png
「 このコンソールというやつには 標準出力と エラー出力の2つがあって、
計算過程は エラー出力へ、 GUI に送り返すコマンドは 標準出力へ、と使い分けているぜ。
最後に = D5 と空行が付いてるな」

思考エンジン VS 自分(人間) で、CgfGoBan で対局しようぜ?

ohkina-hiyoko-futsu2.png
「 NNGSサーバーと通信する前に、 CgfGoBan を使って、ローカルPCで 将棋エンジンと自分で 対局してみましょう」

20211008go17.png

ramen-tabero-futsu2.png
「 👆 多分 go15.exe が レッスン15の 思考エンジンなんだけど、
Visual Studio C++ の実行ファイルは、このフォルダー一式のファイルが揃ってないと 動かないかもしれないな」

kifuwarabe-futsu.png
「 分かりづら」

20211008go18a1.png

ramen-tabero-futsu2.png
「 👆 [Shift] キーを押しながら go15.exe ファイルを右クリック、
パスのコピー というのが増えてるのでクリック」

20211008go19a1.png

ramen-tabero-futsu2.png
「 👆 CgfGoBan で [設定] - [GTPの設定] と進み」

20211008go20.png

ramen-tabero-futsu2.png
「 👆 コンボボックス(テキストボックス)をクリックして、 [Ctrl] + [V] キーで貼り付け、
両端にダブルクォーテーション(") が付いているので それは削除しろだぜ。
[OK] ボタンをクリック」

20211008go21.png

ramen-tabero-futsu2.png
「 👆 [対局] - [対局開始] と進み……」

20211008go22a1.png

ramen-tabero-futsu2.png
「 👆 例えば BlackComputer(GTP) 、 White を Human にしろだぜ。
人間プレイヤーは 自分の名前でも 右の欄に入れろだぜ」

ramen-tabero-futsu2.png
「 中段は今回関係ない。 9路、6.5コミ、黒の置き石無しで [OK] ボタンをクリックしようぜ」

20211008go23.png

ramen-tabero-futsu2.png
「 👆 フリーズしたような 表示に見えるが、 CgfGoBan は こんな感じなので 待てだぜ」

20211008go24.png

ohkina-hiyoko-futsu2.png
「 👆 真ん中 一直線引いたら 勝ちなんじゃないの?
直線の2倍の石が要るのよ、囲うには!」

20211008go25a1.png

ramen-tabero-futsu2.png
「 👆 ダメだった。もうやだ。パス!」

kifuwarabe-futsu.png
「 わたしは 最後まで打つけどな!」

20211008go26a1.png

ramen-tabero-futsu2.png
「 👆 終わんね、中断!」

20211008go27a1.png

ramen-tabero-futsu2.png
「 👆 一応 地計算のボタンも付いてるんだが、対局を途中で投げたら ほとんど役に立たなくて……」

20211008go28.png

ramen-tabero-futsu2.png
「 👆 白の 5.5目勝ちと出てるが、人間の目から見たら 黒勝ちだぜ」

kifuwarabe-futsu.png
「 講習会のサンプル プログラム、つよ」

通信しようぜ?

ohkina-hiyoko-futsu2.png
「 CgfGoBan でこれだけ動いているということは、 NNGSサーバーとも通信対局できるのよ」

kifuwarabe-futsu.png
「 くわしく」

20211008go29.png

ohkina-hiyoko-futsu2.png
「 👆 Telnet の設定と、サーバーの接続先さえ間違えなければ、
GUI と サーバーの間で どんな通信をしてるかを わたしたちは知らなくていいのよ」

📖 2021年CGFオープン 大会要項

CGF碁盤を用いて対局するには
    1. 「設定(C)」「GTPの設定(G)」「GTP engine full path」に 「c:\go\gnugo\gnugo.exe --mode gtp」 でGTPで動くプログラムを登録。

ohkina-hiyoko-futsu2.png
「 👆 GTPエンジンの設定方法は もう分かってるわよね」

20211008go30.png

    2. 「対局開始」で「Black」を Computer(GTP)、「White」をLAN(nngs)。
    3. 「AI Ryusei」にチェック。IP(URL)には yss-aya.com
    4.  Login Name は「Black」に test1  「White」に test2
    5. 「Sudden death time limit」 は 30
    6. 「Board Size」 19   「Komi」  6.5     「Handicap」 None

ohkina-hiyoko-futsu2.png
「 👆 黒番で、 19路にはまだ対応してないから 9路だとして、上図の通りね」

ramen-tabero-futsu2.png
「 LAN なの わらう」

20211008go31.png

    7. 「OK」

ohkina-hiyoko-futsu2.png
「 👆 これが CgfGoBan の 対局開始待ちの状態ね」

ramen-tabero-futsu2.png
「 CgfGoBan も、 Rubyスクリプトのやつも、 黒番が先にログインして、あとからログインした白番から対局に申し込むの
NNGSのルールじゃなくて コンピューター囲碁ソフトの中での決め事みたいだな。
数年前に adminmatch コマンドが 大会運営側で用意されてからは、大会では その しきたり も要らなくなったはずだけど」

20211008go32.png

    8. CGF碁盤を新たに起動して、
    9. 「対局開始」で「Black」を LAN(nngs)、「White」を Computer(GTP)。
   10. それ以外は (3)-(7) と同一。

ohkina-hiyoko-futsu2.png
「 👆 CgfGoBan をもう1つ起動して、白番の方を Computer(GTP) にするのね」

ramen-tabero-futsu2.png
「 いわゆる二重起動だろ。これ設定ファイル 共有してるだろ。きっと、あとでウィンドウ閉じた方の設定で 上書きされるぜ」

20211008go33.png

ohkina-hiyoko-futsu2.png
「 👆 両方が 待ち の状態になったわね」

ramen-tabero-futsu2.png
「 これ、対局サーバーの ロビーに 2人がログインして ぼーっ としてる状態だよな。
対局申込までやらないと マッチングは成立しないぜ」

   11.  telnetをインストール。

ohkina-hiyoko-futsu2.png
「 👆 1行で 説明されてるの わらう」

📖 Telnet クライアント インストール手順

ramen-tabero-futsu2.png
「 👆 Windows 使ってるんなら あっさりインストールできるんで、適当にググった上の記事を読めだぜ」

20211008go34a1.png

   12. 「スタート」「Windowsシステムツール」「コマンドプロンプト」

ohkina-hiyoko-futsu2.png
「 👆 コマンド プロンプトの置き場所、 Windows 10 で変わってない?」

ramen-tabero-futsu2.png
「 [Windows] + [R] キーを押して、 cmd と打鍵、エンターキーを押下すれば コマンド プロンプトは出てくる」

20211008go35a1.png

   13.  telnet yss-aya.com 9696

ohkina-hiyoko-futsu2.png
「 👆 これって 3人目が 対局申込コマンドを打ちに ログインしようとしてるってことよね」

kifuwarabe-futsu.png
「 マニュアル感 わらう」

20211008go36.png

   14.  「Login」 admin  「Password」  admin

ohkina-hiyoko-futsu2.png
「 👆 画面がクリアされたわよ」

ramen-tabero-futsu2.png
「 今見てるの Telnet の画面なんで。すぐ接続切れるかも。早よ打て」

20211008go37.png

ohkina-hiyoko-futsu2.png
「 👆 管理者権限で サーバーに入れるの わらう」

ramen-tabero-futsu2.png
「 囲碁しかできないしな。ジェイルという仕組みで隔離されていて、マシンには いたずらできないぜ」

20211008go38.png

ohkina-hiyoko-futsu2.png
「 👆 なんか メッセージが流れてきたんだけど」

ramen-tabero-futsu2.png
「 20年前に流行った NNGSサーバー の先見性だぜ。
大人数でワイワイするのに向いているぜ。 現代の感覚だと Slack とか Discord のチャンネルが大量に超速で流れてくやつだな。
他者が何やってるか ロビーに居ると 全員の様子が見れる。積極的な混線とでもいうべきやつだぜ。
時間経過したんで、先にログインした方がログアウトしたんだな。
CgfGoBan 見てても何も知らされないけど……」

20211008go39.png

   15.  who で test1 と test2 がログインしているのを確認

ohkina-hiyoko-futsu2.png
「 👆 あらっ? 打鍵した who コマンドの文字が見えないんだけど?」

ramen-tabero-futsu2.png
「 Telnet の localecho がオフになってるのかも。
[ctrl] + "]" キーを打鍵して、画面が切り替わったら 1分以内に set localecho と打鍵して エンターを2回押せだぜ」

20211008go40.png

kifuwarabe-futsu.png
「 👆 なんだこの裏技みたいな画面。
古いおっさんが生きててくれないと 知らないぜ!」

20211008go41.png

ohkina-hiyoko-futsu2.png
「 👆 打鍵したコマンドが見えるようになったわよ。
じゃあ 黒番と白番、ログインし直して」

20211008go42.png

kifuwarabe-futsu.png
「 👆 [Stop] ボタンを押して やり直しだな」

20211008go43.png

ohkina-hiyoko-futsu2.png
「 👆 きたきた!」

20211008go44a1.png

   16.  adminmatch test1 test2 b 19 30 0
   17.  これでtest1が黒番で対局が開始されます。

ohkina-hiyoko-futsu2.png
「 👆 これって、数年前に追加された adminmatch コマンドよね。
大会運営の NNGS には付いてるけど、わたしたちがダウンロードできる 2009年のソースには無いのよ」

ohkina-hiyoko-futsu2.png
「 動かね!」

   18. 9路の場合は以下のように変更します。
       CGF碁盤で「Board Size」 9  「Komi」  7.0  「Sudden death time limit」 10
       adminmatch test1 test2 b 9 10 0

ohkina-hiyoko-futsu2.png
「 👆 9路は こうかしら? あれっ、始まんないなあ?
コミと タイムリミットも違うじゃない」

20211008go45a1.png

ohkina-hiyoko-futsu2.png
「 👆 nuke (ニューク)コマンドで 蹴飛ばして……」

kifuwarabe-futsu.png
「 トラブル慣れしてるの わらう」

20211008go46a1.png

ohkina-hiyoko-futsu2.png
「 👆 マッチが よう やっと 付いたわよ!」

20211008go47.png

ohkina-hiyoko-futsu2.png
「 👆 通信対局ができることを 確認できたわね!」

ramen-tabero-futsu2.png
「 やったぜ!」

kifuwarabe-futsu.png
「 それ 講習会のサンプル プログラムなんだけどな」

ramen-tabero-futsu2.png
「 朝起きて ぐちゃぐちゃにして 独自性を主張しようぜ」

20211008go48.png

ohkina-hiyoko-futsu2.png
「 👆 終わったわよ」

対局ごとにログインし直し

ramen-tabero-futsu2.png
「 朝起きた」

ramen-tabero-futsu2.png
「 そういえば思い出したが、 コンピューター囲碁の大会の しきたり では、
対局が終わると ログアウト するんだぜ」

20211008go49.png

ramen-tabero-futsu2.png
「 👆 そして 次の対局に入ろうとすると 盤を初期化しますか? という
ダイアログボックスが出るんだぜ」

ramen-tabero-futsu2.png
「 そして もう1回 ログインし直す必要があるぜ」

kifuwarabe-futsu.png
「 対局開始前には お父んは PCの前に座ってないといけないんだな」

ohkina-hiyoko-futsu2.png
「 これは NNGSサーバーの しきたり ではなくて、
現代の言葉で言うと bot(ボット) のしきたりなのよ。
毎回 ログインし直せば 連続動作よりは安定しますからね」

kifuwarabe-futsu.png
「 現代の感覚では 改修したくなる仕様だな」

CgfGoBan から送られてくるコマンドとこちらの応答例

Example(対局開始時):

boardsize 19
= 

clear_board
= 

komi 6.5
= 

name
= your_program_name

version
= 0.0.1

genmove black

Example(こちらの着手):

= D5

Example(相手の着手):

play white K10

NNGSサーバーをローカルに立てたいなら

📖 muzudho/nngs-docker

ramen-tabero-futsu2.png
「 👆 わたしが Docker にしておいた。 Docker を知ってるなら使えだぜ。
ただし admin ユーザーを登録する方法が もともと壊れていたので admin ユーザーがいないやり方で
対局を付けろだぜ。
多分 環境をセットアップして説明読むのに 初見では 半日でも間に合わないだろうから CGFオープンのあとに使えだぜ」

通信部を自作

20211009go50.png

📖 muzudho/gtp-engine-to-nngs

kifuwarabe-futsu.png
「 👆 お父んは 通信部も自作したのでは?」

ramen-tabero-futsu2.png
「 あの作り直したいやつ……」

<おわり>

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事