コンピュータ将棋や囲碁の掲示板
TOP > 過去ログ > 記事閲覧
fld_bell.gif 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2022/12/28(Wed) 06:32
投稿者 山下
floodgate、電竜戦のように、評価値、読み筋を送る拡張を囲碁でもやってみるための仕様検討が下で行われています。

zakkiさんが作成されたpythonで書き直したCGOS
https://github.com/zakki/cgos/tree/genmove_analyze
拡張形式の仕様
https://github.com/zakki/cgos/wiki/GTP-tournament-game-expansion#proposed-extension

テストサーバ
http://203.138.189.63/cgos/19x19/standings.html
http://203.138.189.63/cgos/9x9/standings.html
左上の「三」で「CGOS mode」を外すと地合は表示されません。
数値のついた石の上にマウスを置くと読み筋が出ます。
(最近の棋譜だと正常に表示されると思います。グラフが出ないときはブラウザのキャッシュを消してください)

GTP大会対局拡張案 ver 0.1
https://gist.github.com/zakki/5d83c850715407b2ed207070a033230c
電竜戦は読み筋出るのか。GTP/NNGS拡張したらCGFオープンとかUEC杯とかCGOSでどのくらいのソフト対応するかしら。
https://twitter.com/k_matsuzaki/status/1605896075033776129
lz-analyzeの挙動しか知らなかったんでなんか考える必要ある気がしてたけど
https://twitter.com/k_matsuzaki/status/1606585678607024129
12345678910>
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/06/05(Mon) 13:32
投稿者 zakki
参照先
コウの設定を追加しました。
iniファイルに
ko = POSITIONAL
で今まで通りスーパーコウ、
ko = SIMPLE
で2手前の局目の反復だけ禁止します。
ユニットテストでの動作と、自動対局が進むことは確認しました。

接続切れのほう試してみます。
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/06/04(Sun) 12:08
投稿者 山下
参照先
> 10分ほど放置すると接続が切れてしまう

問題は対局開始を待ってるとクライアントの接続が切れてしまうことなので
1分に1度くらい
Server info: Maximum time until next round: 09:05
の代わりに
Server info: Next round will start in: 09:05
みたいなのをサーバから送ってはどうでしょうか?
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/05/30(Tue) 08:45
投稿者 山下
参照先
> クライアントの再起動で結構救えそう

time_leftに対応してるプログラムが中断した場合はすぐに再接続してもらって
対応してない場合、再開に時間がかかる場合は
adminが手動で止めて持ち時間戻して再開、という感じがいいかもですね。

> いい対策を思いつきません。

なるほど・・・、結構大変そうですか。
プロトコル変更は大変そうなので、matchを実行してうまくいかなかったら
双方に再ログインをお願いする、という感じで運営しようかと思います。

> この週末は準備として

ありがとうございます!お手数おかけします。
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/05/29(Mon) 09:54
投稿者 zakki
参照先
> 手順的には中断対局が発生したらamdinでabortで対局を強制終了させて、
> 双方に再ログインしてもらって match で持ち時間を指定して再開、という流れでしょうか。

そうですね。
基本的には今までの大会でのトラブルは短時間のネットワーク切断でクライアントの再起動で結構救えそうな気はします。

> ログインしてるように見えてしまうことです。

ログイン済みになって再接続できなかったのと同じような理由で、いい対策を思いつきません。
プロトコル変更がありなら、サーバーがキープアライブ用のメッセージ送ったら、
クライアントが応答返さなければ接続切れにするみたいな方法はあると思います。
しかし現行のTclやPythonのクライアントは同期的にAIの応答待ってサーバーに結果を返すような
構造なのでそのままでは無理そうです。

> あと、コウで停止する処置

この週末は準備としてGoGame部分のユニットテストを書いてました。
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/05/28(Sun) 16:07
投稿者 山下
参照先
遅くなりましたが対局の再開が動作するのを確認しました。ありがとうございます!
abort 8971
match test2 test1 1800 1800 8971
これで無事に3手目から持ち時間を初期化で再開できました。

match test2 test1 1800 1800 8972 2
だと3手目から再開になりました。

手順的には中断対局が発生したらamdinでabortで対局を強制終了させて、
双方に再ログインしてもらって match で持ち時間を指定して再開、という流れでしょうか。

少し気になった点は下のように手動でログインした後、10分ほど放置すると接続が切れてしまうのですが
その状態で who すると
test1 waiting 0 1800.0 200.0
とログインしてるように見えてしまうことです。

$ telnet 203.138.189.63 6819
protocol genmove_analyze
e1 hoge
username
test1
password
test1

Connection closed by foreign host.
yss@ubux1:~$ 

あと、コウで停止する処置ですが下の部分で、2手目前(1手前?)との同型だけKOでエラーとする、という処理を追加で
日本ルールに対応にならないでしょうか?
(全局面での同型チェックでinfoでログに書くと、後から判定が簡単かと思います)
https://github.com/zakki/cgos/blob/b41c310529f0f7d1d5e76aa38671b0f2791474b9/server-python/cgos/gogame/gogame.py#L210
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/05/24(Wed) 14:21
投稿者 山下
参照先
ありがとうございます。こちらも差し替えました。
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/05/24(Wed) 13:57
投稿者 zakki
参照先
スコアと勝率のグラフ作成で無駄な処理を減らしました。
今度は碁石を打ってルール処理するのと碁盤の表示あたりがボトルネックになっててすぐどうこうするのは難しそうです。
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/05/23(Tue) 22:50
投稿者 きのあ
参照先
zakkiさんへ、ご返信ありがとうございます。

> プロファイル結果見る限りではボトルネックになってるわけでもなさそう
過去の別システムを高速化した経験ですとブラウザや端末の性能などの環境で計測結果かわるので、単一の環境での計測はまだ状況が変わることはご存じと思いますが

> for(const v of f) や class 使った書き方に変えたい
別のところをより重視されているという事で失礼しました。

観戦の仕組みがより充実することをたのしみに見守ることにします!!
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/05/23(Tue) 19:19
投稿者 zakki
参照先
そうなんですが、プロファイル結果見る限りではボトルネックになってるわけでもなさそうなので、私としては優先度低めです。
ES5しか動かないブラウザ対応は捨ててもいいと思うので、どうせならどこかのタイミングで for(const v of f) や class 使った書き方に変えたいです。

パッチもらえるのであれば取り込むのはやぶさかではありません。
件名 Re: 囲碁AI大会やCGOSで評価値、読み筋を送る拡張の話
投稿日 : 2023/05/23(Tue) 09:33
投稿者 きのあ
参照先
UEC杯が評価値付きで行われるととても楽しみですね。
投稿しようか迷いました。まだ重いみたいなのでちょっとだけソース見た感想を投稿します。

view-source:http://www.yss-aya.com/cgos/wgo/wgo.player.min.js

↓のような箇所がたくさんありました。速度の意味でアンチパターンですのでlengthを毎回参照するのはやめて変数に代入してからのほうが無難に思えました。
for(var q=0;q<f.length;q++)
for(a=0;a<k.length;a++)
12345678910>

- WEB PATIO -