teacupの掲示板が2022年8月1日でサービス終了するため、
こちらに掲示板を移行しました。
以前の掲示板
https://524.teacup.com/yss/bbs/
平均playout数を800から1600と倍にした影響で
平均手数が77手から87手ほどに増えています。
棋力が上がるほど手数は伸びるのでしょうか?
今年の選手権の決勝は平均193.6手でした。仮に4300 ELOぐらいを
決勝のレベルとするとこんな関係があるのかもしれません。
ELO 平均手数
3300 77手
3400 87手
4300? 193手
下図はAobaZeroの自己対戦で現在局面の瞬間的なvalueの値(評価値)と
800playoutした後の評価値の差です。
自分が勝ちを +1 、負けを -1 としています。
例えば、瞬間的なvalueが +0.5(勝率75%)の時、800playout後は
平均で -0.13 (勝率換算で6.5%)下がる、という感じです。
+0.65(勝率82.5%)がもっとも過大評価されてやすく、-0.16(勝率換算で8%)下がります。
勝ってる場合も負けてる場合もほぼ対称で、勝率82.5%(17.5%)ぐらいが
もっとも楽観的(悲観的)なようです。
探索すると勝率が下がるなら、最初から補正してみれば、と瞬間的なvalueを
グラフのような感じで無理やり補正してみたのですが、当然というか強くはなりませんでした。

瞬間的なというのは一局面のニューラルネットの出力値そのままという意味でしょうか?
探索の効果が平均的なものではなく確率分布的な挙動をみないとこういうのは難しい気がします。
ニューラルネットの出力値そのままという意味、でした。
確かに平均値で何かするのはちょっと乱暴でした。
もう少しどういった局面で変動しやすいのか、という要素を探すと効果があるかもしれません。
以前掲示板に記載されていてSoftmax温度で弱体化調整される話を真似て実験してみました。
二番絞りもここまで来たようです。
https://bleu48.hatenablog.com/entry/2022/08/03/125010
AobaZero比でも僅差で勝ってるかなと思います。
AobaZeroは1pだと15bのdlshogiに-173 ELO差なので、
15bのdlshogiより+100 ぐらいでしたら+270差ぐらいかもしれません。
40bのAobaZeroは全然伸びませんでしたが、将棋でも40bは強くなるのですね。
dlshogiとの固定playoutでの棋力差
http://www.yss-aya.com/bbs_log/bbs2022.html#bbs68
floodgateで300戦ほどの結果ですが15bのdlshogiより+130ぐらいあるようです。(両方同じ温度設定のsoftmaxです)
それよりもYSS1000K相手に35%程度の勝率(レート-100)くらいが
驚きました。概ね中終盤で負けるものと思っていました。
このYSSは何年前のものでしょうか?
http://wdoor.c.u-tokyo.ac.jp/shogi/LATEST/html/current/2022-09-Yss1000k-nibanshibori-v4p.html
Yss1000kは2015年のYSSです。
評価関数は主に2駒関係をプロの棋譜からボナメソで学習させたものでサイズは763KBと比較的小さいです。
これをstockfish系の全幅探索で動かしています。定跡はプロ、アマの棋譜から2007年に作ったものを使ってます。
無印のYSSは選手権で優勝した2007年版で、評価関数は手作業、探索は人間の知識で前向き枝刈りしてます。
定跡は同じものを使ってます。
1コアで動いていて、これが当時の将棋倶楽部24で2300程度ではないか、という推定で (rate24) で表示される
将棋倶楽部24の換算レート、の基準になってます。
早急な回答ありがとうございます。
2015年のYSSというと選手権で決勝入りしていますよね。
アピール文に760KBの評価関数と書かれていますのでこれでしょうか。
意外に新しくて驚きました。
また,floodgateの将棋倶楽部24の換算レートは今こわれているみたいですね。
囲碁クエストで棚瀬さんがKataGoの1手1playout
(探索なしてニューラルネットのPolicyの最善をそのまま打つだけ)
を2022年の1月から動かしています。
9路. 2444点, 7段, http://wars.fm/go9#user/:katago1pbot
13路, 2915点,10段, http://wars.fm/go13#user/:katago1pbot
19路, 2770点, 9段, http://wars.fm/go19#user/:katago1pbot
人間のトップは下のレートなので、1手1playoutで13路、19路では人間より強いです。
人間のトップのレート
9路 2696点
13路 2814点
19路 2561点
囲碁クエストのランキング。Botは非表示。"spaceman" は大橋プロ7段です。
9路 http://wars.fm/go9#users/0
13路 http://wars.fm/go13#users/0
19路 http://wars.fm/go19#users/0
時間制限
9路 3分 + 1手 1秒追加
13路 5分 + 1手 3秒追加
19路 7分 + 1手 3秒追加
棚瀬さんの Katago1pBot を開始したツイート
https://twitter.com/tanaseY/status/1484012101211684866
棚瀬さんによると Katago1pBot には定石がなく、9路だと人間は必勝手順を見つけてしまうので
最初の数手は人間のよく打たれる手を使う定石を用いている、とのことです。
CGFオープンが10月8日(土)、9日(日)に開催されます。
今年は現地とオンラインの混合開催となります。
現地の参加が難しい方はオンラインでも構いません。
当日の対局の連絡などはSlack、Zoomで行います。
LeelaZeroやKataGoなどのオープンソースに独自の改良を加えたソフトでの参加も可能です。
またNNGSサーバを中断からの再開に対応させました。
Rubyスクリプト、CGF碁盤をお使いの方は最新版に更新をお願いします。
皆様のご参加をお待ちしております。
参加申し込み締め切り 2022年 10月 3日(月)
大会 2022年 10月 8日(土) 10:00-17:00 9路盤のみ
2022年 10月 9日(日) 9:30-16:00 19路盤のみ
会場: 電通大(建物は未定)、およびオンライン
CGFオープン2022、大会要綱
http://hp.vector.co.jp/authors/VA012620/cgf2022/cgf2022.html
現在の参加者予定リスト
http://hp.vector.co.jp/authors/VA012620/cgf2022/list2022.html
CGFオープン
http://hp.vector.co.jp/authors/VA012620/
現地の開催場所が電通大の東36号館(UEC Observatory)に決まりました。
こちらの地図の30番、大学会館(生協)の裏手、正門から入って3分ほどの場所にあります。
https://www.uec.ac.jp/about/profile/access/pdf/map.pdf
2022年4月に完成したばかりの施設です。
10月8日(土) 09:30
10月9日(日) 09:00
に現地は開場する予定です。
オンライン、現地、どちらでの参加も可能です。
10月8、9日に開催されるCGFオープンの申し込みは10月3日までです。
LeelaZeroやKataGoに改良を加えたものでも参加可能です。
参加費無料で賞品も出ます。現地(電通大)でもオンラインでの参加も可能です。
お気軽にご参加いただければ、と思います。
http://hp.vector.co.jp/authors/VA012620/
teacupの掲示板の過去ログに添付画像を追加してみました。
画像が投稿されたのは2010年からで、全部133枚です。
2021年が一番多いです。
過去ログ(画像を追加)
http://www.yss-aya.com/bbs_log/bbs_log.html
AIが絵を描いてくれる Midjourney というサービスがあるのですが
「将棋AIと囲碁AIが戦ってる絵」
(Scene of computer Shogi AI and computer Go AI fighting)
と入れて出てきたのが下です。
なんだかよく分からないですが雰囲気はいいですね。
チェスの知識は入ってるが将棋はなさそうな感じです。
discordの左のNEWCOMER ROOM 2 から newbies-92 を選んで
/imagine と入力した後 スペースを押すと prompt と出てくるのでそこで下のように入力しました
Scene of computer Shogi AI and computer Go AI fighting
話題のAI画像生成サービス「Midjourney」を使ってみた--「日なたの可愛い猫」を描いたら
https://japan.cnet.com/article/35191540/
dicordのリンク(招待画面が出ます)
https://discord.com/invite/midjourney
GCTの加納さんが公開されてるデータだけを使ってAobaZeroを学習させてみました。
最新のw4116と比べてGCTのデータで学習させた方が+105 ELO強い、という結果になりました。
対水匠5(7.50,1手40k)と1手100playoutでの勝率。1200局、互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
723-21-456 1200 (10-21-0)(s=586-593,0.497), 0.611(0.027)( 78) GCTで学習
543-18-639 1200 (12-18-1)(s=594-588,0.503), 0.460(0.028)( -27) w4116
hcpe3/selfplay_gct-???.hcpe3.xz の001から075までの15億局面(1,584,455,692局面)
を使っています。
実際はメモリに乗り切らなかったので、001-025, 026-050, 051-075 の3つに分け、
ミニバッチ256で全局面からランダムに256個選んで、80万回学習、を3回繰り返しました。
001-025 学習率は0.01 から 0.000002 まで cos annealing
026-050 学習率は0.01 から 0.001 まで cos annealing
051-075 学習率は0.001から 0.000002 まで cos annealing
80万*256*3 = 6億局面程度を学習。
任意の局面から最初の4手はランダムなようで使用していません。
また評価値がない局面(探索手が1手だけの局面)や、勝敗が決定していてノード数が50以下の局面も使っていません。
001-025 学習率は0.01 から 0.000002 まで cos annealing
で学習させたものはw4116と同程度の強さで、20blockで2億局面程度を学習、だと足りないようです。
GCTの学習に使用したデータセットを公開
https://tadaoyamaoka.hatenablog.com/entry/2021/05/06/223701
hcpe3をAobaZero形式に変換するコンバータ(若干修正)
https://github.com/kobanium/aobazero/tree/develop/learn/convert
下のように変換しました。
python3 ./hcpe3_to_csa.py --aoba --out_v --sort_visits selfplay_gct-051.hcpe3 dummy.csa >> selfplay_gct-051.csa
GCTのデータで学習させたweight
https://drive.google.com/drive/folders/1AX_vdpXm1TepgMyzVVZHIL_gxK8gT9PR?usp=sharing
xz形式を展開して下のようにすれば動きます。
bin/aobaz -p 800 -w ./20220816_185321_256x20b_ave_gct_051_075_iter_800000.txt
教師の差だけで結構あるんですね。
手元で少し試してみましたが読み抜け筋が多くあるようで
0から学習されたのかまだ粗削りな気がします。
昨年末の書籍で紹介されている教師をサンプル同様3周すると10ブロックなら概ね落ち着く感じです。
逆に言うと20ブロックはそれでも不足な印象です。
書籍側の方が深い探索の教師なので是非試してみて下さい。
ゼロからの学習です。1局面0.4回学習、という贅沢な使い方なので、もう少し学習が必要だったかもしれません。
読み抜けで気になったはのは
下の最初の図、角王手での素抜き(▲44角(77))がw4117は17番目(0.0023)、GCTでの学習では4番目(0.056)と
あまり改善しなかったのが意外でした。dlshogiだと1番目の候補になります。
2番目の▲86角(77)という絶妙手はw4117で37番目(0.0005)。GCTでの学習だと15番目(0.0007)、dlshogi(dr2)は7番目(3%)、
と向上してるもののまだ難しいようです。
書籍のデータでも一度試してみようと思います。
AobaZeroの素抜きの筋の見落とし
http://www.yss-aya.com/bbs_log/bbs2022.html#bbs25
書籍だと水匠3改とdlshogi with GCTの棋譜はhcpe3で保存されたようなのですが
ダウンロード可能なのはhcpe形式のみ、でしょうか?
強い将棋ソフトの創りかた
https://github.com/TadaoYamaoka/ShogiAIBook2
>>書籍だと水匠3改とdlshogi with GCTの棋譜はhcpe3で保存されたようなのですが
>>ダウンロード可能なのはhcpe形式のみ、でしょうか?
書籍読み直してみるとそのようですね。
学習用のスクリプトで読まれているhcpe形式のデータをウチでも流用して試しています。
現在のAobaZeroでは現在局面+過去5手前まで、合計6局面の駒の配置をNNの特徴入力としているのですが
これを現在局面のみ、にすると+26 ELO強い、という結果になりました。
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
762-26-412 1200 (14-26-0)(s=602-572,0.513), 0.646(0.027)( 104) GCTで学習(現在局面のみ)
723-21-456 1200 (10-21-0)(s=586-593,0.497), 0.611(0.027)( 78) GCTで学習(現在+過去5手前の局面)
543-18-639 1200 (12-18-1)(s=594-588,0.503), 0.460(0.028)( -27) w4116
学習は前回と同じ、GCTのデータを使い、同じように80万回学習を3回繰り返しました。学習率の変動も同じです。
ELO差が小さいので、誤差の影響も大きく、過去の局面は入れても入れなくても大差ない、が正解かもしれません。
囲碁だと直前の1手、はかなり大きな要素なのですが将棋だと影響小さいです。
直前の手の場所、だけでも入力した方が強くなりそうな気はするのですが。
実際は過去5手分のデータ(9x9 * (28 + 14 + 3)*5 = 18225個)は常に0、としてます。
GCTの学習データだと+105 ELO強い
http://www.yss-aya.com/bbs/patio.cgi?read=9&ukey=0
2年ほど前でしたか確認して報告した記憶があります。
ということで将棋では過去局面不要と考えています。
囲碁でもやってみたのがmarbleですが,シチョウ回避できていないのが本件か
別件かの区別もついていません。
人間が指す場合は、直前の手は相手の狙いの推測や
手の流れ、などで結構大きな情報だと思うのですが。
使ったhcpe3のデータが最初の4手はランダムで、以前の手の情報が怪しい、のも逆効果になってる原因の一つかもしれません。
marbleは直前手入ってないのですか。
最初にGNU Go相手にCNNのPolicyを試した論文でも直前の手なんてのは理論上不要、と
信念で使ってなかったのですが、直後にDeepMindが直前手を入れたので一致率が5%ぐらい上がってました。
シチョウは探索入れないとダメな気がします。
以前LeelaZeroに無意味そうなシチョウ逃げを絶対打たない、という手抜きの改良をしたのですが
+20Elo程度で、シチョウを逃げない棋譜を作って学習させないとほぼ効果ないようでした。
LZ that does not escape difficult ladder is slightly(54%) stronger
https://github.com/leela-zero/leela-zero/issues/2502
256x20bに以降して1年ほど棋譜を作成していましたが進歩が止まったので
棋譜生成を終了するそうです。
SAIはLeelaZeroをベースにコミの調整を可能にしたものです。
シチョウは探索してないので、LeelaZeroと同じようにたまにシチョウを間違えます。
Just suggestion: go to 40b or close...
https://github.com/sai-dev/sai/issues/148
SAI
http://sai.unich.it/
SAIが20bx256に移行して+350Elo
http://www.yss-aya.com/bbs_log/bbs2021.html#bbs31
SAIはELF v0に追いついたようです
http://www.yss-aya.com/bbs_log/bbs2021.html#bbs121
11月26日、27日にUEC杯が開催されます。
http://entcog.c.ooco.jp/entcog/new_uec/
電気通信大学での開催ですがオンラインでの参加も可能です。
来年の3月開催が日程の都合で難しく、次回は11月に開催されます(今年は2回になります)。
CGFオープンの翌月となりますが、皆様の参加をお待ちしています。
大会申し込みは10月1日からとなります。
大会申し込み締め切りは10月31日までとなっています。
KataGoやLeelaZeroを改良したものでの参加も可能です。
電通大(現地)とオンラインのハイブリッド開催となります。
よろしければぜひご参加下さい。
参加申し込みが11月5日まで延長されています。
現在の参加者は6か国、16チームとなっています。
日本 ... 9
中国 ... 3
フランス ... 1
韓国 ... 1
アメリカ ... 1
台湾 ... 1
某ハードウェアの負荷テストにAobaZeroを使わせて頂きました。
2080Ti用の設定のままですが,12900KとRTX3090で300強/h程度でした。
また,10980XEと3090x2で480/h程度でした。
後者のCPU負荷は50%程度ですがこれでもボトルネックなんでしょうか。
2GPUの性能いまいちですね・・・。
2080Tiの6枚刺しの時は
単一のautousiで6枚並列だと若干性能がでずに、下のようにautousiを3つ起動してました(ディレクトリを分けて)。
Device O0:28:85W O1:28:85W
Device O2:28:85W O3:28:85W
Device O4:28:85W O5:28:85W
・・・3並列を2つだったかも。記憶があいまいです。
2つディレクトリを作ってautousiを2つにすれば若干早いかもしれません。
CPUは8コア16スレッドで、8コア分(50%)使っているのでしたら
足は引っぱっていないと思います。
3090だと下の設定の方が少し速いと思います。
Device O-1:28:85W # 2080Ti
Device O-1:42:126W # 3090
Device O-1:42:126W # 3090
ウチの方でも試してみましたがCPUが弱いのかほとんど差がありませんでした。
HPだと合計 60650602 棋譜。現在のweight番号= w4157。
となっていますが、
click_me.batを起動しても
weight番号= w4157。
が自動で流れてこないみたいです。
確認いたしました。
5日の17時29分に作成するはずが、GPUの処理をするプロセスが一時的に増えた影響で
変換に失敗していました。
現在は落ちてくると思います。
ご指摘ありがとうございました。
対応ありがとうございます。
なんか番号がずれてます? 4158が降ってきました。
合計 60688946 棋譜。現在のweight番号= w4157。次は5.7時間後。貢献ありがとうございます!
w000000004158.txt
4157がサーバに上がったのが22:19分で40分後に
すぐに4158が作成されたので、4157で作成された棋譜は少ないと思います。
40351340 Oct 6 22:19 w000000004157.txt.xz
40351860 Oct 6 23:02 w000000004158.txt.xz
またw4160の生成失敗してます?
現在のweight番号= w4160
昨日、8日の23時に作成しようとして失敗しました。
先ほどw4160をサーバにアップしました。
ちょっと調子が悪いようで学習用の2080Tiでの棋譜生成を一時的に止めてみます。
ご指摘ありがとうございました。
コロナ禍の影響で、今年は現地、電通大東36号館とオンラインのハイブリッド行われました。
CGFオープンとしては初めて海外勢、台湾からのSayuriがオンラインで参加しました。
RayはGumbel AlphaZero方式で9路、19路ともにGPU2枚で200万棋譜程度を
自己対戦で作成して強化学習を行っていました。1手50playout程度で
学習が進むので個人でも何とかなる、とHCCLで発表されました。
9路
参加7チームに招待のGNU Goを加え、8チームの総当たりの結果(白黒入れ替え)、egが13勝0敗2引で優勝した。
9路の結果
2022年10月08日(土) 9路、10分切れ負け、中国ルール、コミ7.0目、於:電気通信大学東36号館+オンライン
Ray eg Enga Aya Sayu Deep Pyaq GNU 勝数 順位
Ray =0 == 11 11 11 11 11 11.5 2
eg 1= 11 11 1= 11 11 11 13 1
Engawa == 00 1= 01 11 11 11 9.5 3
Aya 00 00 =0 00 11 11 11 6.5 5
Sayuri 00 =0 01 11 11 11 11 9.5 3
DeepEsper 00 00 00 00 00 01 01 2 6
PyaqArgo 00 00 00 00 00 01 01 2 6
GNU Go 00 00 00 00 00 01 01 2 6
* "=1" は黒番で持碁、白番で勝ち、の意味。= は0.5勝計算。
* DeepEsper(白)-PyaqArgo(黒)はPyaqArgoがパスの後、石のある個所に打って反則負け。
* GNU Go(白)-PyaqArgo(黒)はPyaqArgoがパスの後、石のある個所に打って反則負け。
19路
参加6チームで総当たり5回戦を行った。
egが5-0で全勝優勝した。egは9路、19路ともに優勝した。於:電気通信大学東36号館+オンライン
19路結果
10月9日(日) 19路 30分切れ負け、日本ルール、コミ6.5目
Enga eg Aya Ray Sayu Pyaq Wins Rank
Engawa 0 1 1 1 1 4 2
eg 1 1 1 1 1 5 1
Aya 0 0 0 1 1 2 4
Ray 0 0 1 1 1 3 3
Sayuri 0 0 0 0 1 1 5
PyaqArgo 0 0 0 0 0 0 6
*対局の白黒は最初のコイントスで決めた。偶数Rの上位者を白、としている。
詳細な結果や棋譜はこちらにあります。
http://hp.vector.co.jp/authors/VA012620/cgf2022/result2022.html
http://hp.vector.co.jp/authors/VA012620/cgf2022/result2022.html
egはPDFと表は12勝2分になっていて、HTMLは13勝1敗になっていました。
ちなみに今回のegは前回のUEC杯と同じものをつかっていてウェイトはGitHubに置いてます。
https://github.com/zakki/KataGo/releases/tag/v1.10.0
ありがとうございます。PDFが正しいですね。
Rayの数値も正しくなかったのでHTMLを修正しました。
「強い将棋ソフトの創りかた」のデータでAobaZeroを学習させてみました。
棋譜の棋力としては書籍の方が強いと思うのですが、Policyの分布がない最善手のみのせいか
GCTのPolicy分布あり、より50 Eloほど弱いものしか出来ませんでした。
学習率はCosine Annealingで下げています。
対水匠5(7.50,1手40k)と1手100playoutでの勝率。1200局、互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
762-26-412 1200 (14-26-0)(s=602-572,0.513), 0.646(0.027)( 104) GCTで学習(現在局面のみ) 240万回(6億1千万局面)学習
651-32-517 1200 ( 8-32-0)(s=583-585,0.499), 0.556(0.028)( 38) 書籍 (現在局面のみ) 240万回(6億1千万局面)学習
682-25-493 1200 (11-25-0)(s=626-549,0.533), 0.579(0.028)( 55) 書籍 (現在局面のみ) さらに追加で80万回(2億局面)学習。
学習回数が足りないかと思い、さらに80万学習させると+20ほど伸びています。
GCTの方も学習回数を増やせばもう少し伸びると思います。
書籍「強い将棋ソフトの創りかた」で紹介されているhcpe形式のデータ、下の3つで
合計 266,998,238 局面(2億6千万局面) だけを使って学習させました。
dlshogi_with_gct-001.csa (001から024)
suisho3kai-001.csa (001から024)
floodgate_2019-2021_r3500-001.csa (001から024)
hcpe形式だと最善の手1手のみ、局面単位で、過去の手順が不明なので
AobaZeroの入力も現在局面のみ、にしています。
思ったより伸びないのですね。
現在floodgateに投入されているモデルでしょうか?
Policy分布は必須のようですね。
うちでもそろそろ入れてみようかと考えています。
AobaZeroに関しては以前から気になっていたのがロス関数なのですが
以前と変わりなければValueに関してAlphaZeroと同じく平均二乗誤差ですよね。
これが高い勝率の部分の精度が低い理由だと思っています。
余裕あればクロスエントロピーロスをお試しください。
Policyが高精度でもValueが悪いと探索が酷いことになります。
RTX3060表記のものでしたら私ではないです。
ValueのロスにCrossEntropyも一度試してみようと思います。
第3回世界将棋AI電竜戦本戦
12月3日〜12月4日にかけて開催します!
細かい情報や、エントリーについてはこちらから!
https://denryu-sen.jp/
KataGoの1手1playout(Policyのみ)に99%以上勝つ手法、として論文が出ています。
Adversarial Policies Beat Professional-Level Go AIs
https://arxiv.org/abs/2211.00241
ただざっと見た感じだと死石を全部打ち上げないといけない Tromp-Taylor ルール(CGOSのルールとほぼ同じ)
で打たせたとき、死石を完全に打ち上げずにパスしたから勝ち、と主張してるだけのようで
ちょっとどうなの?という内容でした。
私が未だに愛読している「Cによるアルゴリズム辞典」の著者の奥村さんのTwitterで知りました。
https://twitter.com/h_okumura/status/1587619096501182464
最初に棋譜を見たときはKataGoと攻撃側が逆だと思ってて何か画期的な攻撃方法あるのかと期待して読んじゃいました。
AI技術一般の話として超人的AIも無制限に信頼できるわけじゃないっていう主張はわかるんですが、単に囲碁としてみるとAI同士の対局やLizzieでの解析で探索数増やしていく途端に評価が変わるのみてたり、LeelaZeroのシチョウとかGAQZの終局とかKataGoの飛刀見てたりすると、極端に少ない探索数ならそういうこともあるんだろうなくらいに…
打ち上げる必要があるかどうかはKataGoのニューラルネットワークの入力に含まれない
打ち上げるかどうかは探索部からパスが返ってきたときにルール設定に従ってプログラム的にパス以外の手を打つ
打ち上げる時にパスの代わりに選ばれるのは、pass-aliveな自分の石に隣接する相手の石のダメを詰める手
という実装なので、
普通のルール下ではパス-パスになるような局面でPNがパスを返しやすく
まだ静的に判定できるような眼がない局面で
探索数が少なくパスが返る局面だと
Tromp-Taylor ルールに設定されててもパスを返してしまうっていう微妙な穴があるみたいです。
KataGoのパス実装はこういう感じなのですか。ありがとうございます。
1行か数行加えれば(自陣のownershipに石があればパスしない、とか)対策できそうな
穴ではありそうですね。
CGOSでは下の設定で動かしてますが(tromp-taylorは2子以上の自殺がOKなので、それを防止。kata1_b*s*v* )
50visit版とかでは騙されて負けるケースもあるかもしれません。
#rules = tromp-taylor
koRule = POSITIONAL
scoringRule = AREA
taxRule = NONE
multiStoneSuicideLegal = false
hasButton = false
whiteHandicapBonus = 0
論文とサイトが更新されたようで、大差で負けた状態で死んだ石との攻め合いの判断間違う局面に誘導するようになってて、パスパス狙いより面白い棋譜になってました。
https://goattack.alignmentfund.org/game-analysis#contents
https://goattack.alignmentfund.org/pdfs/go_attack_paper.pdf
めったに出てこない盤の中央での4目、5目中手で殺す場合の手数計算が
KataGoも苦手?なんでしょうか。
モンテカルロのplayoutもこの手の死活の手数を計算するのが苦手でしたけど。
盤端だと大中小中(5目中手と4目中手の攻め合いは大きい5目中手が内ダメを独占する)も対応していた気はするのですが。
この欠陥をAIが自力で見つけたならすごいですね。
追記:
lightvectorさんの投稿によると盤の中央に出現する中手の認識を改善するため、
手作業で数時間かけて、この手のサンプル局面を学習初期局面集に追加したそうです。全体の0.08%程度とものすごく少ないですが。
https://discord.com/channels/417022162348802048/583775968804732928/1052949043069845536
追加した局面例
https://katagotraining.org/sgfplayer/training-games/34889642/
日経新聞の記事にまでなっていますね。
[FT]人間が囲碁AIに勝利、弱点発見 深層学習の欠陥示唆
https://www.nikkei.com/article/DGXZQOCB210NG0R20C23A2000000/
大橋さんのツイートによると絶芸も同じ弱点があったようで、日本の「みゅう」さんが勝たれています。簡単に?誘導できるものなのですね。
さっきつぶやいたAI殺しの手法を使って早速勝ってるプロゲーマーがここに。
https://twitter.com/ohashihirofumi/status/1627710047068508161
最強の囲碁AIに圧勝する人物が登場、AIの弱点を突いて人類が勝利したと話題に
https://gigazine.net/news/20230220-go-human-victory/
Man beats machine at Go in human victory over AI
https://www.ft.com/content/175e5314-a7f7-4741-a786-273219f433a1
HCCL研究会で大橋さんから詳しい解説がありました。
実際にKataGoの18bを相手に勝つ動画が公開されています。
へぇー、という感じで面白いです。
【囲碁】人類の逆襲〜AIの弱点が発見された〜プロ棋士が解説つきで実演〜
https://www.youtube.com/watch?v=dSLs9ZDNL1A
どうやら石が大きく一周すると眼がなくても2眼で活きてる、と勘違いするようです。
1周を1眼と誤認識してるわけではなく、0眼1周でも2眼で活きてると錯覚するようです。
欠け眼で1周して活きてる形とは関係なさそうです。
実際に殺す手順は難しく、上の動画も10回失敗した、とのことです。
芝野龍之介さんはこの手法で倒すのが上手く、野狐で絶芸やKataGoクローンをこの手法で倒しまくり、
絶芸は負けた後、1週間して再登場したものの、また龍之介さんに一発で負けて
1か月以上経った今も消えたまま、だそうです。Golaxyも同じ弱点があるそうで
強化学習系は全部そうっぽいです。
最初は囲まれた中で5目中手とかになると手数計算を間違うのか、と思ったら
手数は関係なさそう、とのことでした
元論文は何度か修正され、2月18日のv3だと
パスで勝つ弱点の発見には1GPU(V100)で20日、一周の弱点には2000日/1GPUが
かかったそうです。KataGoの今までの学習棋譜の生成には15000日/1GPUだそうで、7分の1程度、
という相当なリソースが必要のようです。
Adversarial Policies Beat Superhuman Go AIs
https://arxiv.org/abs/2211.00241
龍之介さんのツイート
龍ちゃん 囲碁棋士&エンジニア@spicyspyigo
中国の囲碁AI開発者が私に教えてくれた話を私なりに解釈したものをツイートしておきます。
https://twitter.com/spicyspyigo/status/1630998446265241600
大橋さんの動画が日経の記事になっています。
囲碁AI、「論理的思考」に盲点 深層学習の弱点示す
https://www.nikkei.com/article/DGXZQOUD1580R0V10C23A5000000/
>「ドーナツ戦法」は人間同士の対局では通用しない特殊な手法で、人間が囲碁の実力で再び機械を上回ったとは言いがたい。
> 大橋七段や中国のAI「絶芸」に勝利した芝野龍之介二段は「囲碁とはちがうゲーム」と口をそろえる。
ドーナツ戦法、というネーミングがいいですね!
まだ絶芸は野狐に復活してないんでしょうか。芝野龍之介さん、恐るべし・・・。
1手のplayout回数を倍の1600に増やしても棋力に変化はなく、緩やかに下がっている傾向にありました。
そこで、直近の1600playoutの棋譜、216万棋譜に対して、学習率を0.001から0.000002までcos annealingで
変化させて学習しなおしてみました。
同時に、30手までの棋譜や、40手以内に投了した棋譜の学習回数を減らしてみました。
結果 +64 ELOほど強いweightができたので、
w4177からこの重みに切り替えて、学習も序盤の手の回数を減らすようにしました。
これにより、学習されない局面が増えるので(29%ほどが使われない)、平均手数が85.1手で、1局面を1回、学習するような
割合に変更しました。学習回数は今までの約半分になります。
weightが作られるタイミングは30000棋譜ごと、と今まで(34285棋譜ごと)より、やや早いです(100万棋譜のreplay bufferに33世代含まれる)。
棋力の向上が学習率を大きくし直して学習させたせいか、playout数が倍になったせいか、序盤の学習回数を減らしたせいか、
などは不明です。
具体的にはミニバッチ128を100万棋譜の約8510万局面からランダムに選んでるのですが
40手までで投了してる棋譜は4分の1、30手までは、0手目は20/3000、29手目は2999/3000 を
学習するようにしています。
if ( m <= 40 && (rand() % 4) != 0 ) cancel
if ( n < 30 && (rand() % 3000) > exp(8.0*(30-n)/30) ) cancel
対水匠5(7.50,1手40k)と1手100playoutでの勝率。1200局、互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
661- 9-530 1200 (19- 9-1)(s=595-596,0.500), 0.555(0.028)( 38) 序盤や40手以内の学習回数を減らす
545-19-636 1200 (18-18-1)(s=602-579,0.510), 0.462(0.028)( -26) w4176 (最新)
投了なし、とありの棋譜で強さを測定したことはないのですが、
おそらくプラスになってるのではないか、と思います。
勝率1%以下で延々指す局面はvalueもそれほど意味ある情報でなく
着手も厳しい手を指さない(Policyのトップを選ぶだけ)が多いです。
現在も投了しない棋譜は全体の10%で生成していて、
投了が間違う割合(投了の閾値、現在は勝率25%を下回った後、逆転勝ち)が
5%未満になるように閾値を自動調整しています。
つまり95%の投了は正しい、です。
投了は主に棋譜生成時間の短縮が狙いではあるのですが。
AobaZeroはNNを呼ぶと全候補手の着手確率(Policy)が得られます。
かなり正確なのですが、αβに比べて絶妙手を読み抜けることも多いです。
そこで、水匠5を少し考えさせて、その最善手の着手確率が低い場合は
補正して読み抜けを減らす実験をしてみました。
具体的には初手で▲26歩の確率が0.56で、▲76歩が0.07の場合、
水匠5の1手10kの最善手が▲76歩なら、▲76歩の着手確率は最大の▲26歩(0.56)の3分の1、
0.56/3 = 0.18 にしています。これだけ確率を上げると読み抜けることはまずなくなります。
実験してみると、水匠5が1手1kだと、さすがに最善手の精度が悪すぎるのか
入れた方が弱くなります。
1手10kで+40 ELO程度強くなり、1手100kでも+50 ELO程度、と、この辺りが上限のようです。
そもそも1手40kの水匠5相手の結果なので、それ以上の
(実際は100kだと100k x 100playoutで250倍の計算時間)
計算時間をかけても、AobaZeroの評価関数と読みの深さではこの程度が上限になるようです。
全ノード作成時に毎回、USIで呼ぶ実装です。
https://github.com/kobanium/aobazero/blob/develop/src/usi-engine/bona/pipe.cpp#L293
個人的には読み抜けを減らしたら+100ぐらい上がるのでは、と思ったのですが
それほど効果はないようです。
例えば下の2番目の▲86角、という絶妙手を1手100playoutでも見つけてくれます。
AobaZeroの素抜きの筋の見落とし
http://www.yss-aya.com/bbs_log/bbs2022.html#bbs25
対水匠5(7.50,1手40k)と1手100playoutでの勝率。w4176。互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
545-19-636 1200 (18-18-1)(s=602-579,0.510), 0.462(0.028)( -26) 水匠5なし。基準。
173- 6-221 400 ( 8- 6-1)(s=202-192,0.513), 0.440(0.048)( -41) 水匠5 1手1k
207- 8-185 400 ( 6- 8-0)(s=203-189,0.518), 0.527(0.048)( 19) 水匠5 1手10k
211- 6-183 400 ( 9- 6-0)(s=208-186,0.528), 0.535(0.049)( 24) 水匠5 1手100k
さらに1手800playoutで実験してみたのですが、やはり+50ELO程度の上昇が限界のようでした。
対水匠5(7.50,1手250k)と1手800playoutでの勝率。w4176。互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO ( + )
506-24-670 1200 (46-23-2)(s=565-611,0.480), 0.432(0.028)( -47)( ) 水匠5なし。基準。
533-17-650 1200 (54-17-1)(s=597-586,0.505), 0.451(0.028)( -33)(+14) 水匠5 1手1k
556-18-626 1200 (57-18-2)(s=578-604,0.489), 0.471(0.028)( -20)(+23) 水匠5 1手10k
605-17-578 1200 (57-17-1)(s=595-588,0.503), 0.511(0.028)( 7)(+54) 水匠5 1手100k 7日間かかった
11月22日、23日、24日にかけてComputers and Games 2022(ゲームの論文発表会)が行われます。
発表はZoomで行われて無料で視聴が可能です(URLの取得には登録が必要)。
4件の招待講演と15件の発表があります。
招待講演には「天鳳十段を達成した麻雀AI Suphxの講演」もあります。
全部英語ですが、ご興味がある方がぜひご視聴下さい。
開始時間が24日を除いてちょっと日本には厳しいのですが
11月23日 深夜 02:50-08:00 in Tokyo (JST)
11月24日 14:00-17:40 in Tokyo (JST)
11月25日 23:00-02:00 in Tokyo (JST)
招待講演 4件
Murray Campbell (IBM T.J. Watson) DeepBlueを作ったメンバーの一人。チェスが強い。
The Evolving Role of Games in AI
Matt Ginsberg (Google X) クロスワードパズルを解くプログラム(Dr.Fill)について
What I Learned from Dr.Fill
Tao Qin (Microsoft Research AI4Science) 天鳳十段を達成した麻雀AI Suphxの講演
Deep Reinforcement Learning for Game Playing and Testing
元になった2019年の論文。
Suphx: Mastering Mahjong with Deep Reinforcement Learning
https://arxiv.org/abs/2003.13590
麻雀の強い人がSuphxの打ち方を解説された本。
世界最強麻雀AI Suphxの衝撃 2020/7/13
https://www.amazon.co.jp/gp/product/4839973628
Olivier Teytaud (Meta AI Research) 初期のモンテカルロ囲碁のMoGoの作者
AI and Games: New Directions
発表15件
4895 Xavier Blanvillain. Oware is Strongly Solved
5845 Todd Neller and Taylor Neller. FairKalah: Towards Fair Mancala Play
4010 Owen Randall, Ting-Han Wei, Ryan Hayward and Martin Mueller. Improving Search in Go Using Bounded Static Safety
6388 Yifan He and Abdallah Saffidine. QBF solving using Best First Search
5628 Tristan Cazenave. Batch Monte Carlo Tree Search
8996 Jos Uiterwijk and Lianne Hufkens. Solving Impartial SET using Knowledge and Combinatorial Game Theory
3778 Cameron Browne. Which Rules for Mu Torere?
5135 Stefan Edelkamp. Improving Computer Play in Skat with Hope Cards
6011 Matthew Stephenson, Dennis J. N. J. Soemers, Eric Piette and Cameron Browne. Measuring Board Game Distance
6383 Daniel Collins. Solving Chainmail Jousting
6430 Nathan Sturtevant. Chinese Checkers Bitboards for Move Generation and Ranking Using Bitboards and BMI2 pext and pdep Instructions
2958 Kyle Sacks and Brayden Hollis. An Algorithm for Multiplayer Games Exploiting Opponents Interactions with the Player
7302 Thijs Laarhoven and Aditya Ponukumati. Human and Computer Decision-Making in Chess with Applications to Online Cheat Detection
8029 Nathan Lervold, Gilbert Peterson and David King. Incentivizing Information Gain in Hidden Information Multi-Action Games
3876 Gaspard de Batz de Trenquelleon, Ahmed Choukarah, Milo Roucairol, Mauel Addoum and Tristan Cazenave. Procedural Generation of Rush Hour Levels
Computers and Games 2022
https://icga.org/?page_id=3434
詳細な予定表
https://icga.org/wp-content/uploads/2022/11/CG2022_Schedule.pdf
GPWで「将棋の棋譜から対局者名を深層学習で推測」という発表をしました。
アマだと99%、プロは57%を20棋譜(学習80棋譜)で当てることができました。
チェスでもそうだったのですが、アマの棋譜(ネット将棋の棋譜)は
簡単に個人が識別できるのに驚きました。
「将棋の棋譜から対局者名を深層学習で推測」
https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=222009&item_no=1&page_id=13&block_id=8
GPWでの資料
http://www.yss-aya.com/20221119gpw_name.pdf
他にGPWで面白かった将棋関連の発表は
・順位戦のA級だけはAIの影響で棋力が上がってる。
・AIとの一致率は、順位戦の棋譜だと50年前から単調に増加してる
などが分かった、
「将棋AIがプロ棋士の棋譜に与えた影響 ―定量的分析からの考察― 」
https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=222008&item_no=1&page_id=13&block_id=8
・勝った将棋にgoodが押されやすい
・待った、をして勝ってもgoodは押されにくい
・惜しくもポスター優秀賞で次点
などの、山田元気さんの、
「きのあ将棋囲碁サイト good,bad 投稿分析とAIについて」
https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=222012&item_no=1&page_id=13&block_id=8
・100分の1のミニバッチでATARIゲームで性能低下が起きない手法
Policyの分布の違いとかTD誤差でreplay bufferから選ぶ手の確率を変える手法が色々ある、と
勉強になった、
「Surprise とOn-policyness に基づく優先度による省メモリな強化学習」
https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=222020&item_no=1&page_id=13&block_id=8
KataGoのPolicy surprize weight もそうですけど、AobaZeroもこういうった指標でリプレイバッファから
サンプルを選ぶ確率を変えるのを試してみようと思います。
今までの棋譜生成の段階で、RawなNNの出力(Policy、Value)も棋譜に保存しておけばよかった、と思いました。
下の通り、上位8チーム、CrazyStoneまでが
2日目の決勝総当たりに進みました。
9位から16位までは2日目のBリーグに進みます。
大橋拓文七段と牛栄子扇興杯さんによる解説会が行われています。
大橋拓文七段と牛栄子扇興杯による解説会
https://youtu.be/BWPvvkCoyKI
棋譜の動画中継
https://www.youtube.com/watch?v=H3Zb_Urj5rw&feature=youtu.be
棋譜のSGF中継
http://www.yss-aya.com/uec14/
優勝は中国のSymplect Go。7戦全勝でした。
2位はアメリカのKataGoで3位は中国のWUWEIGO。
優勝のSymplectGoの作者は中国の高校生、とのことです。
Bリーグは台湾のSayuriが優勝しました。
UEC杯
http://entcog.c.ooco.jp/entcog/new_uec/

山下さんの掲示板に久方ぶりにおじゃまします。
大渡さんが記事の募集をしているようです!
https://twitter.com/kohto_ai/status/1597186867472265222
↓転載
強化学習Advent Calender 2022、誰も登録してくれないと大渡が25日間続けて強化学習で思ったことを書き連ねるだけにマジでなるので登録してください!????
将棋AIと囲碁AIの人間に与えた傾向についてですが、囲碁でも将棋でも同じような傾向があるのですね。
人智を超えた将棋AIがプロ棋士に与える影響に関する研究〜定量的分析からの考察〜
https://ipsj.ixsq.nii.ac.jp/ej/index.php?active_action=repository_view_main_item_detail&page_id=13&block_id=8&item_id=211493&item_no=1
AlphaGoが登場して以来囲碁棋士の能力は30%も向上したとのこと
https://twitter.com/gijigae/status/1597907335187697664
floodgateは12月3日の夜から週明けまで停止、とのことです。
[Shogi-server/Floodgateのお知らせ]
停電のため、今夜(12月3日夜)より停止予定です。復旧は週明けとなる見込みです。
午後5:56 2022年12月3日
https://twitter.com/daigog/status/1598964395182559232
12月6日の18時から稼働していたようです。
復旧ありがとうございました。
https://twitter.com/daigog/status/1600140383690063877
daigo@daigog 9時間
> 動的コンテンツを含め復旧しました。ご協力ありがとうございます。
電竜戦は12月3日、4日にネット上で予選、本選が行われ
2日目のA級10名総当たりの結果水匠が優勝、2位、3位がdlshogiでした。
1位 水匠 15.6勝-2.4敗
2位 dlshogi with HEROZ 30b 15.0勝-3.0敗
3位 dlshogi with HEROZ 20b 13.0勝-5.0敗
個人的に印象的だったのは人間+AIの「あらきっぺ」さんがdlshogiに勝って7位だったことです。
第3回電竜戦【A級】 5回裏▲あらきっぺ-△dlshogi with HEROZ 30b
https://denryu-sen.jp/denryusen/dr3_production/dist/#/dr3prd+dr3prda-5-bottom_arakippe_dlshogi30b-600-2F+arakippe+dlshogi30b+20221204151531
あらきっぺさんの感想ツイート
> やったぜ!!
> dlshogi に勝ちました!
https://twitter.com/burstlinker0828/status/1599292437146767361
たややんの優勝ツイート
> 5月の大会で敗退してから、DL系にNNUE系でいい勝負をするにはどういう戦略があるかを考えた成果が出ましたので嬉しいです。
https://twitter.com/tayayan_ts/status/1599399725165604864
AobaZeroは予選23位でB級リーグに回り、18人総当たりのB級で8位でした。
希望者の上位16名に得られる「第1回マイナビニュース杯電竜戦統一ハードウェア戦」の参加資格が
ぎりぎり得られたようです。
第3回電竜戦
https://denryu-sen.jp/denryusen/dr3_production/dr1_live.php
準備の方よろしくお願いします。
詳しくは電竜戦公式Slackで専用チャンネルを開いています。
今朝の04:12から08:20までAobaZeroの棋譜受信サーバが停止していました。
現在は動作しています。
ご迷惑をおかけしてすみません。
原因は /var/log/syslog を見るとメモリ不足でOOM Killerに殺されたことでした。
9分前に「fwupd metadata and update」のアップデートが入っていたのでこれが原因かもしれません。
2Gのメモリのうち、70%近くを消費するかなりでかいサーバですが
今までに落ちることはなかったので原因は不明です。
とりあえずapache2は停止させておきました。
2023年1月11日の11時38分から13時20分まで停止していました。
原因は同じくOOM Killerです。
ちょうど1か月ぶりで、4分前に
Jan 11 11:34:34 arena2 systemd[1]: Starting Daily apt download activities...
が動いていたのですが原因はよく分かりません。
AobaZeroは未展開のノードに来たらそこでNNを呼んで、そのValueを上に返しています。
これを未展開のノードでもう1手深く読んで(Policyの最善手で1手進める)、そのValueを上に返す、
ようにしたら+75 ELO強くなりました。
これを2手先にしてもあまり変わらなかったです。
強くはなりますが、常に1手先で評価、だと100playoutで倍の200回NNを評価する必要があるので、
単純に200playoutにしたときの向上(+128 ELO)に比べたら小さいです。
Policyの最善が軽いNNUEとかで低コストで求められるなら、同じplayout回数で少し強くできそうです。
・・・、と思ったのですが結局正しいPolicyは必要なのでNNUEではダメですね。
あと、1手深いノードでも常に3手詰は調べてるのでこの効果もあると思います。
もともとは王手を逃げる手が1手だけの時は無条件に1手先で評価、を試していました。
これも+10 ELO程度効果があるようです。
王手の局面では全部1手先で評価、も計算時間は1.1〜1.4倍くらいかかりますが+25 ELO程度強くなるようです。
昔、GNU Goの(例えば)10手の候補手に対して、マシンを10台用意して、
GNU Goの最善手で16手先まで先読みさせて(16倍時間がかかる)5子置かせて70%勝った、
とにかく深く読めばいい? SlugGo を思い出します。
直線的に16手先を読むSlugGo
http://www.yss-aya.com/bbs_log/bk2004-5.html#bbs301
対水匠5(7.50,1手40k)と1手100playoutでの勝率。w4195。互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
1227-39-1134 2400 (41-39-1)(s=1252-1109,0.530), 0.519(0.020)( 13) 基準
1263-36-1101 2400 (40-36-1)(s=1163-1201,0.492), 0.534(0.020)( 23) 王手を逃げる手が1手だけなら1手先で評価
1318-30-1052 2400 (51-29-2)(s=1180-1190,0.498), 0.555(0.020)( 38) すべての王手で1手先で評価
747-20- 446 1213 (20-20-1)(s= 598- 595,0.501), 0.624(0.027)( 88) 常に1手先で評価
803-24- 500 1327 (29-24-0)(s= 692- 611,0.531), 0.614(0.026)( 80) 常に2手先で評価
1048-20- 459 1527 (32-19-0)(s= 746- 761,0.495), 0.693(0.023)( 141) 基準 1手200playout
今までは2年前の学習データしか公開されていませんでしたが、
現在学習中のkata1のSGFと学習用のデータも公開されています。
https://katagoarchive.org/
Finally made available in bulk the new training games and data from distributed training.
https://discord.com/channels/417022162348802048/583775968804732928/1054630352041287780
日本棋院からAndroid、iPhone用の無料で囲碁が学べるアプリ「囲碁であそぼ!」がリリースされています。
監修に大橋拓文プロの名前もあったのでさっそく遊んでみました。
日本全国を回りながらルールを覚えていく感じのようです。
音楽と絵とか楽しい作りになってます。
(c)にRemiさんの名前も入ってるのですが、多分データ構造だけ、とか
そんな感じっぽいです(超初心者向きなので)。
>こちら、日本棋院から新感覚囲碁入門アプリがリリースされました?
>日本全国を旅しながら楽しく囲碁を覚えられます?
>やってみてね??
https://twitter.com/ohashihirofumi/status/1605120358587068416
開発元のアンバランス社のコーポレートサイトを見るとCrazy Zeroに人間の棋譜をフィードバックすることでレーティングに応じた人間らしい打ち筋を実現している旨の記述がありますので、AI面でも関わっているのかもしれません
https://www.unbalance.co.jp/corporate/service/
囲碁ファンの宮上光弘さんの寄付でこのアプリは作られたそうです。
実業家、囲碁棋士とタッグで本格アプリ 人気回復めざし開発費全額負担、無料で利用可
https://www.asahi.com/articles/DA3S15626082.html
まさみつさんのツイッター経由だと無料で読むことができます。
https://twitter.com/igokyoto/status/1653097747996872707
> 朝日新聞、有料記事のプレゼント機能というのができてたんですね。
KataGoでcPUCTの値を評価値の分散に変える手法が紹介されてたので
AobaZeroでも試してみました。
評価値の変動が小さいならcPUCTを小さく、大きいなら大きくする手法です。
1手100playoutだと+30 ELOぐらい効果がありそうなのですが、1手800playoutだと
効果が下がるようでplayoutが増えるほど変動を小さくしています。
Dynamic Variance-Scaled cPUCT
https://github.com/lightvector/KataGo/blob/master/docs/KataGoMethods.md#dynamic-variance-scaled-cpuct
AobaZeroでの実装
https://github.com/kobanium/aobazero/blob/release/src/usi-engine/bona/ysszero.cpp#L1766
この他に王手で逃げる手が1手の時はその局面を評価せずに1手進めて評価、も少し効果があるようなので採用してます。
これら2つで、1手100playoutだと+40 ELO、1手800playoutだと+25 ELO程度強くなってます。
棋譜の生成は1手平均1600なので、もう少し効果は小さいかもしれません。
他に棋譜に保存する情報に、その局面でのNNのValueとPolicyの値を含めました。
+7776FU,'v=0.557,r=0.555,1900,2726FU,744n,7776FU,395j,6978KI,329k, ...
例えば上ならば探索後の(自分から見た)勝率が0.557,この局面のNNのValueは0.555、合計1900playoutを実行、
▲26歩(27)の試行回数は744回、この手のPolicyは0.189 (n)、▲76歩(77)の試行回数は395回、Policyは0.110 (j)
Policyの値はA-Z,a-z の52段階に圧縮されています。下の表のように0.001から1.144倍づつ増える数に
一番近いもの、となっています。なお、実際はRootのPolicyにはディリクレノイズが入るのですが
保存されてる数値はノイズが入る前、のものです。
さらに、この数値はNNの出力そのもの、でなく、温度1.8でPolicyが小さい手も探索しやすくした変換した後の値です。
https://github.com/kobanium/aobazero/blob/release/src/usi-engine/bona/ysszero.cpp#L1624
for (i=0;i<52;i++) {
double k = 1.144;
double min = 0.001;
double p = pow(k,i) * min;
int c = 'A' + i + (i >= 26)*6;
PRT("%2d:%c:p=%f\n",i,c,p);
}
61940158番目の棋譜から、このフォーマットになっています。
これらの情報は学習させる局面の確率を変える実験用です。
対水匠5(7.50,1手40k(250k))と1手100playout(800 playout)の勝率。w4195。互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
1227-39-1134 2400 (41-39-1)(s=1252-1109,0.530), 0.519(0.020)( 13) 1手100 playout 基準
1364-37- 999 2400 (54-37-5)(s=1166-1197,0.493), 0.576(0.020)( 53) 1手100 playout 動的cPUCT + 王逃げ1手、を延長
1234-36-1130 2400 (86-36-6)(s=1207-1157,0.511), 0.522(0.020)( 15) 1手800 playout 基準
1316-46-1038 2400 (88-44-4)(s=1188-1166,0.505), 0.558(0.020)( 40) 1手800 playout 動的cPUCT + 王逃げ1手、を延長
0:A:0.001000
1:B:0.001144
2:C:0.001309
3:D:0.001497
4:E:0.001713
5:F:0.001959
6:G:0.002242
7:H:0.002564
8:I:0.002934
9:J:0.003356
10:K:0.003839
11:L:0.004392
12:M:0.005025
13:N:0.005748
14:O:0.006576
15:P:0.007523
16:Q:0.008606
17:R:0.009846
18:S:0.011263
19:T:0.012885
20:U:0.014741
21:V:0.016863
22:W:0.019292
23:X:0.022070
24:Y:0.025248
25:Z:0.028884
26:a:0.033043
27:b:0.037801
28:c:0.043244
29:d:0.049471
30:e:0.056595
31:f:0.064745
32:g:0.074068
33:h:0.084734
34:i:0.096936
35:j:0.110895
36:k:0.126864
37:l:0.145132
38:m:0.166031
39:n:0.189939
40:o:0.217291
41:p:0.248580
42:q:0.284376
43:r:0.325326
44:s:0.372173
45:t:0.425766
46:u:0.487076
47:v:0.557215
48:w:0.637454
49:x:0.729248
50:y:0.834260
51:z:0.954393
棋譜の最初の情報ですが、
'no000061982092 12/23/22
'w 4201 (crc64: fd5ffb620756df3), autousi 3.7, usi-engine 39, no-resign
'-q -r 0.0 -p 6400 -kldgain 0.00000075 -n -m 30 -w ./weight-save/w000000004200.txt -e 0, average_winrate 0.565
2022年12月23日に作成された61982092番目の棋譜でw4201での自己対戦です。
autousi、usi-engineのバージョンは3.7と39、no-resign は10棋譜に1棋譜の割合で登場しますが
投了禁止で最後まで指す、という意味です。
-q は余計な情報を出力しない。
-r 0.0 は投了しない(ただし投了はautousiが行う)
-p 6400 は基本1手6400playout
-kldgain 0.00000075 は100playoutごとのKLDgainがこの値以下なら打ち切る、訪問回数の分布に変化がないなら打ち切ります。平均1568playout程度になります。
-n はRootにディリクレノイズを与える
-m 30 は30手目までは訪問回数の分布でランダムに選ぶ
-w ./weight-save/w000000004200.txt はaobazを起動したときはw4200(途中でweightは更新されて現在はw4201)
-e 0 はメモリ共有で局面の情報をautousiに送り、NNの計算をミニバッチにして計算
average_winrate 0.565 は現在の先手勝率
%TORYO,'autousi,resign-th=0.250000,v=0.239,r=0.326,4013,8676HI,1982m,2288UM,1589r, ...
棋譜の最後に登場するこれは、autousiが勝率0.250を下回ったので強制投了した、という意味です。
この投了の閾値は投了のミスが5%以下になるように自動調整されています。つまり95%の投了は正しい、です。
ハードを統一した電竜戦の上位の希望者16チームによる総当たり戦が
今夜、22日の20時から開幕するそうです。
解説は勝又さんの予定とのこと。
参加者は事前にWindowsバイナリを送付する形式です。
途中でバイナリの変更は出来ません。
2台の同じ性能のマシンを使って全240局を行う、とのことです。
16チームの総当たりで16*15/2=120局、先後も入れ替えて倍の240局です。
1日8局として30日かかる予定、とのことです。
1局終了後、3分待ってから次が自動的に始まる、とのことです。
1日8局、かと思ったのですが、ぶっ通しで連続で行うようですね。
240時間、10日程度で終わるのかも。
現在の対局状況
https://denryu-sen.jp/denryusen/dr3_hardware1/match_live.php?gamename=hard1y
第1回 マイナビニュース杯電竜戦ハードウェア統一戦
https://denryu-sen.jp/hd1/index.html
【2022.12.22開幕局】マイナビニュース杯電竜戦ハードウェア統一戦開幕局【解説:勝又清和七段】
https://www.youtube.com/watch?v=rDuhB7NphEs
1回戦で印象的だったのはBURNING BRIDGEが107手目まで定跡で
切れたところでは+216の優勢、でそのまま勝ち切った将棋です。
その後、いったん外れたものの111手から115手目まで定跡にHitしてます。
第1回マイナビニュース杯電竜戦統一ハードウェア戦【予選】 1回表?BURNING BRIDGES-?Joyful Believer
https://denryu-sen.jp/denryusen/dr3_hardware1/dist/#/dr3hd1+hard1y-1-top_burningbridges_joyful-1800-5F+burningbridges+joyful+20221222224922
角換わりですが、第3回電竜戦でもdlshogiが水匠に角換わりの87手の定跡に誘導されて負けてます。
将棋AIの進捗 その59(第3回電竜戦で見つかった課題と対策検討)
https://tadaoyamaoka.hatenablog.com/entry/2022/12/10/191709
第3回電竜戦【A級】 8回表?水匠-?dlshogi with HEROZ 20b
https://denryu-sen.jp/denryusen/dr3_production/dist/#/dr3prd+dr3prda-8-top_suishoo_dlshogi20b-600-2F+suishoo+dlshogi20b+20221204183542/86
AobaZeroも似たような角換わりを指すことが多いです。
定跡で負けるのは面白くないので、それほど悪くないが多く出現しない形に組む定跡とかがいるのかもしれません。
Daigorillaがダイレクト向飛車とか坂田流向飛車とか
マイナー?な振飛車を指していて面白いです。
アピール文書によると振飛車側を多く探索させて(外見上は)振飛車が勝ちやすいように
偽装?した学習をしているそうです。
普通の四間飛車とかは指さないように調整も。
どの程度の探索量の違いならダイレクト向飛車とか坂田流が互角になるのか気になります。
ダイレクト向飛車に
第1回マイナビニュース杯電竜戦ハードウェア統一戦【予選】 3回裏?Daigorilla-?Ryfamate with C
https://denryu-sen.jp/denryusen/dr3_hardware1/dist/#/dr3hd1+hard1y-3-bottom_daigorilla_ryfamate-1800-5F+daigorilla+ryfamate+20221224201310
坂田流向かい飛車に。
さすがに端の位を取ってからの向飛車はずうずうしすぎるのでは・・・。
第1回マイナビニュース杯電竜戦ハードウェア統一戦【予選】 4回裏?Daigorilla-?Lightweight
https://denryu-sen.jp/denryusen/dr3_hardware1/dist/#/dr3hd1+hard1y-4-bottom_daigorilla_lightweight-1800-5F+daigorilla+lightweight+20221225114523
W@nderERとの将棋は相入玉の1点を争う勝負で面白かったです。
209手目の段階で、後手のAobaZeroが4段目以下の残った9枚のうち7枚を
生還できれば点数勝ち(後手で27点)という勝負でぎりぎり逃げきりました。
敵陣の駒をかすめ取る手筋?、とかで負けてたような気もするのですが。
第1回マイナビニュース杯電竜戦ハードウェア統一戦【予選】 5回表?W@nderER-?AobaZero
https://golan.sakura.ne.jp/denryusen/dr3_hardware1/dist/#/dr3hd1+hard1y-5-top_wanderer_aobazero-1800-5F+wanderer+aobazero+20221225163226/209
棋譜コメントに # で探索ノード数が表記されているようなので、
各ソフトのNPS(node per second.1秒あたりの探索ノード数)を計算してみました。
grampus 24600000
eclipse 22800000
joyful 21800000
burningbridges 21400000
sentokun 20200000
juststop26fu 20100000
ryfamate 18000000
daigorilla 16100000
wanderer 15800000
suishoo 11700000
honeywaffle 59000
lightweight 55500
etude 40900
rish 40200
nibanshibori 10700
aobazero 6160
CPU Core i9 12900K 16コア、24スレッド, 3.2GHz/5.1GHz
GPU RTX 3090
メモリ 128GB
8回表の棋譜の80手目から86手目ぐらいから計算してます。80手未満の棋譜は中盤の局面から。
Ponderが当たって多いのは除外して中央値っぽいのを出してます。
NNUE系とそれ以外、で3桁違って面白いです。
水匠が半分程度の速度で強いのが印象的です。
AobaZeroは40blockの二番絞りにも負けてるのはちょっと実装不足ですね・・・。
AobaZeroの棋譜を使って、探索勝率が0.40-0.60の局面の学習割合を2分の1に減らすと
+70ほど強くなるようです。
とはいっても学習回数も少なく、192x10blockと小さなネットワークの結果ですが。
最後まで学習させると消えていくか逆効果かもしれませんが。
対水匠5(7.50,1手1k)と1手100playoutの勝率。互角局面(24手目まで)利用。192x10block
30手目までと、40手前で投了した棋譜の学習割合は下げた状態で。Valueは探索勝率と実際の勝敗の平均を学習。
Replay buffer 50万棋譜(6130万棋譜からの)、4135万局面。
学習率0.01でミニバッチ128で初期状態から10万回学習(1280万局面を学習。全体の31%(=1280/4135))。
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
1156- 8-1236 2400 (2- 8- 6)(s=1176-1216,0.492), 0.483(0.020)( -11)基準
1325- 5-1070 2400 (0- 5-10)(s=1196-1199,0.499), 0.553(0.020)( 37)35.0%以下の勝率の局面なら選ばれる確率を2倍。65.0以上も
1421-15- 964 2400 (0-15- 7)(s=1148-1237,0.481), 0.595(0.020)( 66)37.5%
1417-13- 970 2400 (1-13- 7)(s=1206-1181,0.505), 0.593(0.020)( 65)39.0%
1497- 5-898 2400 (2- 5- 8)(s=1218-1177,0.509), 0.625(0.019)( 88)40.0%
1382-10-1008 2400 (2- 9- 6)(s=1152-1238,0.482), 0.578(0.020)( 54)40.0% 同じ条件で再度学習
1427- 12-961 2400 (4-11-12)(s=1152-1236,0.482), 0.597(0.020)( 68)40.0% 同じ条件で再々度学習
1330- 4-1066 2400 (0- 4- 7)(s=1208-1188,0.504), 0.555(0.020)( 38)42.5%
1153-25-1222 2400 (2-25- 3)(s=1156-1219,0.487), 0.486(0.020)( -9)45.0%
実装は山岡さんの記事を参考にSum-Treeを使っています。
https://github.com/kobanium/aobazero/blob/develop/learn/yss_dcnn.cpp#L2798
Prioritized Experience Replayのsum-treeの実装
https://tadaoyamaoka.hatenablog.com/entry/2019/08/18/154610
下は学習局面の勝率ごとの局面数です。
勝率25%以下、75%以上が少ないのは現在の投了の閾値が0.25なためです。
56%と45%にピークがあるのは初手(56%)と2手目の勝率(45%)のためです。
6130万棋譜からの50万棋譜、4135万局面が対象です。

すみません、このデータは誤りでした。
そもそも基準となったデータが、たまたま -80 ELO ほど弱い
結果となっていました。
何度か初期化された状態からの10万回学習を繰り返すと ±100 ELO ぐらいは
平気でぶれるようです。棋力測定の誤差も含めて。
そのあと、実験を繰り返したのですが勝率が互角に近い局面を減らすと強くなる、という現象は再現できませんでした。
再度実験をやり直したら、この手法は効果がありました。
AobaZeroで互角の局面の学習を減らして+28 ELO
http://www.yss-aya.com/bbs/patio.cgi?read=48&ukey=1
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
CGOSがTcl製なんですが、Starkitがメンテナンスされてるのかよくわからないのと自分がtclに慣れてないのとで、サーバーをPythonに移植して実験しています。
* サーバークライアント通信時にプロトコルバージョンのネゴシエーションをする
* エンジンがlist_commandsでcgos-genmove_analyze kata-genmove_analyze lz-genmove_analyzeのいずれかがを返した場合に、Python版cgosクライアントはgenmoveの代わりそちらを呼び出して、最後の行の着手とその1行前の読み筋情報をサーバーに送る
* サーバーは読み筋を保存しておいて、SGFのCタグに保存する
の3点はできました。
https://github.com/zakki/cgos/blob/genmove_analyze/client-python/src/gtpengine.py#L191
現状はビューアーが無いので特に嬉しくないんですが、ビューアーはTclに加えてTkも入ってきてさらに良くわかってません…
ありがとうございます!
後は棋譜コメントの勝率をグラフに書くのを付ければさくっと載せ替えられそうですね。
KataGoとLeelaZeroは何の変更もなしにそのまま動く?感じなのでしょうか。
どれを使ってもいい、というのは便利そうで混乱する気がするので
どれかに絞ってもいいかと思います。
あと、現在のCGOSは引き分けとかも対応してるので、よろしければ変更部分にも対応していただけると助かります。
https://github.com/yssaya/CGOS
> KataGoとLeelaZeroは何の変更もなしにそのまま動く?感じなのでしょうか。
現状はKataGo、LeelaZeroあとはLizze対応でLZ互換のRay、SayuriなどはCGOSクライアント差し替えで動くはずです。
> どれを使ってもいい、というのは便利そうで混乱する気がするので
> どれかに絞ってもいいかと思います。
一番古いこともあってlz-genmove_analyzeが対応ソフト多いのはあるんですが、個人的にはUEC杯みたいな解説あり長時間対局だと目数差も欲しくて、
必須 move
空でもいいけど実質意味がなくなるのでほぼ必須 pv winrate
推奨 visits prior scoreMean
任意 lzとkatagoが使ってる各種属性。各ソフトのプレフィックス付き属性もOK。
くらいのcgos-genmove_analyzeもあると嬉しいんじゃないかと思いますがどうでしょう?
> あと、現在のCGOSは引き分けとかも対応してるので、よろしければ変更部分にも対応していただけると助かります。
色々修正入ってるんですね。見てみます。
KataGoとLZが変更なしなら初参加の人も楽ですね。
> 空でもいいけど実質意味がなくなるのでほぼ必須?pv?winrate
賛成です。
> 推奨?visits?prior?scoreMean
visitが訪問回数(playout数?)でpriorは事前ポリシー、scoreMeanはコミありの目数差?でしょうか。
事前ポリシーは知りたいですけど、可能手全部、とかだと巨大になるので、棋譜サイズがやや心配ではあります。
sqlite3の挙動とかも。
pvも3コウの無限ループとかを送られても困るので、ある程度の長さ制限は必要でしょうか。100手までとか256バイトまでとか。
> くらいのcgos-genmove_analyzeもあると嬉しいんじゃないかと思いますがどうでしょう?
UEC杯のnngsで受け取る場合はcgos-genmoveだけ、送る属性は固定、みたいな制限はあった方が安心な気はします。
nngsを対応させるのは大変な気もしますけど・・・。
> visitが訪問回数(playout数?)でpriorは事前ポリシー、scoreMeanはコミありの目数差?でしょうか。
そうです。
> 事前ポリシーは知りたいですけど、可能手全部、とかだと巨大になるので、棋譜サイズがやや心配ではあります。
> sqlite3の挙動とかも。
> pvも3コウの無限ループとかを送られても困るので、ある程度の長さ制限は必要でしょうか。100手までとか256バイトまでとか。
今ローカルでテストしてる無制限出力の100Visits KataGoで1手2000文字くらいで、持ち時間長かったりハードウェア強かったりするさらに増えそうですし、何らかの制限は必要そうですね。
KataGo方式だとownershipが最後にくるのでサーバー側で切り詰めるのもうれしくないかもしれませんし。
ownership対応するかどうかの判断も必要ですね。
また現状のPythonサーバー実装はsgf保存までで、game_archive_databaseへの保存は未対応です。
ビューアーも新旧プロトコルのネゴシエーション入れて勝率や読み筋がLizzie系のように見えるとと楽しそうですがTcl/Tk頑張るか、自分が慣れてるJava SwingやElectron移植を作るか悩んでるところです。
> UEC杯のnngsで受け取る場合はcgos-genmoveだけ、送る属性は固定、みたいな制限はあった方が安心な気はします。
> nngsを対応させるのは大変な気もしますけど・・・。
Python移植で理解深まったこともあって自動対局を止めてDBレコードから対局スケジュールをするくらいなら割と何とかなりそうですが、日本ルールなどtromp/taylor以外への対応を安定させるのとどっちが大変かは微妙ですね。
> ownership対応するかどうかの判断も必要ですね。
ownershipはこの石の死活の判断は?とかで知りたい情報なのですが
ちょっとサイズがでかいのが問題でしょうか。
UEC杯への参加者が実装が楽なように、winrate(か目数差)のみで、pvとかは空っぽでもOK、
みたいなのがいいのかもしれません。
> ビューアーも新旧プロトコルのネゴシエーション入れて勝率や
WWGoの下にフラフだけhtmlで表示、みたいなのを想像してましたけど
碁盤とグラフが連動してる独自実装だと便利そうです。
作るのは大変そうですが・・・。
> 自動対局を止めてDBレコードから対局スケジュールを
なるほど。UEC杯もnngsからCGOSの特別版に移行、もありですか。
常に練習対局できる、を考えるとCGOS環境での大会の方が便利な面もありそうです。
中断からの再開とかリアルタイムの視聴とか、ログインの確認、とか
追加変更は多少あるかもですけど。
引き分け対応・BAN対応を移植して、CGLemonさん指摘のバグをいくつか修正しました。
WGo.jsでコメント中にgenmove_analyze書式のコメントがあれば、読み筋と勝率と地を出すようにしました。
TODO
* webuildの読み筋対応
* ビューアーの読み筋対応
* 非同期IOもしくはマルチスレッド化
* Deep Leelaみたいなケースも真面目に実装すれば捌けるはず
* 読み筋や評価値をリアルタイムに対戦相手に知られたく無いかも
* 読み筋情報の文法チェック
* 異常系のテスト
すごいですね!
WWGo改造して勝率グラフも出るんですね!
winrateとownershipも表示できた。
https://twitter.com/k_matsuzaki/status/1610958091746693120
もうこのまま差し替えて動かしてもいい気がします。
相手に読み筋ばれる、という話はありますが、電竜戦では
そこまでやってる人は(まだ)いないので、そんなに気にしなくてもいい気はします。
HCCLでの話に合わせていくつか変更しました。
* cgos-genmove_analyzeの更新
* 任意の自然言語コメントを送れるようにする
* AIからの情報は、SGFのC属性からCGOSCカスタム属性に移動
* 自然言語コメントがあればSGFのC属性に記載(タイムラインのような表示は未実装)
* ownershipを1座標1文字でエンコード
* 送信情報をJSONエンコード
* WGo.jsの更新
* 下のパネルに目数差のグラフを表示
* 右のパネルに勝率と目数差の数値表示
* スコア計算のパッチをマージ
コメントの自由記述のフォーマットを自分で考えるとはまりそうだったので、全体をJSONにしてます。
読み込みはPythonやJavaScriptだと言語の標準ライブラリ使えるのと、各AIが送信する分にはprintfやstd::coutでの単純文字出力でも行けそうという理由からですがどうでしょうか?
後は、rn/Rayかeg/KataGoにcgos-genmove_analyzeのネイティブ対応をしてみて何か辛くないか確認する予定です。
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/viewer.cgi?19x19/SGF/2023/01/23/13.sgf
左上の「三」からCGOS Modeを選ぶと地合も表示されます(KataGoの手番のみ)。
JSONになってるのは分かりやすくていい気がします。
でもやっぱSGFはでかくなりますね。両方ともOwnershipを出すと1個300KBぐらいにはなりますか・・・。
人間が見た時の可読性もかなり低く。
そっか、複数候補ごとのPV、にも対応してるのですか。マウスを合わせた時にだけそのPVが表示されるのですね。
> AIからの情報は、SGFのC属性からCGOSCカスタム属性に移動
これは悩ましいですね。確かに大量の情報をコメントとして文字に出されても困る気がしますが、
実際に着手されたPVはコメントあった方が分かりやすい気もします。
でも文字列だと結局分かりにくいですか。
1手の勝率、目数差、PV、だけを送るとこんな感じですか。実際の着手にplayが付くのですね。
cgos-genmove_analyze w
=
{"moves": [{"move": "O15", "winrate": 0.135, "score": -11.21, "pv": "O15 P17 O18 N17 O8 P6 N7 Q7 O6 P5"}]}
play O15
ささいな現象として片方だけ勝率を出さないと10手おきに飛ばすとグラフも10手おきになるようです。
http://203.138.189.63/cgos/viewer.cgi?19x19/SGF/2023/01/23/7.sgf
ちなみに、
https://github.com/zakki/cgos/tree/genmove_analyze/client-python/src
の全ファイルを zakki_client/ の下に置いて以下のようなsample.cfgを書いて sgf ディレクトリを作って下でつながります。
python3 ../zakki_client/cgosclient.py sample.cfg
$ cat sample.cfg
Common:
KillFile = abort.txt
GTPEngine:
Name = dummy_name
CommandLine = ../../katago_1.12.1/cpp/katago gtp -model ../../kata_dist/b18c384nbt-uec.bin.gz -config ../../katago_1.12.1/gtp_v50.cfg
ServerHost = 203.138.189.63
ServerPort = 6819
ServerUser = kata1_b18_uec_v50
ServerPassword = yoursecret
NumberOfGames = 5
SGFDirectory = sgf
要望などを書いてみます。
最初からCGOS Modeで、Onwershipを消すときはメニューで「Territory view off」など。
グラフをクリックするとその手数にjumpできると便利かも。
ここを見るとSGFのpropertyは2文字まで?のようですのでCGOSC[]はCC[]の方がいいかもしれません。CC[]は多分?使われてないかと
https://www.red-bean.com/sgf/proplist.html
少しでもサイズを減らすためにJSONのスペースをなしに。KataGo,LZで表示されない項目の情報をSGFに保存しない。
死んでいる石の上に「×」などで大きさを変えて表示できますでしょうか?
ownershipは0(どちらの地でもない)を表現するため64段階より65段階とか奇数の方がよい?
棋譜が1個300KBだと
1年で3万棋譜として300 * 30000 = 9,000,000 KB = 9GB/年
現在CGOSが動いてるサーバのHDDは50GB、で残り25GB程度なのでかなり厳しいです。
floodagteは1棋譜15KB程度、理想は1棋譜30KB程度に収まればいいのですが。
もっとでかいサーバ借りろ、という話もありますが・・・。
対局中のゲーム情報のwdata.txtへの書き込みが間違っててhtmlの表がおかしいので修正します。
> これは悩ましいですね。確かに大量の情報をコメントとして文字に出されても困る気がしますが、
> 実際に着手されたPVはコメントあった方が分かりやすい気もします。
> でも文字列だと結局分かりにくいですか。
AIがcomment要素出していればそれを使って、出してないときは、moves[0]を適当にフォーマットして出すくらいでしょうか。
> ここを見るとSGFのpropertyは2文字まで?のようですのでCGOSC[]はCC[]の方がいいかもしれません。CC[]は多分?使われてないかと
こっち見るとEBNF的には1文字以上だけど、自然言語で大文字1〜2文字って書いてありました。
https://www.red-bean.com/sgf/sgf4.html
> 少しでもサイズを減らすためにJSONのスペースをなしに。KataGo,LZで表示されない項目の情報をSGFに保存しない。
それでは任意属性出したいときはcgos-genmove_analyze使う方向で。
> 棋譜が1個300KBだと
gzip圧縮すると2割くらいに縮むので、Apacheやnginxの設定でgzip対応してない稀なブラウザ対応するのでどうでしょう?
https://huguma.hatenablog.com/entry/2015/12/04/201101
他も検討します。
> gzip圧縮すると2割くらいに縮むので、Apacheやnginxの設定で
apacheで動いてますがWWGoとかも普通に動く?のでしょうか。
一度試してみたいと思います。
大変そうなら定期的に古いデータを削除、で対応したいと思います。
あと、今、下の3つを接続していますがkata1とLZがマッチングされず、ずっとAyaの対戦が続いています。
kata1_b18_uec_v50 3561?
LZ_275_b942_v100 3357
Aya807_LZ_cn3_p100 2065?
ログを見てるとdefaultRatingAverage がちょっと違う感じです。
2023-01-23 21:02:35,858 - cgos_server - INFO - defaultRatingAverage: 688.4393809589118 : playes 3
2023-01-23 21:02:35,858 - cgos_server - INFO - defaultRatingAverage: 688.4393809589118 : playes 3
2023-01-23 21:02:35,858 - cgos_server - INFO - maximum skip elo: 2000.0
2023-01-23 21:02:35,858 - cgos_server - INFO - maximum skip elo: 2000.0
2023-01-23 21:02:35,858 - cgos_server - INFO - ELO permutation factor to be used: 3000.0
2023-01-23 21:02:35,858 - cgos_server - INFO - ELO permutation factor to be used: 3000.0
yss-aya.comのCGOS
2023-01-23 12:00:15 | defaultRatingAverage: 2814.6119439555896 : playes 2
2023-01-23 12:00:15 | maximum skip elo: 2000.0
2023-01-23 12:00:15 | ELO permutation factor to be used: 3000.0
Ayaはpvを除いたwinrate、score、ownershipを実装してみたのですが
地合の認識力が圧倒的にKataGoと比べて負けてるのがよく分かります。
こうして画像化される効果は絶大ですね。
次の4つについて修正しました。
- wdata.txtの修正
- JSONの縮小
- グラフの位置にジャンプ
- defaultRatingAverageの計算
> apacheで動いてますがWWGoとかも普通に動く?のでしょうか。
Chromeでページ開いてリクエストヘッダー見ると
> GET /19x19/SGF/2023/01/23/1221.sgf HTTP/1.1
> Accept: */*
> Accept-Encoding: gzip, deflate, br
でgzip対応してると言ってるのでCcontent-Encoding: gzipで返してOKなはずです。
> 次の4つについて修正しました。
ありがとうございます!こちらも差し替えました。
ジャンプできるのは便利です。
Game番号73、以上の棋譜なら正しくグラフが出ると思います。
http://203.138.189.63/cgos/viewer.cgi?19x19/SGF/2023/01/23/73.sgf
SGFは70KBぐらいまで減ってます。
"winrate"とかも"w"や"wr"、数値は有効数字3桁まで、など
すればもう少し減らせるかもしれません。
> でgzip対応してると言ってるのでCcontent-Encoding: gzipで
WWGoは直接ファイルを持ってきてると思ってたのですがhtml経由で取っているのですか。
追記:
9路も始めてみました。
http://203.138.189.63/cgos/9x9/standings.html
KataGoは黒の初手はほぼ全部の手を試してる?のですね。
黒6目勝ちが白13目勝ちになってるようです。
http://203.138.189.63/cgos/viewer.cgi?9x9/SGF/2023/01/24/45.sgf
あと、pvの最初のE5、は重複してるので消してもいいかと思います。
{"move":"E5","winrate":0.362,"score":-0.0535,"pv":"E5 E7 D3 G4 F6"}
- tromp/taylorスコア計算の修正
- katagoやlzでpvの最初の手を省く
- 右上のスコアと勝率表示が更新されなくなってた
- ownershipを複数回描画して濃く表示されてた
LZやKataGoが投了で終わるので、真っ先に気付きそうなスコア計算の塗りつぶしの移植に失敗してるのに気付いてませんでした。
JSONのmoveは異種配列にして0番目は座標、1番目は勝率…ってしちゃえばもっと縮むんですが、
ありがとうございます!
こちらも差し替えました。
9路は128番目の棋譜から、19路は190番目の棋譜から正しく表示されると思います。
http://203.138.189.63/cgos/viewer.cgi?9x9/SGF/2023/01/24/128.sgf
http://203.138.189.63/cgos/viewer.cgi?19x19/SGF/2023/01/24/190.sgf
> JSONのmoveは異種配列にして0番目は座標、
こういうのがあるのですか。決め打ちにしてもいいような気もします。
あと、visitsって個別の手だけで合計はLZとかKataGoは送ってこないのでしたっけ?
"comment"がないときに、全探索ノード数、とかをコメント欄に表示するとnpsとか推測できていいかな、とは思うのですが。
あと、コミ7.5だと初手から白の勝率0.62とか高すぎますね。
「中国ルール、コミ7.0、hasButton あり」に
した方がいい気もするのですが現状、対応してるのはKataGoだけ?という問題も。
KataGoの自己対戦から見るコミ、ルールによる勝率
http://www.yss-aya.com/bbs_log/bbs2022.html#bbs19
http://www.yss-aya.com/bbs_log/bbs2022.html#bbs40
そういえばWWGoで手数を指定する、てできましたっけ?
以前試した時はメニューのPermanent Linkがうまく動かなくて
下みたいな形式で飛ぶように改造した記憶があるのですが実装はかなりいまいちでした。
http://www.yss-aya.com/cgos/viewer.cgi?19x19/SGF/2019/10/08/609399.sgf&110
2局同時に進行している場合、例えばGame 244, 245が行われている場合
Game 244だけしか playing... 表記にならないようです。
対局は2局とも正常に行われてます。
ログが下のように2行づつ表示されるようです。
2023-01-25 14:38:02,176 - cgos_server - INFO - match-> Aya807_LZ_cn3_p100(2162) Gnugo-3.7.10-a1(1800)
2023-01-25 14:38:02,176 - cgos_server - INFO - match-> Aya807_LZ_cn3_p100(2162) Gnugo-3.7.10-a1(1800)
2023-01-25 14:38:02,176 - cgos_server - INFO - match-> LZ_275_b942_v100(3357) kata1_b18_uec_v50(3679)
2023-01-25 14:38:02,176 - cgos_server - INFO - match-> LZ_275_b942_v100(3357) kata1_b18_uec_v50(3679)
2023-01-25 14:38:17,178 - cgos_server - INFO - Games in progress: 2
2023-01-25 14:38:17,178 - cgos_server - INFO - Games in progress: 2
> こういうのがあるのですか。決め打ちにしてもいいような気もします。
可読性や互換性と引き換えなので、圧縮しても駄目なときにProtocolBufferやMessagePackと比べるのがいいんじゃないかと思ってます。
> そういえばWWGoで手数を指定する、てできましたっけ?
> 以前試した時はメニューのPermanent Linkがうまく動かなくて
data-wgo-moveで指定するのはそれはそれでいいと思います。
Permanent LinkはWGoの実装がバグってたのかブラウザの仕様が変わったのかURLのハッシュ処理が動いてなかったので修正しました。
> 2局同時に進行している場合、例えばGame 244, 245が行われている場合
> ログが下のように2行づつ表示されるようです。
修正しました。
ありがとうございます!差し替えました。
19路はGame277、9路はGame305、から対応しています。
> Permanent LinkはWGoの実装がバグってたのか
動きました!
Remiさんの掲示板でどの色がどれか分からん、とありますね。
https://www.game-ai-forum.org/viewtopic.php?t=782
色のセンスはないので難しいのですが、floodgateみたいに、グラフ上にKataGoはこの色、とか書くのも一案かも。
http://wdoor.c.u-tokyo.ac.jp/shogi/view/2023/01/24/wdoor+floodgate-300-10F+Suisho5_750_473stb_1000k+AobaZero_w4223_n_p800+20230124000002.csa
今19路は5つ接続してるのですが、kata1_b60s689v50 が LZとしか当たらないようです。
http://203.138.189.63/cgos/19x19/cross/kata1_b60s689v50.html
LZ_275_b942_v100
Gnugo-3.7.10-a1
の2つはアンカーになってます。
サーバのログは
2023-01-26 13:01:15,097 - cgos_server - INFO - defaultRatingAverage: 2961.9083689891363 : playes 5
2023-01-26 13:01:15,097 - cgos_server - INFO - maximum skip elo: 0.0
2023-01-26 13:01:15,097 - cgos_server - INFO - ELO permutation factor to be used: 500.0
2023-01-26 13:01:15,097 - cgos_server - INFO - will schedule: 5 players
yss-aya.comのログは
2023-01-26 04:08:02 | defaultRatingAverage: 3263.3118883779894 : playes 4
2023-01-26 04:08:02 | maximum skip elo: 2000.0
2023-01-26 04:08:02 | ELO permutation factor to be used: 3000.0
2023-01-26 04:08:02 | is delele anchor vs anchor ?: 4 players
2023-01-26 04:08:02 | delete this match. kata145b20s530v400, myCtest-10k, r=0.6659220064365873,i=4
2023-01-26 04:08:02 | will schedule: 4 players
> 色のセンスはないので難しいのですが、floodgateみたいに、グラフ上にKataGoはこの色、とか書くのも一案かも。
とりあえず凡例出すようにしました。
> 今19路は5つ接続してるのですが、kata1_b60s689v50 が LZとしか当たらないようです。
関数単体で確認した範囲では修正できたと思いますがどうでしょうか?
ありがとうございます!こちらも反映させました。
19路はGame 401、9路はGame 531から反映されてます。
凡例、右上だと重なってしまうことが多いので変動が少ない左上の方がいいかもしれません。
現在 archive.db にはSGFと読み筋も保存してますが*.sgfにファイルとして保存するので
読み筋は保存しないくてもいいかもしれません。棋譜の内容すらも。容量対策で。
棋譜は毎月*.bz2で保存してますし、今まで archive.db のSGFを使ったことはないので。
> 現在 archive.db にはSGFと読み筋も保存してますが*.sgfにファイルとして保存するので
> 読み筋は保存しないくてもいいかもしれません。棋譜の内容すらも。容量対策で。
これはビューアーに棋譜渡すために使われてます。
2020年代はウェブの時代だ!ってことで、Tcl/Tkビューアーは廃止して、対局中の1手ごとにSGF更新して対局中のものもwebuildの対象に含めるっていうのも一つの手でしょうか。
あるいは逆にSGF保存とwebuildを廃止してDBに一本化して、Pythonやnode.jsのウェブフレームワークで動的にHTMLやSGF生成するのもたぶん今どきのハードウェアなら余裕な気はしますが、最初のサーバー構築は面倒かもしれません。
あと今は最初の手の勝率や目数をグラフに出してますが、Remiさんの提案でルート局面のものをJSONに追加しようと思います。
若干サイズ増えますが、勝率と目数1セットですし…。
> これはビューアーに棋譜渡すために使われてます。
そうか、これに使われてたのですか。
> Tcl/Tkビューアーは廃止して
tclビューアーは廃止でもいいと思います。今回サーバ立ち上げるのに
一番苦労したのはtcltkのバイナリを探すことでしたし。(結局現在のサーバからバイナリをコピー)
> 対局中の1手ごとにSGF更新して対局中のものもwebuildの対象に
floodgateもそんな感じですし、それでいいような気もします。
> node.jsのウェブフレームワークで動的にHTMLやSGF生成
これが今風?でしょうか。
今のyss-aya.comはかなり古いVPSでC++14は動かない、とかいろいろ
厄介だったので厳しいかもしれません。
> ルート局面のものをJSONに追加しようと思います。
あれ、今のwinrateやscoreって、Rootじゃなくて最善手、だったのですか。そういえばAyaのwinrateは最善手ですね。
どちらがいいか、は悩ましいですけど。
探索ノード数もグラフに出すとごちゃごちゃしそうなので
表示グラフを選択可能、とかするといいかもですね。
あと、18時4分にOOM Killerで9路、19路ともサーバがKillされてました。
AobaZeroの棋譜サーバが動いてるマシンなのですが、メモリを70%ぐらい使ってて
ちょっと不安定かもしれません。
http://203.138.189.63/cgos/19x19/SGF/2023/01/29/774.sgf
だと 580KB ありますね。
さすがにでかい・・・。
"score"とかを1文字にしても440KB、gzで圧縮して130KBと126KB。
有効数字を3桁か4桁に制限すればもう少しは減るでしょうけど。
game_archive_databaseが設定しないことで、棋譜をsqliteに保存しないことを選択できるようにしました。
Viewerでは対局中のゲーム以外見られなくなります。
moveIntervalBetweenSaveを設定すると対局中の棋譜をSGFファイルに出力するようにしました。
10だと10手ごとに書き出します。
moveIntervalBetweenSave = 0
で今まで通りの挙動です。
cgos-genmove_analyzeでルート局面のwinrate, score, visitsを追加しました。
lz-genmove_analyzeやkata-genmove_analyze使用時はvisitsに比例した加重平均を取ります。
WGoでジャンプした時のグラフの表示と凡例の位置を調整しました。
ありがとうございます!こちらも差し替えました。
moveIntervalBetweenSave = 1
にしています。
OOM-killerで15:54頃、両方ともサーバが落ちていました。
swapが設定されてなかったので、設定して再起動しています。
19路はGame798、9路は1275から対応しています。
webuild.tclを修正して、現在対局中もトップから見れるようにしてみました。あまり検証してないですが・・・。
1手ごと保存、だとHDDへの負担が大きそうなので、直前に保存してから10秒以上経過で保存、とかの方が優しいかもしれません。
OOMの件は再現できてないんですが、現状クライアント接続ごとの読み書きキューがサイズ無制限なので応答しなかったり逆に間に合わないくらい大量の送信があると不味いケースありそうなので制限を検討してみます。
単純に長時間動かすのは数クライアント動かしっぱなしくらいだと特に異常を見つけられてません。
> 直前に保存してから10秒以上経過で保存
今の手数による設定だと微妙でしょうか?
すみません、OOM-killerはAobaZeroの棋譜収集サーバがメモリ2GBのうち
1.4GBくらいを使っていて、その影響の問題なのでCGOSは関係ないです。
> 今の手数による設定だと微妙でしょうか?
例えばこの棋譜ですと300手ぐらいから448手までを10秒ぐらいで
打っていて、1手ごとに500KB近くが書き込まれてるので負担大きいかもです。
http://203.138.189.63/cgos/viewer.cgi?19x19/SGF/2023/01/29/869.sgf
対局中は
#wgo_0={"goto":{"m":999}}
を付けてリロードでも最終局面が出るようにしてみました。
時間切れになったときのトップのレートがマイナスになるようです。
1497 kata1_b18_uec_v50(-11748) 04:12 Gnugo-3.7.10-a1(1800) 01:07 B+Time
あと、LANケーブルを引っこ抜いたような状態でしばらく(10分ぐらい?)放置すると
再接続しても下のように、「already logged on」で入れなくなります。
これは以前のCGOSでもたまにある現象でした。
今回どうやって発生したのか不明なのですが。
2023-01-30 16:25:25,460: Attempting to connect to server '203.138.189.63', port 6809
2023-01-30 16:25:25,471: Connected
2023-01-30 16:25:25,497: CGOS Error: You are already logged on! Closing connection.
2023-01-30 16:25:25,497: Shutting down CGOS connection
2023-01-30 16:25:25,497: Shutting down GTP engine, command line: ./ayamc -gtp -p10000
再現性がよく分からないのですが、9路でkata1_b18_uec_v50がGNUのpassに対して時間切れになることがある?
ようです。
その後はログインは続けるのですが、cgosのログだと "playes 1"
でログイン扱いされないようです。
時間切れ勝ちの後GNUは終了してログオフしてAyaだけが入ってる状態でした。
GNUはpythonのclientでなく、tcltkの昔のでつないでいます。
サーバのログには時間切れになった後、70秒後にしたのようなメッセージが出ます。
2023-01-30 17:45:28,283 - cgos_server - INFO - [kata1_b18_uec_v50] gave improper response to gameover: pass {"moves":[{"move":"pass","visits":11,"winrate":0.999983,"score":11.5174,"prior":0.265901,"pv":"D5 pass pass"},{"move":"A8","visits":1,"winrate":0.999975,"score":10.2412,"prior":0.0249175},{"move":"B8","visits":1,"winrate":0.999971,"score":10.0197,"prior":0.02398},{"move":"H3","visits":1,"winrate":0.999992,"score":10.3275,"prior":0.0225828},{"move":"G2","visits":1,"winrate":0.999992,"score":10.3166,"prior":0.0223206},{"move":"H7","visits":1,"winrate":0.999991,"score":10.3025,"prior":0.0209529},{"move":"H4","visits":1,"winrate":0.999991,"score":10.2774,"prior":0.0207489},{"move":"G9","visits":1,"winrate":0.999987,"score":10.2495,"prior":0.0206244},{"move":"H6","visits":1,"winrate":0.999989,"score":10.2168,"prior":0.0205499},{"move":"F1","visits":1,"winrate":0.999983,"score":10.1761,"prior":0.0203905},{"move":"A7","visits":1,"winrate":0.999979,"score":10.2141,"prior":0.0203571}],"ownership":"AAA++++++AAAAA++++AAA++++++AAAAA++++AAAAAA+++AAAAA++++AAA++++++AAAA+++++AAAA+++++","visits":21,"winrate":0.9999839523809525,"score":10.906323809523808}
2023-01-30 17:45:42,248 - cgos_server - INFO - Batch rating
Remiさんの話も受けて、パスワードがあってれば前にログインして他方のクライアントの接続を切るようにしました。
ローカルでテストした範囲では動いてるようです。
https://www.game-ai-forum.org/viewtopic.php?p=1152#p1152
ありがとうございます!反映して再起動させました。
9路はGame1567、19路は1039から反映されています。
まれにKataGoも自殺手を打って負けることがあるみたいです。
suicideは打たない設定なのですが。
go11はランダムplayout+RAVE+MCTSなのですが、地合(死活)の認識力がKataGoとは桁外れに弱いですね。
今のDLの囲碁の強さは地合の認識力、な気もしてきます。
http://203.138.189.63/cgos/viewer.cgi?9x9/SGF/2023/01/31/1703.sgf
tromp-taylorだと自殺手は合法なので、KataGoは個別にcgos用ルールを設定する必要ありますが大丈夫でしょうか?
Rayだと地の認識はKataGoと似た感じになりますが、勝率の鋭敏さがだいぶ違うように見えます。
CGOSでも動かそうかと思いましたが、終局やスコア計算のルール設定回りがRn専用でごちゃごちゃやってたの今のRay用に移植がなかなか…
> KataGoは個別にcgos用ルールを設定する必要ありますが
tromp-taylorは使わずに個別に設定しています。
この設定が正しいかは不明ですが・・・。
19路だと今まで自殺手を打ったことはないです。ランダムbot相手の対戦がほぼない、というのはありますが。
あれ・・・multiStoneSuicideLegal = true になってますね・・・。
このせいでしたか。1.12.1 で設定しなおたとき間違えたようです。
直しておきます。
#rules = tromp-taylor
koRule = POSITIONAL # Positional superko
scoringRule = AREA # Area scoring
taxRule = NONE # All surrounded empty points are scored
multiStoneSuicideLegal = true
hasButton = false
friendlyPassOk = false
whiteHandicapBonus = 0 # White gets no compensation for black's handicap stones (Tromp-taylor, NZ, JP)
GNU Goにもscoreとかownershipとか出させてみたいのですが
final_status_list とかを中盤で呼ぶと1分ぐらい長考したりします。
gnugo -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t -t --mode gtpとかで起動すると今どきのソフトより内部に色々情報持ってそうなんでいい感じに可視化できると楽しそうなんですが、何をやってるのか理解してないのでどれをどれにマッピングしたものか…
最後にでる候補くらいならなんとか。
Top moves:
1. D16 75.00
2. O17 74.05
3. R14 74.03
4. C16 74.01
5. R5 74.01
6. C5 74.01
7. P4 74.01
8. C17 74.01
9. C3 74.01
10. C15 74.01
Checking safety of a white move at D16
Move generation likes D16 with value 75.00
genmove() recommends D16 with value 75.00
= D16
おー、こんな隠しコマンド?があるのですか。
間違ってタイプしたみたいですが。
何か着手の決定の流れを表示して面白いです。
色々やってますね、さすが知識の集大成とも言えるGNU Go...
1週間以上安定して動いているようですので、本番環境に移行しようと思っています。
19路の1月31日の対局数は175、ファイルサイズ合計は27M、1局平均 161780 byte/file
オリジナルのCGOSの19路は2022年の1年で53229局, 平均 5299 byte/file
1年で50000棋譜で160KBなので、7.8GB。9路も含めるとさらに増えるので、やっぱりできる限りSGFの
サイズを減らしたい気がします。bzで圧縮しても4分の1程度なので、古いhtmlのSGFは
削除するか最善手のscoreとwinrate以外は削除して保存、になると思います。現在の残りHDD容量は20GB。
というわけで要望としましては
・WGoで最初からownershipも表示(あると見づらい、という意見もありそうですが)
・表示用のコメントがない場合は、探索ノード数(NPS)、winrate?、score?,最善手のPV?、などをコメント欄に表示。
・cross-tableに合計時間を。どのくらい時間を使ってるか確認に便利。cgos.state に保存する必要あり?
・ownershipを奇数に。63、65種類など。セキが0か、などの確認に便利。
・JSONの"score"などを1文字に。
・有効数字をscoreは小数点以下2桁、winrateは小数点以下3桁まで。
・CGOSで表示しない "prior" は保存しない。
・"move" の "custom": {"visits": 189} は customなしに。
・WGoで最初からownershipも表示(あると見づらい、という意見もありそうですが)
・表示用のコメントがない場合は、探索ノード数(NPS)、winrate?、score?,最善手のPV?、などをコメント欄に表示。
検討します。
・cross-tableに合計時間を。どのくらい時間を使ってるか確認に便利。cgos.state に保存する必要あり?
webuildは触ってませんが、standings.htmlには時間出ててますし、gamesのwtu, btuを使って出せるんじゃないでしょうか。
・ownershipを奇数に。63、65種類など。セキが0か、などの確認に便利。
以前の指摘を受けて、64段階だったのを63段階にしてます。
・JSONの"score"などを1文字に。
・有効数字をscoreは小数点以下2桁、winrateは小数点以下3桁まで。
・CGOSで表示しない "prior" は保存しない。
・"move" の "custom": {"visits": 189} は customなしに。
この辺、sgf保存自体をなくして、game_archive_databaseへのバイナリ保存に統合すればsgf.gzの半分くらいにはできるんじゃないかと思うのでちょっと試してみます。
> gamesのwtu, btuを使って出せるんじゃ
昔、ちょっとやろうとして見送ったのですよね。もう一度見てみます。
> 64段階だったのを63段階にしてます。
すみません、仕様確認してませんでした。対応ありがとうございます。
> sgf保存自体をなくして
お時間があるときにぜひお願いします。
ただ、ownershipが入るとどうしても巨大になってしまうので
2,3年前のsgfからは削除(欲しい人は圧縮ファイルを)で
仕方がないのかな、という気もしています。
yss-aya.comのdebian 7で標準で入るPython 3.2.3 だと下で失敗するようです。もう少しversion上げて試してみます。
$ python3 cgos/server.py cgos19.ini
Traceback (most recent call last):
File "cgos/server.py", line 27, in <module>
from app.cgos import runServer
File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 61
db: sqlite3.Connection
^
SyntaxError: invalid syntax
ビューアーを更新しました。
> gamesのwtu, btuを使って出せるんじゃ
> 昔、ちょっとやろうとして見送ったのですよね。もう一度見てみます。
cgos.state のgamesにはあって、cgi.dbのgamesにはないので、見るテーブル変える必要ありそうです。
cgi.dbがデータ少ない代わりにwとbにインデックス指定してあるのはどういう設計意図なんでしょうか。
> yss-aya.comのdebian 7で標準で入るPython 3.2.3 だと下で失敗するようです。もう少しversion上げて試してみます。
HCCLの時にノートに入ってた3.6が駄目だったので、たぶん3.8が必要だと思います。
ありがとうございます!こちらも更新しました。
やっぱり最初から地合が出るとなんだか近未来的な碁盤みたいでかっこいいです。
コメントにたくさん出るのも情報量が多くていい感じです。
visits が複数ある場合は、一番上のが全部のvisitsの合計(総Visits数)ということなのでしょうか。
http://203.138.189.63/cgos/viewer.cgi?19x19/SGF/2023/02/14/3129.sgf#wgo_0={%22goto%22:{%22m%22:999}}
> どういう設計意図
20年前にえいや!とDonさんが作ったので大雑把なところはあるのかも・・・。
> たぶん3.8が
今動いているのも Python 3.8.10 だったので3.8にしてみます。
move: XXの前までが盤面の情報で、それ以降が第1候補の内容です。
表記をもうちょっと考える必要ありますね。
読み筋と入り棋譜をprotobuf形式にしてバイナリフォーマットに変換するテストプログラムを作ってみました。
https://github.com/zakki/cgos/tree/genmove_analyze_protobuf
224K 2450.sgf
64K 2450.sgf.gz
52K 2450.sgf.bz2
48K 2450.sgf.xz
92K 2450.pb
52K 2450.pb.gz
44K 2450.pb.bz2
40K 2450.pb.xz
生データ自体は期待通りに半分以下に縮むんですが、圧縮後のサイズは8割程度です。
protobufにする場合、sgfを静的ファイルとして扱うんじゃなく、protobufをsgfにするCGIやアプリケーションサーバーを動かす必要あります。
負荷的にどっちがいいか微妙な線に見えますがどうでしょうか?
バイナリフォーマットの実験、ありがとうございます。
圧縮した場合は、それほど違いはないのですね。
悩ましいですが、sgfのままで、Apacheのgzip圧縮を選択肢に残したままの方が
使い勝手がいい気がします。
本サーバーに適用すると、以前のPythonクライアントを使っている人が対局できないかもしれません。
Pythonクライアントを使ってる人も当然いますよね…
% sqlite3 /home/cgosboar/19x19/cgos.state
sqlite> select * from clients;
とかで統計出ると思いますがどうでしょうか?
https://github.com/zakki/cgos/issues/15
yss-aya.com の19路だと4%くらいがPythonクライアント?みたいです。
独自の人もかなりいます。表記を変えてるだけかもしれませんが。
メールアドレスっぽいのが入ってたのは削除してます。
あまりよく分かってませんが古いPython Clientは改行なしで
送信してた?ということでしょうか。
もともとの仕様があいまい?、が原因でしたら新サーバでは
古いPyhton Cilentの場合、新しいのを使ってね、と接続切るのもありかと思います。
sqlite> select * from clients;
e1 cgosGtp 0.98 alpha - engine client for CGOS Windows-x86 by Don Dailey|99095
e1 cgosPython 0.3.0 beta|21789
v1 cgosview 0.32 Windows-x86 by Don Dailey|9849
e1 myCtest|134765
e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86 by Don Dailey|401
e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey|374646
e1 cgosGtp 0.98 alpha - engine client for CGOS Windows-amd64 by Don Dailey|102589
v1 cgosview 0.32 Linux-x86_64 by Don Dailey|870
v1 cgosview 0.32 Darwin-x86_64 by Don Dailey|1789
e1 cgosGtp 0.98 alpha - engine client for CGOS Darwin-x86_64 by Don Dailey|3268
v1 cgosview 0.35 Windows-x86 by Don Dailey|21
e1 CGOS tcl engine client 1.2 Linux-x86_64 by Don Dailey|1
v1 cgosview 0.35 Darwin-x86_64 by Don Dailey|1
e1 cgosPython 0.3.0 betaquit|79
v1 cgosview 0.32 Linux-x86 by Don Dailey|271
v1 cgosview 0.32 Windows-amd64 by Don Dailey|5
v1 cgosview 0.32 Darwin-ppc by Don Dailey|3
e1 JingSiWeiqi test - by yongjian, website: www.weiqiba.com|5
e1 JingSiWeiqi - yongjian(QQ80101277), home: www.weiqiba.com|153
e1 zen7_test1|6
e1 MaruCgos 3.x|280
e1 prosgf_05x256A-05k - 5x256 LZ Superivsed on 48k Pro SGFs|1
e1 prosgf_05x256A-05k - 5x256 LZ Supervised on 48k Pro SGFs|3
e1 Leela 0110 w/ponder. i3570k 4.4ghz_GTX-1070|2
e1 prosgf_10x256A-01k - 10x256 LZ Supervised on 48k Pro SGFs|4
e1 prosgf_10x256A-03k - 10x256 LZ Supervised on 48k Pro SGFs|3
e1 prosgf_10x256A-05k - 10x256 LZ Supervised on 48k Pro SGFs|3
e1 Leela 0110 w/Tengen. i3570k 4.4ghz_GTX-1070|64
e1 prosgf_10x256A-78k - 10x256 LZ Supervised on 150,000 SGFs|66
e1 prosgf_10x256A-78k - 10x256 LZ Supervised on 150k SGFs|1
e1 LZSUP_10x256C-103k - 10x256 LZ Supervised on 250,000 SGFs|9
e1 LZSUP_10x256E-103k - 10x256 LZ Supervised on 250,000 SGFs|12
e1 cgosPython 0.3.0 with edits|8356
e1 cgosGtp 0.98 alpha - engine client for CGOS [Windows-x86] by Don Dailey|1
e1 ZiGo cgosGtp 0.2|7
v1 ZiGo cgosGtp 0.2|100
e1 ZiGo|257
v1 ZiGo|88
e1 ZiGo-Test|5
v1 leela_0110|2
v1 cgosview 0.32 deepleela|2359
v1 cgosview 0.32 deepleela
quit|2
v1 cgosview 0.33 deepleela|273
v1 cgosview 0.33 deepleela
observe 430528
|1
v1 cgosview 0.33 deepleela
observe 430530
|1
e1 MaruCgos 4.x|24
e1 Elfv2LCB_gtx1070 - Elfv2 on GTX1070|3
v1 cgosview 0.33 Windows-x86 by Don Dailey|85
e1 TERMINATOR - TERMINATOR weights and time management|1012
e1 TERMINATOR|1
e1 MaruCgos 6.x|18
v1 cgosview 0.33 deepleela_yama|18
v1 cgosview 0.33 deepyama|3
sqlite>
現在のテストサーバでは下でした。
sqlite> select * from clients;
e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey
|35
e1 cgosPython 0.3.1 beta genmove_analyze
|267
e1 cgosPython 0.3.1 beta
|1
v1 cgosview 0.32 Linux-x86_64 by Don Dailey
|8
Pythonで受信している分だけのデータを即座に取得する方法がないと思ってたので実装方法悩んでましたが、ドキュメントがわかりづらいだけで普通に取得できたので、新旧判定を入れてみました。
ローカルでの検証ではTclクライアントと、Python2.7での旧クライアントと、Python3.10での新クライアントすべてで動作しています。
思いのほか色々なクライアントがあるんですね。直接cgosプロトコルをしゃべってるソフトも居るんでしょうか。
クライアント名をスペース区切りで解釈してどこかに"genmove_analyze"が入ってたらっていうのは今後さらにバージョン増えると拡張性微妙でしょうか?
ブラウザのUserAgent判定みたいな闇が発生して実害があるくらいcgosが流行ったらその時はその時って未来に投げても問題ないようにも思います。
お疲れ様です。
こちらも更新しました。9路でPython 2.7.18 で古い cgos-client-python-0.3.0.zip を
old_python_1000p として動かしていますが、今のところ動いているようです。
ん?B+Timeとかが多発してるかもです。一晩置いてみます。
CGOSのclient名とか気にしてる人は多分いない?ので、がんがん拡張してOKだと思います。
う〜ん、途中まで普通に進行したあと数分の持ち時間使い切っての時間切れ負け多発していますね。
9路のgnugoが顕著なんですが、後はパスか投了するだけみたいな状況での時間切れになってます。
・何らかの原因でgenmove_analyze対応のクライアントが旧クライアントとして誤判定される
・読み筋が一括で受信できず旧クライアントモードなのでセパレーター待てず途中までで1応答と処理される
・途中までの読み筋は無視されて着手だけ処理される
・残りの読み筋を応答として解釈しようとするが当然CGOSフォーマットじゃないので対局止まる
みたいな状況ならあり得ると思ったんですが、SGFのCCタグ見ると正しく読み筋が入ってるのと読み筋非対応のgnugoで多発してるのとで違いそうです。
gnugoは時間調整のため、resignやpassをするときに残り時間の3/4ぐらいを長考するようにしてるのですが、その影響かも
zakkiさんのclient版でも時間調整を入れています。
残り時間が3分以上なら1手6秒sleepする、というのも入ってます(9路、19路とも)。
時間調整なし、は9路の old_python_1000p だけです。
すみません、log貼るのを忘れてました。9路はこんな感じです。
2023-02-18 10:38:12,483 - cgos_server - INFO - Games in progress: 2
2023-02-18 10:40:17,244 - cgos_server - INFO - gameover: 8859 Aya807_cn3_p10000 old_python_1000p W+88.0
2023-02-18 10:40:27,503 - cgos_server - INFO - Games in progress: 1
2023-02-18 10:42:12,568 - cgos_server - INFO - gameover: 8858 Gnugo-3.7.10-a1 k_cpu_b18uec_t6v30 B+Time
2023-02-18 10:42:27,588 - cgos_server - INFO - Games in progress: 0
2023-02-18 10:42:27,588 - cgos_server - INFO - Batch rating
2023-02-18 10:42:27,598 - cgos_server - INFO - sizeof bad_users: 1
2023-02-18 10:42:27,598 - cgos_server - INFO - defaultRatingAverage: 2063.5037913861643 : playes 4
2023-02-18 10:42:27,598 - cgos_server - INFO - maximum skip elo: 2000.0
2023-02-18 10:42:27,598 - cgos_server - INFO - ELO permutation factor to be used: 3000.0
2023-02-18 10:42:27,598 - cgos_server - INFO - will schedule: 4 players
2023-02-18 10:42:27,601 - cgos_server - INFO - starting k_cpu_b18uec_t6v30 2734 old_python_1000p 1739
2023-02-18 10:42:27,603 - cgos_server - INFO - starting go11_4000p 1563 Aya807_cn3_p10000 2218
2023-02-18 10:42:30,607 - cgos_server - INFO - Active viewers: 0
2023-02-18 10:42:30,608 - cgos_server - INFO - match-> k_cpu_b18uec_t6v30(2734) old_python_1000p(1739)
2023-02-18 10:42:30,608 - cgos_server - INFO - match-> go11_4000p(1563) Aya807_cn3_p10000(2218)
2023-02-18 10:42:45,609 - cgos_server - INFO - Games in progress: 2
2023-02-18 10:44:03,862 - cgos_server - INFO - [Gnugo-3.7.10-a1] gave improper response to gameover: PASS
2023-02-18 10:44:04,865 - cgos_server - INFO - reader ended Gnugo-3.7.10-a1
2023-02-18 10:44:04,866 - cgos_server - INFO - disconnected: 63
2023-02-18 10:44:09,883 - cgos_server - INFO - Connection from ('122.26.75.133', 9404)
2023-02-18 10:44:09,904 - cgos_server - INFO - Client 64 old-python-client:False 75
2023-02-18 10:44:09,904 - cgos_server - INFO - client: e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey
2023-02-18 10:44:09,922 - cgos_server - INFO - [Gnugo-3.7.10-a1] logged on analyze: False
2023-02-18 10:44:09,922 - cgos_server - INFO - is Gnugo-3.7.10-a1 currently playing a game?
2023-02-18 10:44:09,923 - cgos_server - INFO - testing 8860 k_cpu_b18uec_t6v30 old_python_1000p
CrazyStoneがタイムアウト負けしたときにhtmlでのレーティング表示がおかしくなってた件で、残り時間がレーティングに代入されてたのを修正したんですが、参照するTcl版の場所を読み違えていて、15秒に1回そのタイミングで思考中の側のプレイヤーの持ち時間がその1手の消費時間分だけ減るバグを作りこんでました。
終局以前での問題は持ち時間がtime_leftで更新され続けることと、1手の消費時間が短く差が小さいのでまぎれてましたが、最後の手で時間ぎりぎりまで長時間待つことで顕在化しました。
すみませんが再度更新おねがいします。
あとデバッグのためにサーバーのログ出力先を設定で選べるようにしました。
ログファイル要らなければ log.ini の fileHandler を消してください。
ログに解説付けると次のような感じでした。
2023-02-18 10:40:27,503 - cgos_server - INFO - Games in progress: 1
2023-02-18 10:42:12,568 - cgos_server - INFO - gameover: 8858 Gnugo-3.7.10-a1 k_cpu_b18uec_t6v30 B+Time
# ↑ 対局が時間切れで終了
2023-02-18 10:44:03,862 - cgos_server - INFO - [Gnugo-3.7.10-a1] gave improper response to gameover: PASS
# ↑ 時間切れから1分51秒後にgenmoveのPASSが送られてくるが、対局終了後の応答なので不正な応答扱い
2023-02-18 10:44:04,865 - cgos_server - INFO - reader ended Gnugo-3.7.10-a1
2023-02-18 10:44:04,866 - cgos_server - INFO - disconnected: 63
# ↑ エラーとして接続を切断
2023-02-18 10:44:09,883 - cgos_server - INFO - Connection from ('122.26.75.133', 9404)
2023-02-18 10:44:09,904 - cgos_server - INFO - Client 64 old-python-client:False 75
# ↑ Tcl版か新Pythonクライアント扱いで1行ずつ読むモードを使う
2023-02-18 10:44:09,904 - cgos_server - INFO - client: e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey
2023-02-18 10:44:09,922 - cgos_server - INFO - [Gnugo-3.7.10-a1] logged on analyze: False
ありがとうございます!こちらも対応させました。
古いClient対応関連のBugではなかったのですか。
ログはコンソールにも流れてると状況が分かってうれしいのですが
log.ini をどう変更すればいいでしょうか?
https://github.com/zakki/cgos/blob/genmove_analyze/server-python/log.ini#L22
ここのログレベルがコンソール出力の設定で、INFOかDEBUGにすると色々出ます。
ありがとうございます。
とりあえずDEBUGで試してみます。
cgi.dbを見るのをやめてcgos.stateを見るようにしたら
あっさり時間表示は出来ました。yss-aya.comとテストサーバ、両方で適用しています。ありがとうございました。
・・・あれ、黒番での時間がおかしいですね。なぜだろう。
単なるtypoでした。
yss-aya.comでもPython 3.8.16 だと無事に動きました。
ただ3.8.16でも同じエラーは出たので、結局、下で解決したっぽいです。
# apt-get install libsqlite3-dev
~/junk/Python-3.8.16$ ./configure --enable-loadable-sqlite-extensions
あと、client側の要望としてcgos.logとengine.logが巨大になるので
sample.cfgで保存しない設定もできないでしょうか?
# Second engine 用の設定とか、GTPObserver: は削除していいかと思います。(もしくは別のサンプルに)
Name = Gnugo Level 8 も、ややこしいので削除でいいかと思います。
SGFDirectory も削除か、起動時にディレクトリ作成、または保存しないオプションがあると便利かと思います。
https://github.com/zakki/cgos/blob/genmove_analyze/client-python/sample.cfg
> # apt-get install libsqlite3-dev
> ~/junk/Python-3.8.16$ ./configure --enable-loadable-sqlite-extensions
CygwinのPython 3.9.10やUbuntu 22.04のPython 3.10.6だとデフォルトでimport sqlite3だけで行けたんですが、必ず使えるってわけでもないんですね。
> あと、client側の要望としてcgos.logとengine.logが巨大になるので
> sample.cfgで保存しない設定もできないでしょうか?
> # Second engine 用の設定とか、GTPObserver: は削除していいかと思います。(もしくは別のサンプルに)
> Name = Gnugo Level 8 も、ややこしいので削除でいいかと思います。
> SGFDirectory も削除か、起動時にディレクトリ作成、または保存しないオプションがあると便利かと思います。
LogFile でログファイル名を指定可能にして、指定されていないときにファイル書き出しをしないようにしました。
Name は省略可能にしました。
SGFDirectory はもともと省略可能ですが、追加でディレクトリが存在しない場合に作成するようにしました。
ところでこのプロジェクトの名前やリポジトリどうしたもんでしょう。
とりあえず実験的にやってコーディング面だけ気にしてましたが、Don Daileyいなくてcomputer-go MLもない状況で、CGOSやcgosPython 0.4.0を名乗るのも不味いような気もしますし、逆にメンテナンスされてないし山下さんが7年運用されてて事実上の後継者として正当って気もします。
ありがとうございます!こちらもサーバ、クライアント、ともに入れ替えました。
simple.cfg がシンプルでいいですね。
> ところでこのプロジェクトの名前やリポジトリどうしたもんでしょう。
zakkiさんがやりやすいようにされるのが一番な気がします。
一応正統?な後継だと思いますので
古いのが cgosPython 0.3.0 beta なので、
cgosPython 2.0 系?にするとかはどうでしょうか?
CGOS本体は app-cgos 3.0 らしいので、4.0とかでも。
Donさんが6年ですから、いつのまにか超えてたのですね・・・。
現在もKataGoがいるのでかろうじて、という感じで動かすものがあるのはありがたいです。
> cgi.dbがデータ少ない代わりにwとbにインデックス指定してあるのは
webuild.tclでcgi.dbを白黒、個別にみてたためのようです。
cgos.stateを見るようにしたら9路の net_4k.html の作成に12秒ぐらいかかって、全部のhtmlを作るのに
1局終わってしまうぐらい時間かかるようになってました。
以前のだと0.1秒ぐらいです。さすがに Gnugo-3.7.10-a1.html は20秒ぐらいかかるのですが。
index偉大ですね。今は9路だけはtimeなしの昔ので動かしてます。
https://github.com/yssaya/CGOS/blob/main/server/webuild.vfs/lib/app-webuild/webuild.tcl#L63
> cgosPython 2.0 系?にするとかはどうでしょうか?
> CGOS本体は app-cgos 3.0 らしいので、4.0とかでも。
とりあえずそれで行きます。
短期的に開発やめたりいなくなったりする予定ははありませんが、山下さんもGitHubリポジトリのCollaborator権限要ります?
> 以前のだと0.1秒ぐらいです。さすがに Gnugo-3.7.10-a1.html は20秒ぐらいかかるのですが。
全140万局中gnugoが33万局あるんすね…
webuildについて、今のところ仮実装ですが、こんな感じのテンプレート化するのって運用的にどうでしょう?
ダミーデータだと40万件集計しても0.5秒くらいなのでちゃんとデータ生成しないとパフォーマンスの話はしづらそうです。
https://github.com/zakki/cgos/blob/new-webuild/server-python/cgos/webuild_template/crosstable.jinja.html
> 山下さんもGitHubリポジトリのCollaborator権限要ります?
もしお手数でなければぜひお願いします。
> こんな感じのテンプレート化するのって運用的にどうでしょう?
よくわかってないのですが、
Gnugo-3.7.10-a1.html が呼ばれた時に動的に作って返す、という感じでしょうか?
現在対局中のbotのデータだけを保持して1局ごとに更新する、
とかすれば最小のコストで済みそうな気はします。
やや気がかりなのはcgosのページはクローラーが結構来るので(1日5000ぐらい)
大昔のbotを含めて再計算する必要がありそうな点です。
現在のyss-aya.comは CPUが400MHz、メモリ1GB、とかなり貧弱な
マシンなので耐えきれないかも。
すみません、説明不足ですね。
サーバーと同じようにTcl版のwebuildをPythonにベタ移植してみています。
現状まるっと移植でTcl版と同じく一定時間ごとにデータファイルみて更新があれば静的HTMLを生成していて、Tcl版と同じくCGIやHTTPアプリケーションサーバー的な機能はありません。
Tcl版だとソースコード中にHTMLの断片が分散していて個人的には見づらいので
データ処理はPythonでやってHTML出力はPythonのテンプレートエンジンを使ってます。
たまにCGOSサイトのHTMLの内容を変更されてますが、Tclソース編集するのとjinja書式のテンプレート編集するの、どっちが楽そうでしょうか?
基本的にwebuildは運用時に使うだけで、自分用のAI開発用ローカルサーバーとしては対局サーバーだけあれば足りるので山下さんの好みのやり方がいいかなと思います。
それとは平行して消費時間入りHTML生成も一瞬で終わるように高速化できないかなぁ…
> サーバーと同じようにTcl版のwebuildをPythonにベタ移植
そうでしたか。
> Tclソース編集するのとjinja書式のテンプレート編集するの、どっちが楽そうで
webuild.tclもpythonで書き換えていただくならば
tcltkの呪縛?から解放されて助かります。
とりあえず動くようになったと思います。
https://github.com/zakki/cgos/tree/new-webuild
cd server-python
pip3 install -r requirements.txt
で依存ライブラリインストールして
python3 cgos/webuild.py cgos9.ini
で起動します。
処理速度に関して元々25秒くらいだったのが、仕様変更を許容できれば1秒以下になりそうです。
tclkit-linux-x86_64 webuild.vfs/main.tcl
24.89s user 2.17s system 99% cpu 27.068 total
% sqlite3 cgos.state
create index white on games(w);
create index black on games(b);
でインデックス追加すると8倍速になって、
tclkit-linux-x86_64 webuild.vfs/main.tcl
3.07s user 0.35s system 99% cpu 3.423 total
Python版でさらに倍くらいになって、
python3 cgos/webuild.py cgos9.ini
1.46s user 0.27s system 99% cpu 1.729 total
次のようなクロステーブルの対戦相手一覧表の挙動変更でさらに高速化しました。
* レーティングを最後に対局した時点のレーティングから現時点の最新レーティングに変更
* 相手ごとの勝敗数カウントをTclやPython実装ではなくSQL実装に変更
python3 cgos/webuild.py cgos9.ini
0.96s user 0.31s system 99% cpu 1.272 total
課題はcgos.stateのインデクス分のサイズ増加が問題ない範囲かと、HTMLのレーティング表示が変わるのが許容できるか次第です。
ありがとうございます!
ただテストサーバで試すと下で動かないようです。
$ git clone -b new-webuild https://github.com/zakki/cgos.git new_webuild
$ cd new_webuild/server-python/
$ cp -p ../../cgos/server-python/cgos9.ini ./
$ sudo apt install python3-pip
$ pip3 install -r requirements.txt
$ python3 cgos/webuild.py cgos9.ini
Traceback (most recent call last):
File "cgos/webuild.py", line 32, in <module>
from util.timeutils import now_string
ModuleNotFoundError: No module named 'util.timeutils'
$ python3 --version
Python 3.8.10
コミットから漏れてたのを追加しました。
ありがとうございます!テストサーバで動かしてみました。
Recent ??? Gamesの数値がないのと、
下だと一番上の結果が1月27日と少し古いようです。
http://203.138.189.63/cgos/9x9/cross/Aya807_cn3_p10000.html
高速化で全棋譜じゃなくて300棋譜まで表示するために300棋譜*2(白番+黒番)だけSELECTするようにしたんですが、新しい300棋譜*2じゃなくて古い300棋譜*2を取得しちゃってました。
ありがとうございます!
テストサーバだけですが、問題なく動いてるようです。
正確ではないですが cgos.state のサイズは
9路 14000局 1462272 -> 2195456 1.50倍に増加
19路 5600局 892928 -> 933888 1.04倍に増加
9路 140000局 142537728 -> 219807744 1.54倍に増加 209MB、yss-aya.com
と、9路では結構増えますね。
実際の140万局でも1.5倍。ただ209MBで
半面cgi.dbはもう必要なくなる?ので全体の節約にはなりそうです。
BayesELOの計算でもcgos.stateのみ参照で、cgi.dbの存在理由は
よくわからないのですが。
> BayesELOの計算でもcgos.stateのみ参照で、cgi.dbの存在理由は
cgi.db関連のソースコード削除して整理しようとしてみて気付いたんですが、cgos.stateは対局開始前にINSERTされてその時点のレーティングになってて、cgi.dbは対局後にレーティング計算されてINSERTされるのが違いますね。
> cgi.dbは対局後にレーティング計算
なるほど。それで時間入れると、最新の対局結果のレートがずれるようになったのですか。
今まではこの仕様だったので慣れてましたが、最新レートは
一番上に出ますし、cgi.dbは削除の方向でいいと思います。
cgi.dbを使わないようにして、パスワードのハッシュ化に対応しました。
Tcl版サーバーでDBを使えなくなるので、デフォルトではパスワードのハッシュ化はなしになってます。
お疲れ様です。
テストサーバの方を
hashPassword = True
にして再起動しました。
これ、例えばAnchorのパスワードを忘れてしまって再設定したい場合はどうすればいいでしょうか?
あと、サーバを定常終了させたときに、pyhtonのclientは接続切れて終了してしまうのですが、
これをtcl版のように1分ぐらい待って何度も再接続する、と変更できないでしょうか?
> これ、例えばAnchorのパスワードを忘れてしまって再設定したい場合はどうすればいいでしょうか?
山下さん(サーバー管理者)がってことなら、次のような感じでハッシュ求めて、sqliteコマンドでpasswordテーブルを上書きすればリセットできます。
python3
>>> from passlib.context import CryptContext
>>> passctx = CryptContext()
>>> passctx.load_path("cgos19.ini")
>>> passctx.hash("new-passwod")
一般にってことだと今はユーザー名とパスワードしか登録しないのでどうしようもありません。
長期的にはウェブアプリ作って、メールアドレス登録してのパスワードリセットやダッシュボード使えると楽しそうだとは思います。
> あと、サーバを定常終了させたときに、pyhtonのclientは接続切れて終了してしまうのですが、
> これをtcl版のように1分ぐらい待って何度も再接続する、と変更できないでしょうか?
この辺でkillfileでの全体終了とエラーでのエンジン単位終了を切り分ければ行けそうな気はします。
https://github.com/zakki/cgos/blob/genmove_analyze/client-python/src/cgosclient.py#L594
これで上書きすればOKなのですね。ありがとうございます。
今までPassword忘れた、とかの連絡は一度もないので
個々のユーザの変更は特に必要ないと思います。
他人のPasswordも知りたくないので暗号化は歓迎です。
> この辺でkillfileでの全体終了と
ちょっと面倒そうですね。とりあえずshell scriptでループにしておきます。
wgoでの表示がルート局面の値と着手の値がわかりづらかったのと、着手の勝率が0〜1になってたのを修正しました。
お疲れ様です!
こちらも更新させました。コメント欄にRootとPVが表記されてわかりやすくなってますね。
安定してるので本番に移行しようと思います。
https://github.com/zakki/cgos/wiki/GTP-tournament-game-expansion
への要望ですが、
CHARS から / を削除
CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+"
-1.0 = 'A' ... 0.0 = 'f' ... 1.0 = '+' と 0 が 'f' なのがあるといいかも。
説明に全部で63文字、という数値が入ってる方がいいかも。
GTP exampleの "ownership"から '/' を削除
pvの最初のO15を削除
"move": "O15",
"pv": "O15 P17 O18 N17 O8 P6 N7 Q7 O6 P5",
Proposed Extension. は先頭にした方がいいかも。
着手がpass、の時、読み筋、勝率、などが消えるのは仕様でOKでしょうか?
19路でownershipを361文字以上にしたり、英数字以外の文字列を送ったり、
361個所のpvを送ったり、とかしてみましたがクライアントがエラーで止まることはあっても
サーバが落ちることはありませんでした。
http://203.138.189.63/cgos/19x19/cross/bad_manner.html
棋譜は1つ10MBとか巨大になってますが。
棋譜は1か月を過ぎたらownershipを消して
;W[dp]WL[900]CC[{"moves":[{"move":"D4","visits":3,"winrate":0.615066,"score":0.982206,"prior":0.447626,"pv":"D16"}, ... ,"ownership":"...","visits":5,"winrate":0.6137463999999999,"score":0.8778387999999999}]
下のような形式に変換するつもりです。最初のwinrate,score,pvのみです。72682 byteが 5635 byteになります。棋譜だけだと 1917 byteです。
;W[dp]WL[900]C[w0.615s1:D16]
http://203.138.189.63/cgos/viewer.cgi?19x19/SGF/2023/01/31/1134.sgf
元SGF http://203.138.189.63/cgos/19x19/SGF/2023/01/31/1134.sgf
変換SGF http://203.138.189.63/cgos/19x19/SGF/2023/01/31/1134pv2.sgf
提案ありがとうございます。Wikiの記述は修正しました。
設定でPython側でsgf保存時にgzipできるようにして、またそのsgf.gzをApacheで使う設定サンプルを作りました。
Tclビューアー残すんであれば、dbrecのレコードもgzipするとデータベースサイズ減らせそうですね。
修正ありがとうございます。
4月2日に移行しようと思います。
Apacheのgz設定もありがとうございます。動かせるか試してみます。
最初の本番環境への移行は失敗しました。
時間が取れた時に再度試してみます。
# pip3 install -r requirements.txt
や下が
$ pip3 install passlib
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
で失敗し、
# apt-get install libssl-dev
をやってもダメで
Python-3.8.16 でなく pyenv で 3.8.5 を入れてみようと思ったのですが
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
で失敗。
# openssl version
OpenSSL 1.0.1e 11 Feb 2013
と古いのが原因かもしれません。
仕方がないので cgos.py で passlib を使っている箇所を暗号化なしに書き換えたのですが
起動はして終了はしないものの、下記のエラーをはいて、マッチングはされるようですが
対局のSGFはサイズ0で書き込まれない、という感じです。
OSが古い(debian 7)のがすべての原因だとは思うのですが。
ログは下のような感じです。IPの上位は消してます。
cgos.pyにはアンカー同志の対戦を減らす個別処理も追加しています。
2023-04-17 17:26:38,914 - cgos_server - INFO - "(CGOS) 19x19 Computer Go Server" up and running at 2023-04-17 08:26:38 GMT
2023-04-17 17:26:38,914 - cgos_server - INFO - datafile:'/home/yss/cgosboar/19x19/wdata.txt' -> workdir:'/home/yss/cgosboar/19x19'
2023-04-17 17:26:38,915 - cgos_server - ERROR - Skip game_archive_database
2023-04-17 17:26:38,917 - cgos_server - INFO - Serving on ('0.0.0.0', 6819), ('::', 6819, 0, 0)
2023-04-17 17:26:39,209 - cgos_server - INFO - Connection from ('**.***.39.211', 49098)
2023-04-17 17:26:39,412 - cgos_server.client - INFO - Client 0 old-python-client:True 26
2023-04-17 17:26:39,413 - cgos_server - INFO - client: v1 cgosview 0.33 deepleela
2023-04-17 17:26:39,425 - cgos_server - INFO - [0] logged on as viewer
2023-04-17 17:26:39,620 - cgos_server - ERROR - Unexpected Error: 0
2023-04-17 17:26:39,621 - cgos_server - ERROR - Traceback (most recent call last):
File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 1180, in handle_client
viewer_respond(client, line)
File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 598, in viewer_respond
req, param = data.split(maxsplit=1)
ValueError: not enough values to unpack (expected 2, got 0)
2023-04-17 17:26:39,623 - cgos_server - ERROR - [' File "cgos/server.py", line 32, in <module>\n runServer()\n', ' File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 1662, in runServer\n asyncio.run(server_main())\n', ' File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run\n return loop.run_until_complete(main)\n', ' File "/usr/local/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete\n self.run_forever()\n', ' File "/usr/local/lib/python3.8/asyncio/base_events.py", line 570, in run_forever\n self._run_once()\n', ' File "/usr/local/lib/python3.8/asyncio/base_events.py", line 1859, in _run_once\n handle._run()\n', ' File "/usr/local/lib/python3.8/asyncio/events.py", line 81, in _run\n self._context.run(self._callback, *self._args)\n', ' File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 1189, in handle_client\n logger.error(traceback.format_stack())\n']
2023-04-17 17:26:39,624 - cgos_server - INFO - disconnected: 0
ログの続きです。
2023-04-17 17:26:52,569 - cgos_server - INFO - Connection from ('***.**.178.236', 38898)
2023-04-17 17:26:52,620 - cgos_server - INFO - Connection from ('***.**.178.236', 38900)
2023-04-17 17:26:52,683 - cgos_server.client - INFO - Client 1 old-python-client:True 0
2023-04-17 17:26:52,683 - cgos_server.client - INFO - reader ended 1
2023-04-17 17:26:52,683 - cgos_server - INFO - disconnected: 1
2023-04-17 17:26:52,750 - cgos_server.client - INFO - Client 2 old-python-client:True 0
2023-04-17 17:26:52,750 - cgos_server.client - INFO - reader ended 2
2023-04-17 17:26:52,750 - cgos_server - INFO - disconnected: 2
2023-04-17 17:26:53,597 - cgos_server - INFO - Connection from ('***.**.178.236', 38902)
2023-04-17 17:26:53,711 - cgos_server.client - INFO - Client 3 old-python-client:True 0
2023-04-17 17:26:53,711 - cgos_server.client - INFO - reader ended 3
2023-04-17 17:26:53,711 - cgos_server - INFO - disconnected: 3
2023-04-17 17:27:06,633 - cgos_server - INFO - Connection from ('***.**.75.133', 41139)
2023-04-17 17:27:06,633 - cgos_server - INFO - Connection from ('***.**.75.133', 41138)
2023-04-17 17:27:06,634 - cgos_server - INFO - Connection from ('***.**.75.133', 41137)
2023-04-17 17:27:06,641 - cgos_server.client - INFO - Client 4 old-python-client:False 75
2023-04-17 17:27:06,642 - cgos_server - INFO - client: e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey
2023-04-17 17:27:06,645 - cgos_server.client - INFO - Client 5 old-python-client:False 75
2023-04-17 17:27:06,645 - cgos_server.client - INFO - Client 6 old-python-client:False 75
2023-04-17 17:27:06,645 - cgos_server - INFO - client: e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey
2023-04-17 17:27:06,647 - cgos_server - INFO - client: e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey
2023-04-17 17:27:06,660 - cgos_server - INFO - [LZ_282_0410_p400] logged on analyze: False
2023-04-17 17:27:06,660 - cgos_server - INFO - is LZ_282_0410_p400 currently playing a game?
2023-04-17 17:27:06,665 - cgos_server - INFO - [kata1_b18s589v50] logged on analyze: False
2023-04-17 17:27:06,666 - cgos_server - INFO - is kata1_b18s589v50 currently playing a game?
2023-04-17 17:27:06,666 - cgos_server - INFO - [kata145b20s530v400] logged on analyze: False
2023-04-17 17:27:06,667 - cgos_server - INFO - is kata145b20s530v400 currently playing a game?
2023-04-17 17:27:07,441 - cgos_server - INFO - Connection from ('***.**.178.236', 38904)
2023-04-17 17:27:07,568 - cgos_server.client - INFO - Client 7 old-python-client:True 0
2023-04-17 17:27:07,568 - cgos_server.client - INFO - reader ended 7
2023-04-17 17:27:07,568 - cgos_server - INFO - disconnected: 7
ログの3つ目です。
2023-04-17 17:27:09,130 - cgos_server - INFO - Connection from ('***.**.224.158', 33918)
2023-04-17 17:27:09,187 - cgos_server - INFO - Connection from ('***.**.224.158', 33916)
2023-04-17 17:27:09,391 - cgos_server.client - INFO - Client 8 old-python-client:False 75
2023-04-17 17:27:09,391 - cgos_server - INFO - client: e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey
2023-04-17 17:27:09,487 - cgos_server.client - INFO - Client 9 old-python-client:False 75
2023-04-17 17:27:09,487 - cgos_server - INFO - client: e1 cgosGtp 0.98 alpha - engine client for CGOS Linux-x86_64 by Don Dailey
2023-04-17 17:27:09,947 - cgos_server - INFO - [Leela-0.9.0_5k] logged on analyze: False
2023-04-17 17:27:09,947 - cgos_server - INFO - is Leela-0.9.0_5k currently playing a game?
2023-04-17 17:27:10,028 - cgos_server - INFO - [LeelaZero-287_8p] logged on analyze: False
2023-04-17 17:27:10,028 - cgos_server - INFO - is LeelaZero-287_8p currently playing a game?
2023-04-17 17:27:22,804 - cgos_server - INFO - Connection from ('***.**.178.236', 38906)
2023-04-17 17:27:22,857 - cgos_server - INFO - Connection from ('***.**.178.236', 38908)
2023-04-17 17:27:22,919 - cgos_server.client - INFO - Client 10 old-python-client:True 0
2023-04-17 17:27:22,919 - cgos_server.client - INFO - reader ended 10
2023-04-17 17:27:22,919 - cgos_server - INFO - disconnected: 10
2023-04-17 17:27:22,972 - cgos_server.client - INFO - Client 11 old-python-client:True 0
2023-04-17 17:27:22,972 - cgos_server.client - INFO - reader ended 11
2023-04-17 17:27:22,972 - cgos_server - INFO - disconnected: 11
2023-04-17 17:27:23,830 - cgos_server - INFO - Connection from ('***.**.178.236', 38910)
2023-04-17 17:27:23,919 - cgos_server - INFO - Games in progress: 0
2023-04-17 17:27:23,919 - cgos_server - INFO - Batch rating
2023-04-17 17:27:26,819 - cgos_server - INFO - sizeof bad_users: 22
2023-04-17 17:27:26,819 - cgos_server - INFO - defaultRatingAverage: 3602.8928798145716 : playes 5
2023-04-17 17:27:26,819 - cgos_server - INFO - maximum skip elo: 1531.4625593358196
2023-04-17 17:27:26,819 - cgos_server - INFO - ELO permutation factor to be used: 2297.1938390037294
2023-04-17 17:27:26,819 - cgos_server - INFO - will schedule: 5 players
2023-04-17 17:27:26,920 - cgos_server - INFO - starting kata1_b18s589v50 4163? kata145b20s530v400 4071
2023-04-17 17:27:26,920 - cgos_server - INFO - delete this match. LeelaZero-287_8p, LZ_282_0410_p400, r=0.823166631648146
ログの最後です。
2023-04-17 17:27:29,926 - cgos_server - INFO - Active viewers: 1
2023-04-17 17:27:29,926 - cgos_server - INFO - match-> kata1_b18s589v50(4163?) kata145b20s530v400(4071)
2023-04-17 17:27:29,927 - cgos_server.client - INFO - Client 12 old-python-client:True 0
2023-04-17 17:27:29,927 - cgos_server.client - INFO - reader ended 12
2023-04-17 17:27:29,927 - cgos_server - INFO - disconnected: 12
2023-04-17 17:27:34,959 - cgos_server - ERROR - Unexpected Error: 6
2023-04-17 17:27:34,959 - cgos_server - ERROR - Traceback (most recent call last):
File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 1183, in handle_client
player_respond(client, line)
File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 661, in player_respond
return _handle_player_genmove(sock, data)
File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 1093, in _handle_player_genmove
saveSgf(gid, games[gid], "?", "")
File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 523, in saveSgf
f.write(sgfString.encode(ENCODING))
TypeError: write() argument must be str, not bytes
2023-04-17 17:27:34,959 - cgos_server - ERROR - [' File "cgos/server.py", line 32, in <module>\n runServer()\n', ' File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 1662, in runServer\n asyncio.run(server_main())\n', ' File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run\n return loop.run_until_complete(main)\n', ' File "/usr/local/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete\n self.run_forever()\n', ' File "/usr/local/lib/python3.8/asyncio/base_events.py", line 570, in run_forever\n self._run_once()\n', ' File "/usr/local/lib/python3.8/asyncio/base_events.py", line 1859, in _run_once\n handle._run()\n', ' File "/usr/local/lib/python3.8/asyncio/events.py", line 81, in _run\n self._context.run(self._callback, *self._args)\n', ' File "/home/yss/go/zakki_cgos/server-python/cgos/app/cgos.py", line 1189, in handle_client\n logger.error(traceback.format_stack())\n']
2023-04-17 17:27:34,960 - cgos_server - INFO - disconnected: 6
2023-04-17 17:27:37,691 - cgos_server - INFO - Connection from ('***.**.178.236', 38912)
2023-04-17 17:27:37,813 - cgos_server.client - INFO - Client 13 old-python-client:True 0
2023-04-17 17:27:37,813 - cgos_server.client - INFO - reader ended 13
2023-04-17 17:27:37,813 - cgos_server - INFO - disconnected: 13
2023-04-17 17:27:44,934 - cgos_server - INFO - Games in progress: 1
すみません、恐らくsgfのgzip対応の時にgzip使わないケースのテスト漏れでcgos/app/cgos.pyの
with gzip.open(f"{dest_dir}/{gid}.sgf.gz", "w") as f:
with open(f"{dest_dir}/{gid}.sgf", "w") as f:
の2行が本当は
with gzip.open(f"{dest_dir}/{gid}.sgf.gz", "wb") as f:
with open(f"{dest_dir}/{gid}.sgf", "wb") as f:
ですね。
Pythonをソースからインストールだとapt-get install libssl-dev後に再ビルドが必要な気がしますが、自分ではやったことありません。
sgfの保存自体が失敗してるかも、でしたか。
deepleelaのveiwerクライアントが即座に接続してきて、その影響なのかな?とか思ってました。
(Viewerのログイン禁止でもいいと思いますが)
sgfのgzip圧縮もテストサーバだとあっさり成功したのですが
debian7だとうまくいかず見送ってます。
VPSのOS更新ができないのですよね。新しいサーバ借りる方が将来的にも正解な気はしますが・・・。
近日中に再度試してみます。
Debian 7は5年前にEOLでサポート切れてて、Debian 9ですらEOLで商用サポートだけの状況なので、そのVPSはセキュリティガン無視のダメダメか、自力でバックポートする腕力にあふれてるかどっちかですね。
https://www.debian.org/News/2018/20180601
CGOSを評価値、読み筋を表示するzakkiさんのpython版サーバに移行しました。9路、13路、19路。
現在は19路の kata1_b18s614v50 だけ評価値ありで動いてます。
http://www.yss-aya.com/cgos/19x19/cross/kata1_b18s614v50.html
移行の説明とかは随時追加します。
jinja2が動かなかったのでwebuildは古いのを使ってます。
白、黒でindexをするのも忘れたので後日やる予定です。index追加しました。
私のAndroid 11のタブレット(LAVIE T8 8HD1)でFirefoxで評価値が入ってるページ
http://www.yss-aya.com/cgos/viewer.cgi?19x19/SGF/2023/05/16/864653.sgf
などを表示しようとするとOSごと固まって反応しなくなる、という現象がありました。
Firefoxは最新の113.0(2023-05-04版)です。Chromeでは問題なく表示できるのでFirefoxのバグ?というかOSのバグかもですが。
テストサーバのページでも同様にフリーズします。評価値が入ってないsgfを表示は問題ないのですが。
下のグラフクリックしての移動がWindowsだとChromeが40msでFirefoxが70msくらいですが、moto g32/Android 12/Firefox 113
.0だと体感で5秒くらいかかりますね。
proposed-extensionのwikiに以下の説明を追加しようと思ってますが
これで合ってましたでしょうか?
winrate : 自分から見た勝率。0 で負け、+1で勝ち。
score : コミを含めた自分から見た目数差。コミ7.5で盤面で黒が11目勝っているならば、黒番なら +3.5、白番なら -3.5
pv : 読み筋。最初の手を除く。"O15 P17 O18" が最善応手手順なら "P17 O18"
ownership: 地合。361個の文字列(63種類の文字)で表現される。自分の100%の地なら+1, 相手の地なら 0、を変換
visits : その手を探索した回数
prior : Policy Networkを使ってる場合の、その手の着手確率。
> ownership: 地合。361個の文字列(63種類の文字)で表現される。自分の100%の地なら+1, 相手の地なら 0、を変換
63種類になれば何でもいいんですがサンプルコードは+1〜-1を変換する実装です。
あと、wgo.jsのownershipの表示を1か所ごとではなく一括でやるようにして、Windows上のChromeとFirefoxだと10msくらいに高速化しました。問題の環境ではどうですか?
> サンプルコードは+1〜-1を変換する実装です。
そうでした。こちらに変更して追加してみます。追加しました。
> wgo.jsのownershipの表示を1か所ごとではなく一括で
ありがとうございます。こちらも差し替えました。
死石の上にも描画されて死に具合?が分かりやすくなってますね!
ただ手を進めると地合いを出力しない相手の手でも地合表示が残ってしまうようです。
http://www.yss-aya.com/cgos/viewer.cgi?19x19/SGF/2023/05/17/864785.sgf
> 問題の環境ではどうですか?
AndroidのタブレットでFirefoxを再インストールすると9路は動きました。
ただ19路は動くときとOSごと固まるときがあって固まる割合が多い感じです。
0手を表示しただけ、は問題ないのですが手を進めようとするとフリーズします。
たぶんFireFoxかOSの問題なので無視でもいいとは思いますが、OSごと落ちるページ、というのは
今のところCGOSのページだけなので、ちょっと気持ち悪くはあります。
・・・いや落ちなくなったかな?5秒ぐらい固まるのですが動いているかも。再現性がよく分からないのでもう少し試してみます。
もう一台の古いAndroid 7, HUAWEI MediaPAd M3 Lite, Firefox 84.1.4 では
9路、19路ともなんの問題もなく、待ち時間も2秒程度と快適に見れました。
手元のAndroid Firefoxだと応答速度に違和感はなくなりましたが、?で進めるとたまにどんどん次の手が表示されて行って止まらなくなります。
とりあえずはPC向けってことにして、タッチパネル最適化やレスポンシブデザインは他のサーバー機能が落ち着いてからやりたいと思います。
CGOSのトップに移行の案内を出してみました。ちょっと分かりにくいでしょうか?赤字の方がよかったかも。
ownershipが残る、の修正ありがとうございます。対応させました。
ただ白番だと、地の表示が+1と-1が反転して表示されているようです。黒番は大丈夫です。
http://www.yss-aya.com/cgos/viewer.cgi?19x19/SGF/2023/05/18/864968.sgf
あと、JSON中の最後の "]" を "\]" とするのは必要でしょうか?
Aya807_no_DL_p1000では "]" のまま
送っていたのですが SGFでは "\]" に変換されていました。
SGFの仕様では "\]" とする必要があったとは思うのですが。
どちらでもOKなら、なし、の方がスッキリしてる気はします。
cgos-genmove_analyze w
=
{"moves":[{"move":"O15","winrate":0.135,"score":-11.2,"pv":"P17 O18 N17"}\]}
play O15
それと
Proposed GTP tournament game expansion ver 0.1
のバージョンは1.0にしてしまってはどうでしょうか?
タブレットでOSが固まる現象は手数が400手近いと発生しやすいようです。
> ただ白番だと、地の表示が+1と-1が反転して表示されているようです。黒番は大丈夫です。
> あと、JSON中の最後の "]" を "\]" とするのは必要でしょうか?
修正しました。
admin_modeブランチにadminでの対局終了と再開を追加しました。
ありがとうございます!
更新して白黒ともに正常に表示されるのを確認しました。
pv手順が残る現象があるようです。下で10手目まで「>」で
進んでマウスを着手した手に合わせてpvを表示させた状態で
カーソルの「→」を押すとpvが残ったままになります。
http://www.yss-aya.com/cgos/viewer.cgi?19x19/SGF/2023/05/21/865347.sgf
Androidのタブレットで操作していて気づきました。
1手ずつ進めると落ちにくいのですがいきなり最終手に飛ぶと高確率でOSごとフリーズします。
現在、19路はkata1の最新とLZ_282_0410_p400 だけ評価値ありで
動かしています。LZはkgs_genmove_cleanupを呼ばないと
正しく動作しないので、今まで0.15だったのを0.17に変えて
ソースもlz_genmove_analyzeのソースを書き換えて動かしてます。
逆転のタイミングとかが分かってやっぱり分かりやすいですね。
http://www.yss-aya.com/cgos/viewer.cgi?19x19/SGF/2023/05/21/865347.sgf#wgo_0={"goto":{"m":94}}
色も見やすくなった気がします。LZがlizzieで動かしてるときに
画面が全部埋まる(すべての手を試すバグ?)現象も上のリンクの94手目で確認できます。
これのことだったのですね。
紹介文のサンプルの\]も直しておきました。
http://www.yss-aya.com/cgos/winrate.html
admin_modeの動作確認もしてみます。
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++)
そうなんですが、プロファイル結果見る限りではボトルネックになってるわけでもなさそうなので、私としては優先度低めです。
ES5しか動かないブラウザ対応は捨ててもいいと思うので、どうせならどこかのタイミングで for(const v of f) や class 使った書き方に変えたいです。
パッチもらえるのであれば取り込むのはやぶさかではありません。
zakkiさんへ、ご返信ありがとうございます。
> プロファイル結果見る限りではボトルネックになってるわけでもなさそう
過去の別システムを高速化した経験ですとブラウザや端末の性能などの環境で計測結果かわるので、単一の環境での計測はまだ状況が変わることはご存じと思いますが
> for(const v of f) や class 使った書き方に変えたい
別のところをより重視されているという事で失礼しました。
観戦の仕組みがより充実することをたのしみに見守ることにします!!
スコアと勝率のグラフ作成で無駄な処理を減らしました。
今度は碁石を打ってルール処理するのと碁盤の表示あたりがボトルネックになっててすぐどうこうするのは難しそうです。
ありがとうございます。こちらも差し替えました。
遅くなりましたが対局の再開が動作するのを確認しました。ありがとうございます!
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
> 手順的には中断対局が発生したらamdinでabortで対局を強制終了させて、
> 双方に再ログインしてもらって match で持ち時間を指定して再開、という流れでしょうか。
そうですね。
基本的には今までの大会でのトラブルは短時間のネットワーク切断でクライアントの再起動で結構救えそうな気はします。
> ログインしてるように見えてしまうことです。
ログイン済みになって再接続できなかったのと同じような理由で、いい対策を思いつきません。
プロトコル変更がありなら、サーバーがキープアライブ用のメッセージ送ったら、
クライアントが応答返さなければ接続切れにするみたいな方法はあると思います。
しかし現行のTclやPythonのクライアントは同期的にAIの応答待ってサーバーに結果を返すような
構造なのでそのままでは無理そうです。
> あと、コウで停止する処置
この週末は準備としてGoGame部分のユニットテストを書いてました。
> クライアントの再起動で結構救えそう
time_leftに対応してるプログラムが中断した場合はすぐに再接続してもらって
対応してない場合、再開に時間がかかる場合は
adminが手動で止めて持ち時間戻して再開、という感じがいいかもですね。
> いい対策を思いつきません。
なるほど・・・、結構大変そうですか。
プロトコル変更は大変そうなので、matchを実行してうまくいかなかったら
双方に再ログインをお願いする、という感じで運営しようかと思います。
> この週末は準備として
ありがとうございます!お手数おかけします。
> 10分ほど放置すると接続が切れてしまう
問題は対局開始を待ってるとクライアントの接続が切れてしまうことなので
1分に1度くらい
Server info: Maximum time until next round: 09:05
の代わりに
Server info: Next round will start in: 09:05
みたいなのをサーバから送ってはどうでしょうか?
コウの設定を追加しました。
iniファイルに
ko = POSITIONAL
で今まで通りスーパーコウ、
ko = SIMPLE
で2手前の局目の反復だけ禁止します。
ユニットテストでの動作と、自動対局が進むことは確認しました。
接続切れのほう試してみます。
定価3600円が1月1日限定でkindle版が499円になっています。
強い将棋ソフトの創りかた
https://www.amazon.co.jp/dp/B09KNGV1QT/
日経新聞に谷合さんのエッセイが載っています。
谷合さんの文章、とてもきれいでびっくりしました。
日経の有料記事は登録すれば無料でも月10記事まで読むことができます。
駒音 将棋棋士・谷合広紀
https://www.nikkei.com/article/DGXZQOUD2221E0S2A221C2000000/
> 将棋AIは人のような感性は持っていない。しかし、将棋AIの指す将棋は人間の将棋にはない面白さがあり、
> 将棋界を次のステージに導いてくれそうな力強さがある。将棋AIが奏でる駒音もまた、美しいのだ。
駒音 将棋棋士・谷合広紀: 日本経済新聞
https://twitter.com/HirokiTaniai/status/1610566433813204992
毎週連載なんですね。
今回のエッセイもクスっと笑えて面白いです。
喫茶店にて 将棋棋士・谷合広紀 1月11日
https://www.nikkei.com/article/DGXZQOUD284B70Y2A221C2000000/
三段リーグの年齢制限ぎりぎりだったお話です。
谷合広紀 誕生日の喜び 1月18日
https://www.nikkei.com/article/DGKKZO67671650Y3A110C2KNTP00/
オチは歩かなかった話でクスっとできます。
散歩道 将棋棋士・谷合広紀 1月25日
https://www.nikkei.com/article/DGXZQOUD1812E0Y3A110C2000000/
今週は白ご飯にかける情熱のお話でした。
日常の中にある喜び 将棋棋士・谷合広紀 2月1日
https://www.nikkei.com/article/DGXZQOUD258770V20C23A1000000/
余談ですが、谷合さんは今年の5月の選手権にもエントリーされていて
プログラム名が毎回変わっています。次はソナタ?とかでしょうか。
2022年 5月選手権 prelude (前奏曲)
2022年 11月電竜戦 Etude No.1 (練習曲 第1)
2023年 5月選手権 mazurka (マズルカ)
昨日の日経の夕刊には松本博文さんの記事も載っていたそうです。
藤井聡太人気でスポーツ誌も参入 将棋支えた多彩な雑誌
現代将棋鑑賞術(1) 将棋ライター・松本博文
https://www.nikkei.com/article/DGXZQOUD194YV0Z10C23A1000000/
今週は母校に忍び込んだ?お話でした。
旧友とともに 将棋棋士・谷合広紀 2月8日
https://www.nikkei.com/article/DGXZQOUD021950S3A200C2000000/
タイトルがものすごく難読です。「そったく」と読むそうです。
棋士とは切り離せない書道のお話で、オチまでぴったりでした。
?啄の機 将棋棋士・谷合広紀 2月15日
https://www.nikkei.com/article/DGXZQOUD0911W0Z00C23A2000000/
秒に追われる棋士のお話でした。
谷合広紀 秒読み 2月22日
https://www.nikkei.com/article/DGKKZO68674950S3A220C2KNTP00/
飼っていた猫ちゃんのお話です。
福丸 将棋棋士・谷合広紀 3月1日
https://www.nikkei.com/article/DGXZQOUD244S00U3A220C2000000/
人はこうして締め切りギリギリになるんですね、という多く人に共感(と恐怖)を得られそうなお話です。
谷合広紀 締め切りとの戦い 3月8日
https://www.nikkei.com/article/DGKKZO69076030Y3A300C2KNTP00/
師匠 将棋棋士・谷合広紀 3月15日
https://www.nikkei.com/article/DGXZQOUD1028B0Q3A310C2000000/
将棋AIは振飛車を評価しないがプロは5人に一人は振飛車党で、対抗型の経験値が溜まりやすい、は目からうろこでした。
振り飛車の現在地 将棋棋士・谷合広紀 3月22日
https://www.nikkei.com/article/DGXZQOUD1731B0X10C23A3000000/
棋力、体力 将棋棋士・谷合広紀 3月29日
https://www.nikkei.com/article/DGXZQOUD2437E0U3A320C2000000/
東京、大阪、そして新設された名古屋の将棋会館のお話です。
古くなった東京と大阪が移設される予定でクラウドファンディングで資金を募っているとのことです。
将棋会館 将棋棋士・谷合広紀 4月5日
https://www.nikkei.com/article/DGXZQOUD313GA0R30C23A3000000/
私は大阪の会館は行ったことがないので、移設前に行ってイレブンのサービスランチ(棋士がよく食べてる)を一度食べてみたいです。
知の高速道路 将棋棋士・谷合広紀 4月12日
https://www.nikkei.com/article/DGXZQOUD0775B0X00C23A4000000/
胃カメラ 将棋棋士・谷合広紀 4月19日
https://www.nikkei.com/article/DGXZQOUD145B00U3A410C2000000/
息抜き 将棋棋士・谷合広紀 4月26日
https://www.nikkei.com/article/DGXZQOUD215180R20C23A4000000/
最後の審判、という打ち歩詰と連続王手の千日手、という2つの禁じ手が同時に出てくる
将棋のルールを問う問題なども含めての詰将棋の紹介となっています。
詰将棋の魅力 将棋棋士・谷合広紀 5月10日
https://www.nikkei.com/article/DGXZQOUD029PF0S3A500C2000000/
今回は待望の選手権に関するエッセイでした。
対局中の相手との雑談、先手勝率7割、角換わりは先手必勝?など
タイムリーな話でした。
谷合さんご自身のmazurkaに関してはChatGPTと同じ技術、と
紙面の都合からか深入りせずにさらっと書かれています。
WCSC 将棋棋士・谷合広紀 5月17日
https://www.nikkei.com/article/DGXZQOUD129RH0S3A510C2000000/
夏日 将棋棋士・谷合広紀 5月24日
https://www.nikkei.com/article/DGKKZO71274770U3A520C2KNTP00/
ハーモニー 将棋棋士・谷合広紀 5月31日
https://www.nikkei.com/article/DGXZQOUD269240W3A520C2000000/
名人戦 将棋棋士・谷合広紀 6月7日
https://www.nikkei.com/article/DGXZQOUD028OM0S3A600C2000000/
雨の降る日 将棋棋士・谷合広紀 6月14日
https://www.nikkei.com/article/DGXZQOUD098QO0Z00C23A6000000/
ルーティン 将棋棋士・谷合広紀 6月21日
https://www.nikkei.com/article/DGXZQOUD16AW10W3A610C2000000/
最終回となる今回は藤井7冠が村田6段相手に逆転勝ちした1局で
人間的にミスしやすい局面に誘導した指し回しを絶賛されています。
半年の間、ありがとうございました。
次の一手 将棋棋士・谷合広紀
https://www.nikkei.com/article/DGXZQOUD23A6F0T20C23A6000000/
11月のUEC杯で使った18block384フィルターに対応した版が公開されています。
ボトルネック、という構造を採用していて、
現在のkata1の60blockと同じ程度の強さですが、多くのマシンでは
より高速に動作するそうです。
ネットワークのバイナリのサイズは60blockの400MBから93MB、と4分の1以下になっています。
New Neural Net Architecture! (and bugfix for TensorRT)
https://github.com/lightvector/KataGo/releases
UEC杯で使ったb18c384のネットワークも公開されています。
https://github.com/lightvector/KataGo/releases/download/v1.12.0/b18c384nbt-uec.bin.gz
モデルの定義はこの辺にあるそうです。
https://github.com/lightvector/KataGo/blob/103dc043527999f258613b855d57d116a3da330f/python/modelconfigs.py#L842
AobaZeroの先手勝率は過去100万棋譜で 0.567 なのですが
投了手数ごとで、どのくらい変わるか調べてみました。
下は10手ごとの投了手数と先手勝率、および棋譜数の関係です。
1手から10手までだと先手勝率0.822とかなり高いです。
その後、徐々に下がり、101手から110手だと 0.528 とほぼ互角になってます。
手数が長くなっても先手勝率は高いまま、と思ってたのですが
そうでもなく、少し意外でした。
序盤30手までは乱数で悪手が選ばれることもあり、いきなり投了の閾値(0.26)になってすぐ終わる棋譜も多いです。
191-200手は191手以上の累計です。
6195万棋譜から50万棋譜の集計
手数 棋譜数 先手勝率
10 14571 0.8229
20 44985 0.6692
30 45971 0.6218
40 14528 0.6210
50 7843 0.6202
60 13625 0.6077
70 19651 0.5977
80 26938 0.5744
90 34836 0.5633
100 41570 0.5446
110 43161 0.5286
120 40645 0.5214
130 35295 0.5117
140 28322 0.5102
150 22327 0.5078
160 17165 0.5080
170 12523 0.5088
180 9402 0.5152
190 6943 0.5086
200 19699 0.5037
明日の囲碁フォーカスで昨年11月に行われたUEC杯の特集があるそうです。
囲碁フォーカス どこまで進化?囲碁AI〜最先端の人工知能世界大会
https://plus.nhk.jp/watch/st/e1_2023012222275
この結果は正しくないです。2月24日のコメントをご覧ください。
AobaZeroで特定の手数の局面だけを学習させる実験をしてみました。
下は20手から29手目までの局面だけ、を学習させたときのELOの伸びです。
同様に30〜39、・・・、110〜119手、と調べています。
全部の局面を学習させたときは +0 ELOぐらいで、
面白いことに、70手から79手の局面だけ、を学習させてもほぼ同じぐらいの強さになっています。
80手から89手だけ、も。
逆に20手から29手だけ、だと -572 ELOと、何も学習させないとき(-220 ELOぐらい)
よりも弱くなります。
70手ぐらいの局面だと、20手目ぐらいの局面の勝率を何となくNNが適当に近似してくれるが
逆は無理?なのかもしれません。
実験は6195万棋譜から50万棋譜を10万回、全局面を使って学習させたデータに、
さらに20手から29手目だけを10万回追加学習させています。
ミニバッチ128で1280万局面。
最初の乱数から10万回、だとぶれが大きいのでこの形式にしてみました。
それでもぶれは ±70 ELOぐらいはあります。
AobaZeroの自己対戦、1手100playoutの勝率。Aoba駒落ちからの互角局面(16手目まで)利用。192x10block
Valueは探索勝率と実際の勝敗の平均を学習。
Replay buffer 50万棋譜(6195万棋譜からの)、4633万局面。
学習率0.01から0.001までcos annealing。ミニバッチ128で初期状態から10万回学習(1280万局面を学習)
10万回を2回、全局面を使って学習させたモデルが相手。
勝 分 敗 局数(宣 千 宣) 先手勝率 勝率 95% ELO
23-11-766 800 (0-11-0)(s=392-397,0.497), 0.036(0.012)(-572)20_29手だけを学習
91-19-690 800 (0-19-0)(s=392-389,0.502), 0.126(0.022)(-337)30_39手
169- 9-622 800 (0- 9-0)(s=391-400,0.494), 0.217(0.028)(-223)40_49手
269-11-520 800 (0-11-1)(s=416-373,0.527), 0.343(0.033)(-112)50_59手
218-14-568 800 (0-14-0)(s=394-392,0.501), 0.281(0.031)(-162)60_69手
384-11-405 800 (0-11-7)(s=410-379,0.520), 0.487(0.034)( -9)70_79手
366- 6-428 800 (0- 6-7)(s=381-413,0.480), 0.461(0.034)( -26)80_89手
242-13-545 800 (0-13-8)(s=404-383,0.513), 0.311(0.032)(-138)90_99手
164-10-626 800 (0-10-2)(s=412-378,0.522), 0.211(0.028)(-228)100_109手
76- 4-720 800 (0- 4-0)(s=421-375,0.529), 0.098(0.020)(-386)110_119手
383-36-381 800 (0-36-2)(s=368-396,0.482), 0.501(0.034)( 0)40手以下を学習しない
360-20-420 800 (1-18-1)(s=406-374,0.521), 0.463(0.034)( -26)40手以下を学習しない。2回目
313-22-465 800 (0-21-0)(s=395-383,0.508), 0.405(0.034)( -66)50手以下を学習しない。
388-21-391 800 (0-21-1)(s=388-391,0.498), 0.498(0.034)( -1)50手以下を学習しない。2回目
286-20-494 800 (1-19-0)(s=387-393,0.496), 0.370(0.033)( -92)60手以下を学習しない。
167-13-620 800 (0-13-3)(s=384-403,0.488), 0.217(0.028)(-223) 追加学習なし、の基準
248-21-531 800 (0-21-2)(s=393-386,0.504), 0.323(0.032)(-128)60手以上を学習しない
286-23-491 800 (0-23-1)(s=400-377,0.515), 0.372(0.033)( -91)60手以上を学習しない。2回目

この結果は正しくないです。2月24日のコメントをご覧ください。
70手から89手の選択確率を変えて学習させたのが下のグラフです。
5つの移動平均だと2.5倍前後で+40ELOぐらい有意に強くなってるようにも見えます。
同じ条件で何度か繰り返してるので移動平均は同じ条件のも足した結果です。
学習条件は上の1月21日と同じです。
自己対戦の結果、学習回数がかなり少ない段階の結果で
さらに学習と測定によるぶれが大きいので何ともですが
2.3倍で20bの再学習をしてみようと思います。
右のグラフは学習した局面の手数による割合です。
なんの制約もない場合(AlphaZeroと同じ)が左で、実験の比較対象で
序盤の手の割合を減らしたのが真ん中で、右端が70-89手を2.3倍にした場合です。下みたいなインパルス関数です。
double e80 = (1.0 / (1.0 + exp(-0.3*(x-80+15))) - 1.0 / (1.0 + exp(-0.3*(x-80-15))))*1.3 + 1.0;


初期値からの学習の場合、長手数であることが多い入玉局面の精度が低下することはあるのでしょうか。
それとも一定数含まれていれば十分学習できるのでしょうか。
> 長手数であることが多い入玉局面の精度が低下することは
70-89手の確率を上げると200手以上の局面の割合は1.4%から1.0%まで
下がっているので精度が低下することはありうると思います。
試してみないと分からないところですが。
入玉の精度測定のために、お互い王を詰ますことが不可能な局面集、
を作ってどの程度宣言勝ちできるか、を調べる必要はあるかもしれません。
70-89手を1.7倍の選択確率にして20bで6億局面学習させてみたのですが
ほぼ現在のweightと同一の強さにしかなりませんでした。
replay bufferも現在の100万棋譜から300万に増やしてみたのですが、なかなか簡単には強くなってくれないですね・・・。
4300万棋譜から6285万棋譜までをreplay buffer 300万棋譜、ミニバッチ256、160万回学習、cos annealing 0.01から0.0001まで。
さらに追加学習で5902万棋譜から6286万棋譜までreplay buffer384万棋譜で80万回学習、cos annealing 0.0001から0.000002まで。
対水匠5, 7.50, 1手40Kノード(800playoutは1手250k)。24手までは互角局面を利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
1364-37- 999 2400 (54-37-5)(s=1166-1197,0.493), 0.576(0.020)( 53)1手100playout、w4915 基準
1324-41-1035 2400 (46-41-2)(s=1189-1170,0.504), 0.560(0.020)( 42)1手100playout、70-89手を1.7倍。-11 ELO
1316-46-1038 2400 (88-44-4)(s=1188-1166,0.505), 0.558(0.020)( 40)1手800playout、w4915 基準
1346-47-1007 2400 (94-45-1)(s=1220-1133,0.518), 0.571(0.020)( 49)1手800playout、70-89手を1.7倍。 +9 ELO
KL情報量か、それに何らかの減衰曲線(またはピークを一致させた正規分布曲線)を掛けた関数を考え、”その値の大きい所の局面が重要”という事はないでしょうか。(添付画像は山岡さんのブログのKL情報量のグラフ)
自分は、自分で生成した棋譜は30手〜100手、特に40手〜80手の局面のみを教師局面として採用しています。
(ただ、棋譜数宇が20万個ほどしかなく、教師局面全体に占める割合が小さいですが。)

KL情報量での学習局面選択は少し試してみたのですが
互角近い結果しか得られませんでした。
KataGoはこの値で学習確率を変えてるのですが
どのくらい強くなったかは書いてないので不明です。
Policy Surprise Weighting
https://github.com/lightvector/KataGo/blob/master/docs/KataGoMethods.md#policy-surprise-weighting
すみません、ここまでの実験結果は間違いでした。
ReLUで学習させた重みをSwishで計測していました。
正しくReLUで計測しなおしたのが下のグラフになります。
同じ条件での学習でのぶれが小さくなって、手数を変えたときの
70-89手のピークも、全部使って学習よりも100ELOほど弱いです。
グラフの形は似ていますが。
選択確率を変えた場合の実験もほとんど変化がないように見えます。
ちなみにReLUで学習させたものをSwishで動かすと400ELOほど弱くなってました。
水匠を使った場合、ノード数をかなり減らさないと互角にならず、ノード打ち切りの条件が怪しいので自己対戦にしたのですが
それなりに変化は出るので気づきませんでした。
5月3,4,5日に行われる選手権の申し込み締め切りは1月31日までです。
第33回世界コンピュータ将棋選手権 参加者募集のお知らせ
http://www2.computer-shogi.org/wcsc33/
勝又さんと千田さんによる解説もあるとのことです。
棋譜中継
https://denryu-sen.jp/denryusen/dr3_hardware1/match_live.php?gamename=hard1sf
@13:00〜(解説:勝又清和七段)
BURNING_BRIDGES vs 二番絞り(ビール工房HFT支店)
https://youtube.com/live/XqeDAZsHP3A?feature=share
A18:00〜(解説:千田翔太七段)
水匠電竜 vs Grampus
https://www.youtube.com/live/QMS0VUR5gBk?feature=share
今日、2月18日の13時と18時から決勝2局が行われます。
1勝1敗の場合は1手5秒のフィッシャーで2局さらに行うそうです。
棋譜
https://denryu-sen.jp/denryusen/dr3_hardware1/match_live.php?gamename=hard1ff
1局目 先手 水匠電竜 vs 後手 二番絞り 13:00〜 解説 勝又清和 七段
https://www.youtube.com/live/9CCilDM-K80?feature=share
2局目 先手 二番絞り vs 後手 水匠電竜 18:00〜 解説 森内俊之 九段
https://www.youtube.com/live/z6ocn3qZuas?feature=share
持ち時間2時間はどちらも先手が勝って1勝1敗で、
1手5秒のフィッシャーで水匠が2連勝して優勝しました。
2時間
https://denryu-sen.jp/denryusen/dr3_hardware1/league_table_ff.html
5秒
https://denryu-sen.jp/denryusen/dr3_hardware1/league_table_fs.html
@DrJimFan氏
Do you know that DeepMind has actually open-sourced the heart of AlphaGo & AlphaZero?
It’s hidden in an unassuming repo called “mctx”: https://github.com/deepmind/mctx
It provides JAX-native Monte Carlo Tree Search (MCTS) that runs on batches of inputs, in parallel, and blazing fast.
また、同氏は、
mctxライブラリは、AlphazeroだけでなくAlphazero,MuZeroにも対応しているとのこと
Gumble MuZeroの著者のでGumbelのアルゴリズムが見どころですね。
同じくGoogle/DeepMindの人々によるAlphaGo系の実装だとMinigoやOpenSpielも参考になります。
https://github.com/tensorflow/minigo
https://github.com/deepmind/open_spiel/tree/master/open_spiel/algorithms
AlphaGoのソースだとAlphaGo映画 ( https://www.youtube.com/watch?v=WXuK6gekU1Y ) の12分頃にある、初代の論文用に要点だけに切り詰められてない色々やってるLua&Torchの版をちょっと見てみたいなぁというのがあります。
たややさんの企画で奨励会三段の古田龍生さんを1日レンタルして
Aoba駒落ちと2枚落ちが今日、2月24日の21時からYoutubeで
中継されるそうです。
古田さんとは1年前に同じく2枚落ちで対戦されています。
この時は3090で、今回は4090を使うそうです。
【VS現役奨励会三段!】最強二枚落ちAIで、奨励会三段と勝負!【将棋AI水匠/たややん】
https://www.youtube.com/watch?v=06HG5i5isvg
【二枚落ちで現役奨励会三段に勝つ…??】
https://twitter.com/tayayan_ts/status/1628967277315112961
明後日2/24の21時?、駒落ち特化型ソフト(最強設定らしい)との二枚落ち対局が決定しました。
https://twitter.com/furutaryusei/status/1628264002722873344
2021年12月の2枚落ちでの対戦
【名局】奨励会三段がパワーアップした駒落ち特化型ソフトに1年半ぶりに二枚落ちで挑戦したら大接戦に・・・ 【lishogi.org】
https://www.youtube.com/watch?v=Hjj5L7jOWh4
二歩突き切りから地下鉄飛車で9筋に回って飛車を成りこみ、古田さんの完勝でした。
棋譜はこちらです。
https://lishogi.org/cETcGa0M
古田さんご自身が解説されています。
【最強二枚落ちAIとの戦いを簡単に振り返る】
https://note.com/furuta_ryusei/n/n32ca07161111
lishogiで2枚、4枚、6枚落ちでAoba駒落ちより強いと評判の
hcpu_shogiが公開されています。
dlshogiベースで192x10blockだそうです。
HCPU_SHOGI_20230224
https://github.com/toame/hcpu_shogi/releases/tag/20230224
2枚落ちにおけるAoba駒落ちとの差も計測されていたので貼っておきます.
上手側のplyaout数を10000,下手側のplayout数を50として対局すると,上手下手ともにHCPUが+300 ELO程強いみたいです.
https://hcpushogi.hatenablog.com/entry/2023/02/25/095056
300も違うのですか。
今の詰将棋ありとか改良したAobaZeroのバイナリで動かせば+100ELOぐらいは伸びると思うのですが、
それでも大差ですね。
しかも192x10bと256x20bで4倍近くサイズも違うので、単位時間あたりの実行速度の差だと300ELOでなく、400ELO以上の差はありそうです。
なんだかオオカミ少年みたいですが、再度実験しなおした結果、互角の局面の学習割合を減らすのは効果がありました。
局面の選択確率を
勝率0.60-0.70は 2倍(勝率0.40-0.30も、以下同)
勝率0.70-0.80は13倍
勝率0.80-1.00は 8倍
として再学習しなおした結果、現在の重みよりも+28強いものが出来たので
w4254をこの重みで差し替えました。
対水匠5(7.50,1手40k(250k))と1手100playout(800 playout)の勝率。w4195。互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO 差
1364-37- 999 2400 (54-37-5)(s=1166-1197,0.493), 0.576(0.020)( 53) 1手100playout 基準 w4195
1419-40- 941 2400 (35-40-1)(s=1246-1114,0.528), 0.600(0.019)( 70) +17 1手100playout 互角局面の割合を減らす
1316-46-1038 2400 (88-44-4)(s=1188-1166,0.505), 0.558(0.020)( 40) 1手800playout 基準 w4195
1412-41- 947 2400 (67-41-1)(s=1202-1157,0.510), 0.597(0.019)( 68) +28 1手800playout 互角局面の割合を減らす
4300万棋譜から6325万棋譜までReplayBuffer 300万棋譜で160万回学習。cos annealing で0.01 から0.0001 まで
5945万棋譜から6344万棋譜までReplayBuffer 400万棋譜で 80万回学習。cos annealing で0.0001から0.000002まで
ミニバッチ256。合計6億局面。
学習初期は自己対戦だと互角局面を減らす方が+100ELOほど強くなるのですが
学習率を下げるほどだんだん効果は下がっていくようです。
左のグラフは手数により学習される局面の割合です。
右は勝率により学習される確率を何倍にしてるか、です。
最初に書いた大雑把なやり方(0.7で13倍)でもほぼ結果は一緒ですが
実際は適当な関数で近似してます。
https://github.com/kobanium/aobazero/blob/develop/learn/yss_dcnn.cpp#L3535

昨日から下のエラーで棋譜生成が動かなくなってます。
OpenCLでGPUの認識に失敗しているようです。
at line 585 in src/common/opencli.cpp: clGetPlatformIDs() failed.
該当行は
cl_uint num_platform;
if (clGetPlatformIDs(0, nullptr, &num_platform) != CL_SUCCESS)
throw ERR_INT("clGetPlatformIDs() failed.");
!nvidia-smi は正常に動いてTesla T4が1枚認識されます。走ってるGPUプロセスはないです。
不思議なのは古いFireFoxだと正常に動いて、Chrome, Edgeだとエラーになることです。
Chrome、Edgeだと右端で「Editing」というボタンが表示されなくなってます。
うーん、何が原因なのでしょうか・・・。
!apt install -y nvidia-cuda-toolkit
を事前に実行すると
!clinfo
でT4を認識できて無事に動きました。
colabのページも修正しておきました。
http://www.yss-aya.com/aobazero/colab.html
以下の8行で動くと思います。
!git clone -b develop https://github.com/kobanium/aobazero.git
!apt install libboost-dev libboost-program-options-dev
!apt install libboost-filesystem-dev liblzma-dev zlib1g-dev
!apt install opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev
!apt install -y nvidia-cuda-toolkit
%cd aobazero
!make -j2
!./bin/autousi
1か月前からFirefoxもnvidia-cuda-toolkitを入れないとOpenCLを
認識しないようになってたのですが、
今日からFirefoxでは
!apt-get update
を事前に実行しないとエラーで動かなくなりました。
Chromeだと特に問題ないのですが。
ブラウザによって割り当てられるマシン群が違うみたいです。
以下の11行で動くと思います。Tesla T4で3時間の実行で最速になるように2行追加してます。
!git clone -b develop https://github.com/kobanium/aobazero.git
!apt install libboost-dev libboost-program-options-dev
!apt install libboost-filesystem-dev liblzma-dev zlib1g-dev
!apt install opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev
!apt-get update
!apt install -y nvidia-cuda-toolkit
%cd aobazero
!make -j2
!sed -i "s/O-1:28:65W/O-1:14:32W/g" autousi.cfg
!sed -i "s/SleepOpenCL 0/SleepOpenCL 1/g" autousi.cfg
!./bin/autousi
今年のコンピュータ将棋プロトコールで対局させたところ、隠岐のプログラムでは対局できない事がわかりました。原因はサーバープログラムの変更です。GAME_IDが最大32byteまで対応できるように設計していたのですが、これが48byteくらいあって、受信バッファーが足りなくて障害を起こします。送信用バッファもこの関係で足りません。
もし、CSA将棋を使って参加される方は、らまで連絡するか、自分で修正するかです。また、らのソースを使ている方も同様です。
修正箇所は3か所程度必要です。
ご連絡ありがとうございます(お返事が遅くなってすみません)。
運営の方にもこのCSA将棋だとうまく動作しない、ことを伝えておきます。
あっ、えーと、らの部屋にCSA将棋Ver3.15をアップしてあり、これだとGame_IDが64byteまで対応してます。
昔は、CSA将棋で出場するチームが5割を超していたのですが、今はこまあそびが1チーム使っている可能性があるくらいで、将棋道場なんかにほとんど移動してると思います。
なお、来年は中東付近にいると思いますので、出場しません。
ちょっと、今、川崎のホテルにいるのですが、急用があって、明日の大会出場は難しくなってます。山下君の掲示板をかりて申し訳ありません。
承知いたしました。
参加が可能なことを期待していますが、無理な場合はこちらか
運営の香山さんにメールでご連絡をお願いいたします。
2年ぶりに選手権のプログラム別順位の推移表を更新しました。
http://www.yss-aya.com/csa_all.html
決勝8位に残るチームも毎回かなり変わってる感じです。
表は清愼一さんが作成してくださりました。
AobaZeroは2次予選で4勝5敗で20位と決勝には進めませんでした。
印象的だったのが定跡の整備の甘さでした。
後手番の5局はすべて角換わりで、しかも45手目まですべて同一局面。
さらには2局は90手目!まで同一局面でした。
TMOQは79手目まで、dlshogiは95手目まで定跡で指しており、
floodgateで3900以上などが勝った棋譜をそのまま指されると、逃げ出すのは相当難しい印象です。
TMOQだけには勝てたのですが他は負けで、5敗のうちの4敗は後手番の角換わりで45手目まで同一、
と、そこまで偏るものか、という感じです。
今回は運がよければ決勝に残れるかな?という感じだったのですが
そのあたりになると上位が話題にしている定跡対策が相当重要になってくる、と痛感しました。
AobaZeroの強化学習では30手目までは乱数で枝分かれするのですが
角換わりの37手目基本図?(山岡さんの記事中)は、30手以上なので
学習中にそんなに出現してると思えないのですが、先手が誘導するとその局面になりやすいようです。
今回、1手に5分(240万playout)考えさせて訪問回数の分布を確率として確率が高い局面を展開する、という手法で
初期局面から定跡を6000局面作ったのですが、この深い変化にまでには届いていませんでした。
運営もしていたので個々の棋譜をあまり見る時間がなかったのもやや反省材料でした。
負けた将棋が後手の角換わりだらけ、なのにもう少し早く気づいていれば
定跡で角換わりは避けるように調整できたかもしれません。
マシンはRunPodという個人GPUの貸し出しをしてるところで
4090を4枚、CPUは16コアのマシンを借りて使いました。値段は1時間$2.36、と比較的安いです。
ただNPSが局面によって6000〜35000、と安定せず、探索木の途中が細い場合は速度が出ず、
LeelaChesZeroのようなMCTS(dlshogiも採用)にしないとダメな感じです。
探索速度もそうですが、ネットワークの重みもまだ15ブロックのdlshogi(dr2)に100ELOほど負けてるので、
(20ブロックと2倍のパラメータ数で)そこを追いつくのが先決かもしれません。
AobaZerono後手番の5局、対dlshogi、てぃー〇、TMOQ、Novice、koron
http://live4.computer-shogi.org/wcsc33/html/WCSC33+U2_1-900-5F+dlshogi+AobaZero+20230504104102.html 39手目から95手目まで再hit
http://live4.computer-shogi.org/wcsc33/html/WCSC33+U4_8-900-5F+XFF+AobaZero+20230504130047.html 45手目が対dlshogiの41手目と同一
https://www.youtube.com/watch?v=XiMjvF5HQmM&t=14210s 千田さんと古作さんによる解説
http://live4.computer-shogi.org/wcsc33/html/WCSC33+U6_14-900-5F+TMOQ+AobaZero+20230504151115.html
http://live4.computer-shogi.org/wcsc33/html/WCSC33+U7_11-900-5F+Novice+AobaZero+20230504161039.html
http://live4.computer-shogi.org/wcsc33/html/WCSC33+U8_13-900-5F+koron+AobaZero+20230504171035.html 90手目までNoviceと同一
第33回世界コンピュータ将棋選手権 結果報告
https://tadaoyamaoka.hatenablog.com/entry/2023/05/06/110402
RunPod (個人のマシンレンタルを含むGPUクラウドサービス)
https://www.runpod.io/
一番、けしからん!と思ったのは「てぃー〇の振り飛車気持ち良すぎだろ!」が
対AobaZeroで居飛車を指してきたことですね。
解説の千田さんもご立腹でした :-)
https://www.youtube.com/watch?v=XiMjvF5HQmM&t=14210s
>>初期局面から定跡を6000局面作ったのですが、この深い変化にまでには届いていませんでした。
この6000局面がどういった内容なのか気になります。
角換わりの基本形はいろいろな経路があるので、簡単なようで複雑な印象です。floodgateのAobaZeroも後手で基本形までの駒組み中にスキが生じて▲4五桂から急に評価を下げる棋譜も拝見しました。
角換わりの変化は長いもので14手目ぐらいまでしか展開されていないです。
多いのは▲76歩からの変化で最長は54手目までの左図の局面でした。
大乱戦でほぼhitしなさそうですね・・・。
特定の戦型の優劣を判定する、というよりは序盤の数手の時間短縮が狙いでした。
floodgateを見ててもAobaZeroは後手だと角換わりになることが多いですね。
学習棋譜だと角換わりの一般的?な30手目の右図の局面は50万棋譜で87局面しか登場しておらず
しかも先手が千日手を打開しようとして先手勝率2割程度、と
逆の結果になってます。

二番絞りは去年は定跡なしで優勝に絡んで
「大事なのは評価関数!」と希望があったのですが今年はやや残念な結果でした。
決勝の7局を調べると相手の定跡が切れた時点で、残り時間が2倍程度の差になっており
これでは勝てないのも仕方がないかな、という感じです。
対dlshogiでは5倍以上の時間差になっておりdlshogiの定跡の充実さを感じます。
Ryfamate - 二番絞り × 45手目まで定跡。相掛かり。 残り7分 - 16分 30手目ぐらいまでは頻出か。
dlshogi - 二番絞り × 61手目まで定跡。相掛かり。 残り3分 - 17分
二番絞り - W@anderER 〇 28手目まで定跡。角換わり早繰り銀。残り8分 - 16分
やねうら王 - 二番絞り × 29手目まで定跡。角換わり腰掛銀。 残り9分 - 16分 30手目の△75歩が斬新な仕掛け。後手はこんな早く仕掛けないとダメなのですか
東横将棋 - 二番絞り × 37手目まで定跡。角換わり腰掛銀。 残り8分 - 16分 30手目の△75歩の仕掛けも同一。
二番絞り - アストラ将棋 〇 24手目まで定跡。相掛かり。 残り10分 -16分
二番絞り - 大将軍 〇 4手目まで定跡。角換わり腰掛銀。 残り13分 -15分
Li(たぬき)の野田さんが選手権の実行ファイルを公開されてたので
棋力を調べてみました。
npsが水匠5と比べて1.38倍程度遅いので、ノード数をこの割合にして消費時間がほぼ同じになるようにして実験しました。
1手100万(水匠は138万)ノードだとほぼ互角で10万、22万、だと水匠5の方が+40 ELOほど強いです。
これは探索ノード数がこれぐらい少ないと探索部の伸びが大きいため、評価関数の強さを上回っているためと思われます。
計測にはやねうら王の互角局面集(2016年、24手まで)を使ってます。すべて1スレッドです。
ubuntu 20.04.2 だと Makefile で下の2行を変更する必要があります。
#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE
YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE_HALFKP_1024X2_8_32
BLOSSOM、という評価関数も公開されてるので調べてみました。
1手30万ノード同志でほぼ水匠5と互角で、1手10万だと水匠5の方が+46強いです。
主に1手30万ノードで調べてるのはAobaZeroの1手800playoutと互角で計測に使う単位なためです。
水匠5(7.50)の勝率。tanukiはgithubのソースから
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO 換算
664-17-519 1200 (9-16- 2)(s=637-546,0.538), 0.560(0.028)( 42) 水匠5 138k vs_tanuki 100k
657-16-527 1200 (7-16- 3)(s=631-553,0.533), 0.554(0.028)( 37) 水匠5 300k vs_tanuki 217k
245-10-252 507 (1- 9- 2)(s=258-239,0.519), 0.493(0.043)( -4) 水匠5 1380k vs_tanuki 1000k
水匠5(7.50) vs BLOSSOM(7.50)
667-26-507 1200 (1-26-12)(s=600-574,0.511), 0.567(0.028)( 46) 水匠5 100k vs blossom 100k
324-20-331 675 (3-20-13)(s=327-328,0.499), 0.495(0.037)( -3) 水匠5 300k vs blossom 300k
下は関係ないですがdlshogiのdr2との100playoutでのAobaZeroのELO勝率です。1スレッド、ミニバッチ1、w4260
まだ80〜160ELOの差があります。192x15blockと2分の1のサイズでこれですので、まだまだ遠いです。
AobaZero(w4260) vs dlshogi(dr2)、1手100playout
106- 8-286 400 (1- 8-0)(s=204-188,0.520), 0.275(0.043)(-168) やねうら王互角局面集利用
147-16-237 400 (3-16-0)(s=219-165,0.570), 0.388(0.047)( -79) Aoba駒落ちの平手局面集(16手まで)
『Li』(tanuki- 第33回世界コンピュータ将棋選手権)の、思考エンジンバイナリ・評価関数ファイル・定跡データベース
https://twitter.com/nodchip/status/1654130521105129485
水匠5よりも確実に強い標準NNUE評価関数「BLOSSOM」を公開します。
https://twitter.com/senninha_a/status/1654675205464399872
BLOSSOM/YO7.63 vs 水匠5/YO7.63(平手局面, 4T, 1500万ノード) 765-323-627 勝率55.0% R+34.6
https://twitter.com/tayayan_ts/status/1655340441469075459
BLOSSOM/YO7.63 vs 水匠8/YO7.63(平手局面, 4T, 1手5秒) 342-80-578 勝率37.2% R-91.2
https://twitter.com/tayayan_ts/status/1655552091610570754
普段の棋力計測は1手800playout固定、なのですが
学習棋譜は1手平均1600playoutで、100playoutごとの探索ノードの割合に変化がなければ
最短200playout、変化が多ければ最大6400playout、までという条件で考えています。
これと同じ設定でfloodgateで動かすと181局で3634 ELOになりました。
1手800固定だと3400程度で、倍の1600で+80、KLDで+100で、だいたいそのぐらいかな、という感じです。
水匠5だと1手2000k(200万ノード)程度と互角でしょうか。
以下のようなコマンドで動かしてます。1スレッド、1ミニバッチです(実際の棋譜生成も同じ条件)。
bin/aobaz20221221 -p 6400 -h 1 -kldgain 0.00000075 -drawmove 321 -b 1 -t 1 -i -q -w w000000004260.txt
AobaZero_w4260_kld_avg_1600p
http://wdoor.c.u-tokyo.ac.jp/shogi/view/show-player.cgi?event=LATEST&filter=floodgate&show_self_play=1&user=AobaZero_w4260_kld_avg_1600p&range=365
lc0のkldgainでplayout数を可変にすると学習棋譜が+100Eloほど上がるようです
http://www.yss-aya.com/bbs_log/bbs2021.html#bbs32
dlshogiは一手10kplayoutでやっているとのことなのでもっと強いのでしょうか。
ブログには"比較的少ない探索"と書いてありますが流石ですね。
https://tadaoyamaoka.hatenablog.com/entry/2022/12/30/191902
dlshogiは15bから20bで同じノード数だとR+157.8、強くなっているそうで、
今回は30b(384x30b)は20bより4倍近く遅いが単位時間だと+40 ELO強いそうです。
時間2倍で+80ELOとして同じノード数だと+80+80+40 = +200 ELO ほど20bより強い、かもしれません。
15bからは157+200 = 360 ELO程度でしょうか。
AobaZeroは15bより100ELO弱いので、460 ELOの差があります。
1手10kだとAobaZeroの1手1600+KLDが1手3200playout相当とすると3倍の差なので+120ELOぐらいさらに強いでしょうか。
460+120=580 なので 3630+580 = 4210
とfloodgateで4200 ELO近い棋力の棋譜で強化学習しているかもしれません(30bで作ってる場合)。
dlshogiの計測は自己対戦も含んでいるのでここまで差はないかもですが。
一昨年比ですが順調に追いつかれている感じですね。
https://bleu48.hatenablog.com/entry/2021/09/03/151723
うちでも良質の学習データを揃えるのが一番の難関になっています。
7月15日、16日にCGFオープン(コンピュータ囲碁大会)が
調布で開催されます。今年も現地とオンラインの混合開催です。
15日は9路、16日は19路を行います。
大会用のサーバはnngsかもしくはCGOS(大会版)を用います。
参加費は無料ですが賞品はあります。
皆様の参加をお待ちしています。
CGFオープン2023 大会要項
http://hp.vector.co.jp/authors/VA012620/cgf2023/cgf2023.html
CGFオープン
http://hp.vector.co.jp/authors/VA012620/
参加申し込みは7月10日までです。
ぜひご参加をお願いします。
現在、9路は16チーム、19路は7チームの予定となっています。
9路は20チームが参加してRayが優勝しました。
棋譜
http://203.138.189.63/cgf2023/
Rank Program Name 1 2 3 4 5 6 7 8 9 10 11 Wins SL SB MD
1: Ray 14+ 9+ 2= 7+ 5+ 3+ 4= 11+ 6+ 8+ 13+ 10.0 74.0 56.0 42.0
2: eg 15+ 13+ 1= 3= 8+ 5+ 6+ 4+ 7+ 9+ 12+ 10.0 72.5 53.5 40.5
3: Engawa 18+ 6= 10+ 2= 4+ 1- 8+ 5+ 11+ 12+ 7+ 9.0 72.0 46.0 33.0
4: Sayuri 19+ 16+ 6+ 5= 3- 7+ 1= 2- 8+ 11+ 14+ 8.0 70.0 33.5 24.5
5: Aya 12+ 11+ 7+ 4= 1- 2- 14+ 3- 20+ 6+ 15+ 7.5 69.5 32.5 25.5
6: KuraGo 8+ 3= 4- 10= 13+ 12+ 2- 15+ 1- 5- 18+ 6.0 72.5 22.0 15.0
7: Thunderbird 9+ 15+ 5- 1- 11+ 4- 13+ 12+ 2- 19+ 3- 6.0 72.0 27.5 20.0
8: OshieGo 6- 18+ 16+ 13+ 2- 10+ 3- 20+ 4- 1- 17+ 6.0 63.0 20.0 13.0
9: Maple 7- 1- 17+ 15+ 12- 11- 19+ 14+ 10+ 2- 16+ 6.0 59.5 23.0 15.0
10: Sanma 11= 20+ 3- 6= 16+ 8- 12- 13+ 9- 17+ 19+ 6.0 51.5 14.0 7.0
11: R-Go 10= 5- 12+ 16+ 7- 9+ 18+ 1- 3- 4- 20+ 5.5 63.5 17.0 10.0
12: eggggg 5- 19+ 11- 14+ 9+ 6- 10+ 7- 17+ 3- 2- 5.0 66.0 22.0 13.0
13: DamaGo 20+ 2- 14+ 8- 6- 17+ 7- 10- 16+ 18+ 1- 5.0 58.0 14.0 9.0
14: yattuke 1- 17+ 13- 12- 19+ 15+ 5- 9- 18+ 20+ 4- 5.0 53.5 12.0 7.0
15: PlusOneGo 2- 7- 20+ 9- 18+ 14- 17+ 6- 19+ 16- 5- 4.0 51.5 8.0 3.0
16: PyaqArgo 17+ 4- 8- 11- 10- 18- 20+ 19- 13- 15+ 9- 3.0 48.5 8.0 1.0
17: Zettour 16- 14- 9- 19+ 20+ 13- 15- 18+ 12- 10- 8- 3.0 45.0 5.0 1.0
18: marble 3- 8- 19+ 20- 15- 16+ 11- 17- 14- 13- 6- 2.0 49.5 5.0 0.0
19: Utatane 4- 12- 18- 17- 14- 20+ 9- 16+ 15- 7- 10- 2.0 49.0 4.0 0.0
20: DeepEsper 13- 10- 15- 18+ 17- 19- 16- 8- 5- 14- 11- 1.0 49.0 2.0 0.0
19路は8チームが参加してスイス式7回戦の結果、egが7-0で優勝しました。
7月16日(日) 19路 30分切れ負け、日本ルール、コミ6.5目、CGOS(大会版)による通信対戦
於:電気通信大学 西9号3F +オンライン
Rank Program Name 1 2 3 4 5 6 7 Wins SL SB MD
1: eg 6+ 5+ 2+ 3+ 4+ 5+ 2+ 7.0 27.0 27.0 19.0
2: Engawa 7+ 3+ 1- 5+ 6+ 8+ 1- 5.0 26.0 12.0 9.0
3: Ray 8+ 2- 4+ 1- 7+ 6+ 5+ 5.0 23.0 11.0 6.0
4: Aya 5- 6+ 3- 8+ 1- 7+ 6+ 4.0 21.0 6.0 2.0
5: Sayuri 4+ 1- 7+ 2- 8+ 1- 3- 3.0 30.0 6.0 4.0
6: PlusOneGo 1- 4- 8+ 7+ 2- 3- 4- 2.0 27.0 2.0 0.0
7: PyaqArgo 2- 8+ 5- 6- 3- 4- 8+ 2.0 19.0 0.0 0.0
8: DeepEsper 3- 7- 6- 4- 5- 2- 7- 0.0 23.0 0.0 0.0
+------------------+----+----+----+----+----+----+----+--------+-----+-----+----+
| Program Name | 1R | 2R | 3R | 4R | 5R | 6R | 7R | W-D-L | SL |SB/MD|Rank|
+------------------+----+----+----+----+----+----+----+--------+-----+-----+----+
| 1.eg |Plus|Sayu|Enga|Ray |Aya |Sayu|Enga| 7- 0- 0| 27.0| 27.0| 1 |
| | + |B + |B + |B + | + | + | + | 7.0| | 19.0| |
| 2.Engawa |Pyaq|Ray |eg |Sayu|Plus|Deep|eg | 5- 0- 2| 26.0| 12.0| 2 |
| |B + | + | - |B + | + | + |B - | 5.0| | 9.0| |
| 3.Ray |Deep|Enga|Aya |eg |Pyaq|Plus|Sayu| 5- 0- 2| 23.0| 11.0| 3 |
| |B + |B - | + | - |B + | + | + | 5.0| | 6.0| |
| 4.Aya |Sayu|Plus|Ray |Deep|eg |Pyaq|Plus| 4- 0- 3| 21.0| 6.0| 4 |
| | - |B + |B - |B + |B - | + | + | 4.0| | 2.0| |
| 5.Sayuri |Aya |eg |Pyaq|Enga|Deep|eg |Ray | 3- 0- 4| 30.0| 6.0| 5 |
| |B + | - | + | - |B + |B - |B - | 3.0| | 4.0| |
| 6.DeepEsper |Ray |Pyaq|Plus|Aya |Sayu|Enga|Pyaq| 0- 0- 7| 23.0| 0.0| 8 |
| | - |B - |B - | - | - |B - | - | 0.0| | 0.0| |
| 7.PyaqArgo |Enga|Deep|Sayu|Plus|Ray |Aya |Deep| 2- 0- 5| 19.0| 0.0| 7 |
| | - | + |B - |B - | - |B - | + | 2.0| | 0.0| |
| 8.PlusOneGo |eg |Aya |Deep|Pyaq|Enga|Ray |Aya | 2- 0- 5| 27.0| 2.0| 6 |
| |B - | - | + | + |B - |B - |B - | 2.0| | 0.0| |
+------------------+----+----+----+----+----+----+----+--------+-----+-----+----+
+:Win -:Loss: =:Draw B:Black (White is empty)
大会結果
http://hp.vector.co.jp/authors/VA012620/cgf2023/result2023.html
朝日新聞に選手権の記事が出ています。
8手目△14歩の局面が紹介されています。
また谷合さんの紹介もされています。
コンピュータ将棋、dlshogiが優勝 温めていた後手番の秘策
https://www.asahi.com/articles/ASR5Q03YTR5LUCVL062.html
たややんさのツイート経由だと無料で読むことができます。
有料記事がプレゼントされました!5月25日 12:20まで全文お読みいただけます
https://twitter.com/tayayan_ts/status/1661210551014526976
6月19日の
kata1-b18c384nbt-s6645609216-d3436340562
のネットワークから予想外の好手を多く選ぶようにPolicy Headの形状が変わったそうで
KataGo v1.13.0
以上が必要になっています。
https://github.com/lightvector/KataGo/releases/tag/v1.13.0
KataGoの最近の手法が更新されています。
Nested Bottleneck Residual Nets ... UEC杯以降の新しいNetwok構造 "b18c384" の説明
Auxiliary Soft Policy Target ... Policyの学習速度が上がる
Fixed Variance Initialization and One Batch Norm
Optimistic Policy ... +40 ELO
あたりが追加されたようです。
Other Methods Implemented in KataGo
https://github.com/lightvector/KataGo/blob/master/docs/KataGoMethods.md
lightvector ? 2023/06/20 10:32
KataGo methods doc updated with some more of the recent things:
https://discord.com/channels/417022162348802048/583775968804732928/1120526458004176898
一般から募集した20局面の指定局面から先後を入れ替えて2局対戦する
電竜戦が行われています。
30チームの参加(一人2チームまで可)です。
今日の22時から明日の朝8時ごろまでが予選で、上位4チームが決勝に進みます。
第4回電竜戦TSEC指定局面戦
https://denryu-sen.jp/denryusen/dr4_tsec/dr1_live.php
AobaZeroは予選で21位(30チーム中)、B級では平均17位(24チーム中)ぐらいでした。
印象的だったのが相振飛車の局面を後手がかなり不利、と
間違えて評価してる点でした。
例えば、下の先手3間、後手6間の50手目で、すでに先手勝率99%、と極端な評価になってました。
学習局面に出てこない影響なのでしょうが、にしてもひどいです。
以前から振飛車の評価がダメな影響はありましたが。
うまい解決策は思いつかないです・・・。
https://denryu-sen.jp/denryusen/dr4_tsec/dist/#/dr4tsec+buoy_axis414_tsec4p1b1-1-bottom_33_aobazero_bakuretsu-60-2F+aobazero+bakuretsu+20230701221338/48
WCSC、電竜戦等に参加されたことがないVチューバーによる
フロムスクラッチの将棋ソフトの大会・鋭藍戦(えいあいせん)が
7〜9月の間、Vチューバーの配信で実況しつつ
1試合ずつ対戦するそうです。
もう参加申し込みは締め切っているとのことです。
コンピュータ将棋 #鋭藍戦 企画説明&抽選会
https://www.youtube.com/watch?v=8UvkOtWOzwM
今回から現地参加のみ(オンラインなし)となっています。
参加申し込みは9月1日からです。
対戦サーバはCGFオープンと同じCGOS大会版を使います。
第15回UEC杯コンピュータ囲碁大会
http://entcog.c.ooco.jp/entcog/new_uec/
参加申し込みは10月5日(木)までとなっています。
ご気軽にご参加いただければ、と思います。
接続テストを行いたいのですが、
第15回UEC杯コンピュータ囲碁大会のテスト用サーバー
http://203.138.189.63/uec2023/ ポート6819
にアクセスしても応答がありません。
何か間違っているのでしょうか?
他にテスト可能な場所はあるのでしょうか?
分かりにくくてすみません。
UEC杯のサーバのIPはslackのgeneralに書いてあります。
http://203.138.189.63/uec2023/
で可能なのは棋譜の閲覧のみです。
分かりました。
slack覗いてみます。
AobaZero開発者の皆様
突然の投稿失礼します。
大阪大学大学院生命機能研究科で助教をしております、高木優と申します。
現在、私たちの研究でAobaZeroを利用したいと考えております。具体的には、任意の盤面を入力とした時の、AobaZeroの出力および中間層のアクティベーションパターンを抽出し、それらを研究に利用したいと考えています。新たに学習を行う予定はなく、公開頂いている重みを用いる予定です。その上で以下3点お伺いしたく思います:
1. 公開頂いているAobaZeroの重みを研究目的で利用させて頂いてもよろしいでしょうか?可能な場合、公式HP/GitHub以外に引用が必要な文献などございましたらご教示頂けますと幸いです。
2. 利便性を考えて、出力および中間層のアクティベーションパターン抽出はPyTorchで行いたいと思っています。ただそのためには、PyTorchで読み込み可能な形式へ重みを変換する必要があるかと思います。開発者の皆様は、過去に重みのPyTorchへの移植を行われたことはございますでしょうか?
3. 公開頂いている学習初期(w001)から後期(現在)のモデル間で比較をしたいと思っております。ただ、初期・中期・現在ではアーキテクチャなどが若干違うものになっていると理解しております。また、入力するための盤面エンコーディングや、方策の出力形式などもdlshogiとは異なると理解しております。上記の移植作業や研究で利用するにあたって、あるいは将来的に論文化するにあたって、アーキテクチャの詳細についての情報があると大変ありがたいのですが、何かまとめられたものなどございますでしょうか?
不躾なお願いとなってしまい大変恐縮ですが、ご回答いただけますと大変助かります。何かご質問などございましたらお聞きいただければ幸いです。
以上、どうぞよろしくお願いいたします。
高木 優
高木 様、
1. はい。ご自由にご利用いただければ、と思います。引用はGitHubだけで大丈夫です。
2. PyTorchに移植はしたことがありません。
3. 初期の構造はこちらで
http://www.yss-aya.com/20191118csa_aobazero.pdf
http://www.yss-aya.com/20210309aoba.pdf
入力の変更後は下になります。
AobaZeroのネットワークの構造を変更しました
http://www.yss-aya.com/bbs_log/bbs2022.html#bbs13
ソース上では下記になります。USE_POLICY2187 が定義されてるのが構造変更後の場合です。
https://github.com/kobanium/aobazero/blob/release/src/usi-engine/bona/yss_net.cpp#L464
ネットワークの重みはw4014.txt 以降、需要の少なさとディスク容量軽減のためアップしていません。
すべては難しいですが合計で100程度でしたらご指定いただければアップいたします。
山下様
お返事どうもありがとうございます、大変参考になります。何度も大変恐れ入りますが、お返事踏まえて追加で以下3点確認させていただきたく思います:
1.ネットワーク構造について、https://github.com/kobanium/aobazero/tree/release/learnに*.prototxtがありますが、各prototxtと各論文の対応は以下の理解でよろしかったでしょうか?
(http://www.yss-aya.com/aobazero/ の"ネットワークの重み"の記載も参考にしております)
一つ目の論文(http://www.yss-aya.com/20191118csa_aobazero.pdf) : https://github.com/kobanium/aobazero/blob/release/learn/aoba_zero_64x15b.prototxt -> w001 ~ w448まで?
二つ目の論文(http://www.yss-aya.com/20210309aoba.pdf) : https://github.com/kobanium/aobazero/blob/release/learn/aoba_zero_256x20b.prototxt -> w449 ~ w3298まで?
構造変更後( http://www.yss-aya.com/bbs_log/bbs2022.html#bbs13) : https://github.com/kobanium/aobazero/blob/release/learn/aoba_256x20b_swish_mb128.prototxt -> w3811以降?
2. 今回は学習まで行う予定はないため、移植までせずともPythonのCaffeで特徴を抽出するのも選択肢かと考えております。ここで、論文(20210309aoba.pdf)およびコードから、少なくとも構造変更までのネットワークの入力は9x9x362のものと理解しております(構造変更後は利きの情報も?)。ただ、構造変更前は362の各次元が具体的にどの駒に対応しているのか、あるいは構造構造後の入力形式はそもそもどんな入力がどういった形式で追加されているか、など理解できていない部分があります。もしよろしければ、入力データ形式をイメージするために参考になるコードの箇所(あるいは例となる盤面->入力入力のペアなど)をご教示頂けると大変ありがたく思います。
3. 配布頂いている重みファイルは*.txt.xz形式のところ、これは解凍後の.txtファイルが*.caffemodelファイルに対応すると考えていいでしょうか?
コードについての理解が足りておらず、質問ばかりで申し訳ありません。どうぞよろしくお願いいたします。
高木
1. はい。他に40bが含まれています。
w001 - w448 64x15b
w449 - w3459 256x20b
w3460 - w3702 256x40b
w3703 - w3880 256x20b ... w449 - w3459 と同一
w3881 - 256x20b (NNの入力を変更、Swishに)
それぞれのcaffemodelは下のようなものです(64x15bは見つかりませんでした)。
http://www.yss-aya.com/_iter_15552000_w3702.caffemodel.tar.bz2 aoba_zero_256x20b_mb128.prototxt が対応
http://www.yss-aya.com/_iter_3552000_w3880.caffemodel.bz2 aoba_zero_256x40b_mb64.prototxt が対応
http://www.yss-aya.com/_iter_226320_w4312.caffemodel.bz2 aoba_256x20b_swish_predict.prototxt が対応
2. はい。ネットワークの入力はすべて 9x9 x362 です。w3881 以降では入力の内容は変わってますが
入力のサイズは 9x9x362 です(一部全部0で埋まっている面があります)。
AobaZeroとの違い(w3381以降はAoba駒落ちと同じ入力で、さらにReLuをSwishに変更してます)。
http://www.yss-aya.com/komaochi/diff.html
構造変更後のNNへの入力と出力のサンプルは下のようになります。
http://www.yss-aya.com/moves30in.txt
http://www.yss-aya.com/moves30out.txt
下の棋譜の30手目で、31手目を探索させた場合のRootの入力です。
http://wdoor.c.u-tokyo.ac.jp/shogi/view/2023/01/11/wdoor+floodgate-300-10F+coduck_pi2_600MHz_1c+AobaZero_w4213_n_p800+20230111110007.csa
position startpos moves 7g7f 8c8d 2h6h 1c1d 5i4h 1d1e 4h3h 5a4b 6g6f 7a6b 3h2h 3c3d 7i7h 8d8e 8h7g 6a5b 3i3h 3a3b 6i5h 4b3a 4g4f 2c2d 7h6g 5c5d 6h8h 2b3c 8g8f 8e8f 7g8f 6c6d
下の行を if (1) にすると出力されます。
https://github.com/kobanium/aobazero/blob/develop/src/usi-engine/bona/yss_net.cpp#L736
出力は Policyが以下で
https://github.com/kobanium/aobazero/blob/develop/src/usi-engine/Network.cpp#L992
Valueが以下で取り出しています。
https://github.com/kobanium/aobazero/blob/develop/src/usi-engine/Network.cpp#L992
元はLeelaZeroのコードです。
3. w000000004312.txt
は独自形式となっています。
*.caffemodel を変換したものです。
export LD_LIBRARY_PATH=/home/yss/caffe_cpu/build/lib:
export PYTHONPATH=/home/yss/caffe_cpu/python:$PYTHONPATH
python ep_del_bn_scale_factor_version_short_auto.py /home/yss/shogi/learn/snapshots/_iter_226320.caffemodel
mv binary.txt w000000004312.txt
xz -9 -z -k w000000004312.txt
変換用スクリプトはこちらです。
https://github.com/kobanium/aobazero/tree/develop/learn/extract
混乱しやすい点は *.caffemodel には Batch Normalizationの推論時の平均値を割る定数が含まれている点で、
学習回数が多い場合は、ほぼすべて 999.982 になります。
この数値はw*.txtには含まず、読み込み時に定数で変換しています。
https://github.com/kobanium/aobazero/blob/develop/learn/extract/ep_del_bn_scale_factor_version_short_auto.py#L167
https://github.com/kobanium/aobazero/blob/develop/src/usi-engine/Network.cpp#L170
w000000004312.txt を *.caffemodel への変更も可能です。
https://github.com/kobanium/aobazero/blob/develop/learn/yss_dcnn.cpp#L5040
のコメントを外して直後に
solver->Snapshot(); return;
を実行します。
Caffeはもう開発を停止しているので私は下を使ってます(RTX 3090で動作させる場合)
r39のcaffeをこちらに
https://github.com/BVLC/caffe/pull/7000
$ git clone -b fixes_for_cudnn8_bvlc_master https://github.com/artyom-beilis/caffe.git caffe_artyom
$ protoc src/caffe/proto/caffe.proto --cpp_out=.
$ mkdir include/caffe/proto
$ mv src/caffe/proto/caffe.pb.h include/caffe/proto
makefile.config は 動いてるのに合わせる。
自分で書いていて思ったのですが時代遅れになってしまったCaffeを使ってるせいで
現在のPyTorchなどの環境で動かすのはかなり面倒かもしれません・・・。
山下様
極めて詳細なご説明、大変助かります。
やはりCaffeのまま進めるのが無難なのかもしれませんね・・・。
その上で大変申し訳ないのですが最後に以下2点、確認させて頂いてもよろしいでしょうか。
1.
> 出力は Policyが以下で
> https://github.com/kobanium/aobazero/blob/develop/src/usi-engine/Network.cpp#L992
> Valueが以下で取り出しています。
> https://github.com/kobanium/aobazero/blob/develop/src/usi-engine/Network.cpp#L992
こちらに関して、Valueは以下のリンクということでよろしかったでしょうか?
https://github.com/kobanium/aobazero/blob/develop/src/usi-engine/Network.cpp#L1003
2.
> 構造変更後のNNへの入力と出力のサンプルは下のようになります。
> http://www.yss-aya.com/moves30in.txt
> http://www.yss-aya.com/moves30out.txt
こちら、ご用意いただけて大変助かります。ただ、もしよろしければ、同一局面における構造変更"前"の入出力サンプル(入力だけでも)も頂けたら大変ありがたく思います。すみませんが、ご教示いただけますと大変助かります。
以上、度々のご質問となり申し訳ありません。どうぞよろしくお願いいたします。
高木
1. はい。失礼しました、ご指摘の位置が正しいです。
2. 構造変更前はこちらになります。同じ30手目の局面でのw3459での実行結果です。
http://www.yss-aya.com/w3459_in.txt
http://www.yss-aya.com/w3459_out.txt
山下様
早速にありがとうございます。
また、この度はどうもありがとうございました。大変助かりました。
高木
日本ルールに近い中国ルール、「Pass Incentive」を採用したCGOSを動かしています。
http://203.138.189.63/cgospass/9x9/standings.html
このルールは、
・中国ルール
・コミ6.5
・白が最初にパスしたら+1目。(「最初にPASSしたplayerは+1目」から変更)
一番最後が重要でこうすることで日本ルールのコミ6.5とほぼ同じ条件になります。
これはKataGoの hasButton を有効にしたときとほぼ同一です。
KataGoのhasButtonはコミ7.0で最初のPASSに+0.5目、です。
台湾でも使われている「収後」とも同一です(最後に黒がダメを詰めたら1目払う)。
このルールを採用する理由として
・中国ルール、コミ7.5は19路だと黒の勝率がKataGoの自己対戦で0.417
・中国ルール、コミ7.0は 9路だと上位は引き分けだらけでつまらない(戦わずに囲いあって持碁ばかり)。
それに対して
・中国ルール、コミ7.0、hasButtonありは19路でKataGoの自己対戦が0.487とほぼ互角
・2020年の福建海峡銀行杯は「中国ルール、コミ6.5、ただし白が最初にパスすればコミ7.5」を採用
つまり19路ではこのルールがしばらく採用されそう、なためです。
日本ルールのコミ6.5でもいいのですが日本ルールだとCGOSで全自動で判定ができないので。
ルール名は「Pass Incentive」としています。
命名は王メイエン9段です。
他に、
・「連続PASSが3回」で終局、としています。
これは2回だと下のケースで死石打ち上げることができずに負けるためです。ゲーム番号455以降でパス3回終局です。
http://203.138.189.63/cgospass/viewer.cgi?9x9/SGF/2023/08/18/202.sgf
現在動かしてるKataGoは、下は hasButton = true にした状態のもので
http://203.138.189.63/cgospass/9x9/cross/kata1_b18s698v100.html
下はさらに ignoreGTPAndForceKomi = 7 を設定したものです(これが正しい設定だと思います)。
http://203.138.189.63/cgospass/9x9/cross/ForceKomi7ButtV100.html
ルールの仕様をどうするのかは悩ましいのですが。
KataGoで採用されてるButtonGo仕様が正しいのかもしれません。
現在動いてるのは9路のみです。
IP : 203.138.189.63
Port: 6909
KataGoの自己対戦から見るコミ、ルールによる勝率
http://www.yss-aya.com/bbs_log/bbs2022.html#bbs19
「収後」とは「最後」のダメを「収める」という意味
http://www.yss-aya.com/bbs_log/bbs2022.html#bbs40
KataGoのルール説明
https://lightvector.github.io/KataGo/rules.html
ButtonGo
https://senseis.xmp.net/?ButtonGo
下のように1眼のセキが出来るケースでは「最初にパスしたら+1」だと
日本ルール、中国ルールではとも白半目勝ちなので黒半目勝ちになってしまうのでダメですね。
福建海峡銀行杯(や収後のように)「白が最初にパスしたら+1」が正しいですか。
http://203.138.189.63/cgospass/viewer.cgi?9x9/SGF/2023/08/21/white_shoud_win.sgf
とりあえず「白が最初にパスしたら+1目」にルールを変更して動かしています。
黒が最後に打って日本ルールと中国ルールで結果が同じ局面、てあるのでしょうか?
ありそうな気もするのですが難しいです。
特殊なセキ(下辺)が出来る場合は日本ルールだと0目と数えるので
黒が最後に打って、中国、日本、どちらも B+1.5 ですが。
http://203.138.189.63/cgospass/viewer.cgi?9x9/SGF/white_seki_0pt.sgf
昨年の8月から掲示板移行後の過去ログをまとめてみました。
この掲示板だと全文検索しにくいので。
http://www.yss-aya.com/bbs_log/bbs2023.html
大渡さん、全部の競技にエントリーしているようです。すごい・・・。
ルール実装するだけで大変そうです。
Result
https://docs.google.com/document/d/1OqPdj26vHG40qFCDY39qOYpu3SphLt5lvp8O_TheKRY/edit
ICGA
https://icga.org/
2023年12月2(土)〜3日(日)から第4回世界将棋AI電竜戦 本戦が開催されます。
詳細は下記をご参考くださいませ。
https://denryu-sen.jp/dr4/
今回の大きな特徴として先手と後手の持ち時間に差があるものとなっています。こちらの実装上の理由から指し手を利用した指定局面対応が必要となります。
応募フォームは近日公開の予定です!
スケジュールについてご報告です。
本戦受付フォームはおおよそ2023年11月11日ごろから公開予定。よろしくお願いします。
電竜戦本戦の申込み開始しましたのでよろしくお願いいたします。
https://twitter.com/DenryuSen/status/1722995595462283448
▼第4回世界将棋AI電竜戦 本戦の申込みフォーム
https://docs.google.com/forms/d/e/1FAIpQLSd9hygp7zC2EbPGmNqmMH7N9DBDZtM5_IJVWGoepqJb52XfBQ/viewform
借りているVPSによると外部から攻撃を受けて同じサーバの他のお客さんに迷惑なので強制的停止させた、とのことです。
ネットで調べるとVPSはDDoS攻撃などがあった場合、攻撃された側の責任?として
停止、解約されることがあるみたいです。
現在、CGOS含め、復旧していますが別のVPSサーバに移行せざるを得ないかもしれません。
ツイタDMできなかったのでこちらから失礼します。
本サイトいまだにhttp通信ですし、失礼ながら攻撃者から見るといろいろと手緩いとみられてしまうところ見受けられます。経験的に攻略価値が高いとみられる以外にも、手緩いとみられるサーバには攻撃が増えやすいです。こちらにかけなければ私のサイトで公開しているメールへの返信でも構いません。
sshなら、
公開鍵形式、パスワードログイン無効化、同一接続元からの連続試行アクセスは遮断、接続元を制限などお勧めします。
http/httpsなら、
DDOSブロックモジュール導入や、不要モジュール無効化、同一接続元からの連続試行アクセスは遮断、動作しているwebサーバのバージョン秘匿、拡張子などによるアクセス制限などお勧めします。
すでにやっている。あるいは何等かに理由でやっていないなどあるかもしれませんがご報告いたします。
ありがとうございます。とりあえずhttpsの導入を検討してみます。
今日、明日とUEC杯が行われています。
今日は予選6回戦が行われ、明日、上位8チームの総当たりの予定です。
第15回UEC杯
http://entcog.c.ooco.jp/entcog/new_uec/
棋譜中継
http://203.138.189.63/uec2023/
2日目の解説会が大橋拓文七段、牛栄子四段、聞き手:長井多葉紗さんで行われています。
UEC杯配信のZoomミーティング
https://www.youtube.com/watch?v=_aHCLl3DVDQ
第15回UEC杯コンピュータ囲碁大会2日目 対戦棋譜生配信
https://www.youtube.com/watch?v=8xN8mPbC_q4
CrazyStoneのRemiさんが1984年の8bitマシンで
小さなニューラルネットを動かして現地で9路で対戦できるように
しています。
勝つと賞状がもらえます。
説明は下。重みのプラスマイナスに合わせてアセンブラのコードを自動生成してるそうです。
掛け算がbit数の関係でunsignedで、内積の計算が必ずプラスになるように。
https://www.kayufu.com/files/crazy_stone_1984_poster.pdf
egが全勝で優勝しました。2位から4位は5勝2敗で3つ巴になり
予選順位が適用されて2位 Engawa、3位 CrazyStoneでした。
予選ではCrazyStone1984が参加していました。
これは8bitマシンでPolicy1手読みで動くもので(
会場ではRemiさんが8bitマシンを持ち込み9路で対戦することも可能でした。1手12秒ほどです。
19路の大会は1手に1分かかるためエミュレート環境でノータイムで動いていました。



勝也の作者さんの連絡先分りますかね。
他愛も無い話なのでこの場でも良いんですけど、連絡取りたいです。
Thunderbirdさんのことなんですけど。
UEC杯のSlackに登録されたメールに送信いたしました。
清さん、大会にも出てきて欲しいですね。
Edaxというツールを利用してαβ法でweakly solvedだとか。
引き分けになるそうです。
OTHELLO IS SOLVED
https://arxiv.org/pdf/2310.19387.pdf
GPWの初日の夜に、著者の方のトークがあるそうです。楽しみです。
初日のナイトイベントでは(株)Preferred Networksの滝沢拓己様に,オセロの弱解決とその解法について話していただく予定です.
http://www.gi-ipsj.org/gpw/2023/program.html
floodgate は、そろそろ運用停止になるのでしょうか。
かなり前からレーティングの計算が止まっている様ですし、現在もマッチングが停止している様です。
接続エラーも時々おきるようです。
お忙しいのかもしれません。
森脇さんに連絡とってみます。
マシンの不調のようで今夜以降に対応していただける、とのことです。
https://twitter.com/daigog/status/1722960476034961616
改善したようですね。
お忙しい中、ありがとうございました!
ご対応有難うございました。
レーティングの更新もされており、安心いたしました。
復旧していただいて感謝です。
9月の障害で記録データが一部壊れてしまった、とのことです。
11月17日から箱根で開催されるGPWの論文が公開されています。
https://ipsj.ixsq.nii.ac.jp/ej/index.php?action=pages_view_main&active_action=repository_view_main_item_snippet&index_id=11423&pn=1&count=20&order=7&lang=japanese&page_id=13&block_id=8
GPW杯の9路と将棋の結果
11月17日から19日まで箱根でGPWが行われ
18日の夜にGPW杯が囲碁の9路と将棋で開催されました。
将棋はponkotsuとAobaZeroが参加してponkotsuが勝ち優勝しました。
山岡さんが何かしら修正されたfloodgateサーバをGlobal IPで立てて、
指定局面用の usiToCsa.rb で --floodgate を付けず下のようにログインすると
2つログインした時点で対局が始まりました。
/home/yss/shogi/gps/shogi-server/bin/usiToCsa20210627yamaoka_shitei.rb --id=aobazero --host=203.138.189.63 --password=aobahoge --keep-alive=60 "/home/yss/shogi/aoba_develop/bin/aobaz_60f2 -p 100000 -h 1 -i -drawmove 512 -b 7 -t 17 -w /home/yss/test/extract/w000000004292.txt"
棋譜はこちら。
http://www.yss-aya.com/komaochi/csa/gpw2023.html
floodgateのサーバ
https://github.com/TadaoYamaoka/shogi-server
指定局面用の usiToCsa.rb
https://github.com/TadaoYamaoka/shogi-server/blob/master/bin/usiToCsa.rb
囲碁は
1. CrazyStone 1984
2. Aya BASIC
3. きのあ囲碁
の3つが参加して、きのあ囲碁2連勝で優勝、CrazyStoneが1勝1敗で2位でした。
CrazyStoneは8bitマシンでニューラルネットワークを動かしてるものでGPWで論文として発表されたものです。
UEC杯に参加していたものの9路盤でもあります。
Ayaは同じ8bitマシン(フランスのMO5という当時一番普及したもの)のEmulator上でBASICで書かれたもので参加しました。
きのあ囲碁さんはブラウザ経由でサーバで計算して動くαβ+MCTSの評価関数、です。
MO5のEmulatorはRemiさんの御父上が作られたもので下からダウンロード可能です。
ダウンロード時に下が必要です。
ID : dcmoto
PASS: thomson
http://dcmoto.free.fr/
Ayaのソースは下で aya1mo5.bas をコピーして
1. copy aya1mo5.bas (FILE - simulate keyboard - simulate with the clipboard).
2. RUN (set pattern binary to memory.)
3. NEW
4. copy aya2mo5.bas (FILE - simulate keyboard - simulate with the clipboard).
5. RUN
で動きます。2つに分けているのは3x3のパターンが32KBのメモリに収まらず、
いったんPOKEでメモリに書き込んでから思考部を動かすようになってます。
1手に3分ぐらいかかるので、対局中はF7を押して30倍ぐらい高速に動作させてました。
http://www.yss-aya.com/aya1mo5.bas
http://www.yss-aya.com/aya2mo5.bas
Remiさんときのあの山田さんの間に映ってるのはオセロAIの招待講演の山名さんです。


論文(Paper)自体は後日有料で出版される予定とのことです。
Day1, 11月29日 01:45-06:40 (日本時間、深夜)
Day2, 11月29日 14:00-17:40 (日本時間、昼)
Day3, 11月30日 22:00-01:00 (日本時間、夜)
Day 1:
Keynote 1 by Martin Muller Solution Methods for Two Player Games
Keynote 2 by Frank Lantz Games, Computability, AI, and Aesthetics
Day 2:
Keynote 3 by Hiroyuki Iida Using Games to Study Law of Motions in Mind
Day 3:
Keynote 4 by Tristan Cazenave Bootstrapping Artificial Intelligence
ICGA
https://icga.org/
名前とメールアドレスを登録すると視聴可能とのことです。
https://ualberta-ca.zoom.us/webinar/register/WN_AU2TmdTcSQq6pgA08T4RRw
12月3日から停電のため停止する、とのことです。
復旧は月曜以降の予定、とのことです。
[Shogi-server/Floodgateのお知らせ] 停電のため、明日(12月3日(日)未明) より停止予定です。復旧は週明けとなる見込みです。
https://twitter.com/daigog/status/1730780652470210741
昨日の13:30から再開し、今日の早朝にはWebページも見れるようになっていたようです。
復旧ありがとうございました。
[Shogi-server/Floodgateのお知らせ] shogi-serverは稼働中です。動的コンテンツは1時間程度で復旧します。
https://twitter.com/daigog/status/1731656361107464400
現在のAobaZeroの自己対戦の先手勝率は0.693 なのですが
先手が勝った局面の学習割合を減らして先手勝率が5割程度になる重みの方が+60 ELOほど強い?かもしれません。
下は先手が勝った局面の学習割合を変えた場合のELOです。
先手の勝ち局面を0.2から0.3倍と下げた場合に、+57,+56と一番強く、初期局面の勝率も50%程度になっています。
0.9倍から1.1倍とほぼそのままだと-6、-7と60 ELO近く弱くなってます。
対水匠5(7.50,1手4k)と1手100playoutの勝率。互角局面(24手目まで)利用。192x10block。50万棋譜(4447万局面)をミニバッチ256で10万回(2560万局面)学習。
Raw勝率 勝 分 敗 局数(宣 千 宣) 先手勝率 勝率 95% ELO 先手勝ちの局面の選択倍率
75.0% 278- 6-516 800 (2- 6-1)(s=410-384,0.516), 0.351(0.033)(-106) (1.0) この重みから10万回追加学習
40.3% 414- 8-378 800 (2- 8-0)(s=383-409,0.484), 0.522(0.034)( 15) 0.1
50.5% 463- 6-331 800 (7- 6-1)(s=388-406,0.489), 0.583(0.034)( 57) 0.2
51.8% 461- 7-332 800 (5- 7-1)(s=411-382,0.518), 0.581(0.034)( 56) 0.3
54.7% 444-10-346 800 (4-10-3)(s=395-395,0.500), 0.561(0.034)( 42) 0.5
61.0% 421-12-367 800 (4-11-3)(s=389-399,0.494), 0.534(0.034)( 23) 0.6
64.7% 427- 8-365 800 (6- 8-1)(s=382-410,0.482), 0.539(0.034)( 26) 0.7
65.5% 389- 7-404 800 (2- 7-2)(s=395-398,0.498), 0.491(0.035)( -6) 0.9
68.2% 387- 9-404 800 (2- 9-1)(s=396-395,0.501), 0.489(0.034)( -7) 1.1
63.1% 353- 7-440 800 (3- 7-1)(s=382-411,0.482), 0.446(0.034)( -37) 1.3
Raw勝率、は平手の初期局面でNetworkのValueの先手勝率です。
ちょっと高めなのは先手勝率75.0%のweightから追加学習させたせいと、初期局面の学習割合が低いためと思われます。
ただ、これは学習回数が少ない、4分の1の小さい重み、なので実際の差はもっと小さくなるか逆効果かもしれません。
学習は192x10blockで65860万棋譜からの50万棋譜をミニバッチ256で10万回学習させた重み、から
先手勝ちの局面の割合を変えて追加学習させた結果です。
学習率は最初が0.01から0.001、追加が0.001から0.0001のcos annealingです。
追加学習させてるのは、この方が学習ごとの変動が小さいためです。
局面の選択はKLD(Policyの分布と探索回数の分布の違いが大きい局面を学習しやすく)や
局面の勝率が0,80付近のものを選択確率を上げ、40手以下での投了した棋譜の確率を下げ、
40手前までの手数が少ない序盤ほど確率を下げてます。
これらにさらに追加で先手勝ちの割合を変化させています。
AobaZeroで互角の局面の学習を減らして+28 ELO
http://www.yss-aya.com/bbs/patio.cgi?read=48&ukey=1
勝率が偏ってると弱くなるのは以下の理由が考えられそうです。
・MCTSは勝率が高すぎる、低すぎる場合は2つの手を区別できない
・PUCTは勝率が低すぎる場合は全部の手を調べてしまい、効率が悪い
・自己対戦なので、後手が実際以上に局面を悲観してる(簡単な手の読み抜けがあっても、どちらも読み抜けてそのまま)。
試したきっかけは48さんとの会話でした。
> 再稼働しました。先手勝率が上がってきていますね。
https://twitter.com/bleu48/status/1733305158619299904
ただ先手勝ちの割合を減らすと先手勝ちの棋譜が有効に使われないので
後手のplayout数を増やすか、Aoba駒落ちのようにRootの温度を調節して勝率5割の棋譜を作るようにした方がいいのかもしれません。

その後、追試したのですが、先手勝ちの局面を減らして勝率5割の評価関数を作っても明確に強い、
という結果は得られませんでした。
前回の結果はKLDの計算で一部の値がINT_MAXを超えてたのが原因でした。
対水匠5(7.50,1手4k)と1手100playoutの勝率。互角局面(24手目まで)利用。192x10block。
Raw勝率 勝 分 敗 局数(宣 千 宣) 先手勝率 勝率 95% ELO 先手勝ちの局面の選択倍率
58.8% 1048-17-1335 2400 (10-14-3)(s=1173-1210,0.492), 0.440(0.020)( -41) 1.0
40.1% 909-14-1477 2400 ( 6-14-4)(s=1187-1199,0.497), 0.382(0.019)( -83) 0.1
47.0% 961-15-1424 2400 ( 5-15-9)(s=1183-1202,0.496), 0.404(0.020)( -67) 0.2
46.8% 1010-15-1375 2400 (11-15-4)(s=1178-1207,0.494), 0.424(0.020)( -53) 0.3
50.2% 1076-18-1306 2400 (10-17-1)(s=1251-1131,0.525), 0.452(0.020)( -33) 0.41
56.9% 1025-15-1360 2400 (12-14-8)(s=1172-1213,0.491), 0.430(0.020)( -48) 0.6
64.9% 1035-18-1347 2400 (11-18-6)(s=1174-1208,0.493), 0.435(0.020)( -45) 0.9
Remiさんが運営されてる
GAME AI Forum(コンピュータ囲碁MLが消えた後の掲示板)が
サーバトラブルで一時停止中とのことです。
復旧にはもうしばらくかかる見込み、とのことです。
GAME AI Forum(現在は 500 Internal Server Error が表示されます)
https://www.game-ai-forum.org/viewforum.php?f=25
CGFオープンにも参加していた台湾の林宏澤さんが
作られているsayuriがゼロからの強化学習を始めてELFv0と同じ強さにまで到達したそうです。
248万局の自己対戦(256x20bでは44万局)で、Gambel方式で学習してるとはいえ、個人レベルで
ここまで到達できるのはすごいです。
CGOSで私も動かしてますが1手1万playoutで
KataGoの100playoutにも2割ぐらい勝っててなかなかすごいです。
同時にやっぱりKataGoの自己対戦だとレートが過剰についてる感じもします。
ちなみにELFはv0,v1,v2と3つあり、1手800playoutだとCGOSで下のような強さです。
CGOS BayesELO
sayuri811_2200_10k 3817 ... sayuriは1手10000playout
LZ_05db_ELFv2_p800 3701
sayuri811_2200_p1k 3666 ... sayuriは1手1000playout
LZ_d13c_ELFv1_p800 3614
LZ_62b541_ELF_p800 3563 ... これと互角に
Github
https://github.com/CGLemon/Sayuri
Main Run 2023-8-11
https://hackmd.io/@yrHb-fKBRoyrKDEKdPSDWg/ByM5hKPh2#
sayuri811_2200_10k。少し古い版の1手10000playout
http://www.yss-aya.com/cgos/19x19/cross/sayuri811_2200_10k.html