囲碁エンジン評価
囲碁エンジン評価
適度に弱いエンジンを求めてパラメータをいろいろ調整したりするページ。
使うコマンドなど
GnuGoにtwogtpというperlスクリプトがあるので基本的にはこれを使う。
試してみると、最後にfinal_scoreというコマンドを使うが、これにamigo_gtpが対応してなさそう。 自分が書いたgnugo 2.6の方には対応しておくか。
また、最後のスコアはパラメータによってはエンジンによって差が出るので、gnugo 3のfinal_scoreを使うのが良さそう。
% ./twogtp --white '../../../amigogtp-1.8/amigogtp/amigogtp amigo_lv1.cfg' --black '../../../amigogtp-1.8/amigogtp/amigogtp' --komi 6.5 --size 9 --games 10 --sgffile amigolv1_amigolv7_
% ls amigolv1_amigolv7_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_amigolv1_amigolv7.txt
ちなみにそれを使うまでもないと思った時は以下のワンライナーしている。
% ls gnugo2d14_ray100_0*.sgf | xargs -L1 head -n 1 | grep "B+" | wc
そしてgnugo2は自分が書いたGTPのデバッグもあり、ちょくちょくバグが入った結果になっている。
パラメータの細かな設定などはコマンドをそのまま乗せる事で記録しておく方が良さそうなのでコマンドをコピペして残しておく。
AmigoGTP lv7 vs lv1、8勝2敗
% ./twogtp --white '../../../amigogtp-1.8/amigogtp/amigogtp amigo_lv1.cfg' --black '../../../amigogtp-1.8/amigogtp/amigogtp' --komi 6.5 --size 9 --games 10 --sgffile amigolv1_amigolv7_
% ls amigolv1_amigolv7_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_amigolv1_amigolv7.txt
GnuGo2 D0 vs AmiGoGTP lv7、36勝4敗
% ./twogtp --white '/Users/arinokazuma/work/GitHub/go_related/amigogtp-1.8/amigogtp/amigogtp' --black '/Users/arinokazuma/work/GitHub/go_related/gnugo-2.6/interface/gnugo --mode gtp --quiet -D 0' --komi 6.5 --size 9 --games 40 --sgffile 2_gnugo2d0_amigo
% ls 2_gnugo2d0_amigo*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_2_gnugo2d0_amigo.txt
D3も試しているが結果は行方不明。(たぶんバグを見つけて全部消したか)
./twogtp --white '../../../amigogtp-1.8/amigogtp/amigogtp' --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 3' --komi 6.5 --size 9 --games 10 --sgffile gnugo2d3_amigo
GnuGo2のDのパラメータ変更(は意味なさそう)
なんかBlackにすると最初にパスすることがあるな。再現条件が分からないが。>clear_boardではfuseki_endedなどのフラグがクリアされてなかったりアゲハマがクリアされてない>修正した。
gnugo2のD 0でno_fusekiだとたまにamigogtpに負けるな。40回やって2回くらい。
お、fusekiありにしたら40回やって4勝だ。布石がある方が負けるのか。
なんかgnugo2同士だとseedがちょっとずつしか変わらないせいか全く同じ棋譜が続いちゃうな。
- gnugo2 D 1 vs D 0: 23勝17敗
- gnugo2 D 4 vs D 0: 40勝0敗
gnugo2は4と0は結構違うな。gnugo 3はレベル変えてもあんま変わらんのだよな。
amigoのレベルはいい感じだな。このくらいに調整して欲しいものだが。
あれ?今ためしてみたらD0とD14はあんま変わらないな。
「black D14」vs「white D0」
./twogtp --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 0' --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --komi 6.5 --size 9 --games 40 --sgffile gnugo2d14_gnugo2d0_
$ ls gnugo2d14_gnugo2d0_*.sgf | xargs -L1 head -n 1 | grep "W+" | wc
17 17 878
$ ls gnugo2d14_gnugo2d0_*.sgf | xargs -L1 head -n 1 | grep "B+" | wc
23 23 1178
なんか試すと逆転する事もあるなぁ。 0とか14は境界値なのでおかしいとかか?
「black D13」vs「white D1」
% ./twogtp --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 1' --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 13' --komi 6.5 --size 9 --games 30 --sgffile gnugo2d13_gnugo2d1_
% ls gnugo2d13_gnugo2d1_*.sgf | xargs -L1 head -n 1 | grep "B+" | wc
6 6 307
% ls gnugo2d13_gnugo2d1_*.sgf | xargs -L1 head -n 1 | grep "W+" | wc
24 24 1239
むしろd1の方が圧倒的に強いんだが。
ひょっとしてコミの問題でBとWで対象じゃないとかか?逆にしてみよう。
「black D1」vs「white D13」
% ./twogtp --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 13' --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 1' --komi 6.5 --size 9 --games 30 --sgffile 2_gnugo2d13_gnugo2d1_
% ls 2_gnugo2d13_gnugo2d1_0*.sgf | xargs -L1 head -n 1 | grep "W+" | wc
20 20 1034
% ls 2_gnugo2d13_gnugo2d1_0*.sgf | xargs -L1 head -n 1 | grep "B+" | wc
10 10 511
D13の方が勝ってるな。
「black D0」vs「white D14」
% ./twogtp --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 0' --komi 6.5 --size 9 --games 30 --sgffile 2_gnugo2d14_gnugo2d0_
% ls 2_gnugo2d14_gnugo2d0_0*.sgf | xargs -L1 head -n 1 | grep "W+" | wc
8 8 413
% ls 2_gnugo2d14_gnugo2d0_0*.sgf | xargs -L1 head -n 1 | grep "B+" | wc
22 22 1137
D0の方が勝ってる。もう全然わからんな。Dの違いはあまりない、という結論でいいんだろうか。
gnugo2 vs gnugo3、2勝8敗
./twogtp --white '../../../gnugo/interface/gnugo --mode gtp --level 0 --cosmic-gnugo' --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 4' --komi 6.5 --size 9 --games 10 --sgffile gnugo23
rayの評価の途中で30回試しても6勝24敗だったのでこのくらいの勝率っぽい。
gnugo3 lv5 vs lv0、6勝4敗
./twogtp --white '../../../gnugo/interface/gnugo --mode gtp --level 0 --cosmic-gnugo' --black '../../../gnugo/interface/gnugo --mode gtp --level 5 --cosmic-gnugo' --komi 6.5 --size 9 --games 10 --sgffile gnugo33lv5
その他いろいろ試してみたが、レベルの違いはあまり結果に影響を及ぼしていない。
Ray 100 vs GnuGo2、32勝、18敗
playout 100で評価。
- black ray100
- white gnugo2 D14
% ./twogtp --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --black '../../../ray/ray --playout 100 --reuse-subtree --no-debug' --komi 6.5 --size 9 --games 30 --sgffile gnugo2d14_ray100_
% ls gnugo2d14_ray100_0*.sgf | xargs -L1 head -n 1 | grep "B+" | wc
16 16 826
% ls gnugo2d14_ray100_0*.sgf | xargs -L1 head -n 1 | grep "W+" | wc
14 14 686
おぉ、いい勝負だ。
(追記) SabakiでUI上で対局させてるとどうも全然負けないのでblackが苦手なのでは?と思い逆にしてみた。
% ./twogtp --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --white '../../../ray/ray --playout 100 --reuse-subtree --no-debug' --komi 6.5 --size 9 --games 50 --sgffile bw_gnugo2d14_ray100_
% ls bw_gnugo2d14_ray100_0*.sgf | xargs -L1 head -n 1 | grep "B+" | wc
13 13 637
% ls bw_gnugo2d14_ray100_0*.sgf | xargs -L1 head -n 1 | grep "W+" | wc
37 37 1924
だいぶ差は出るようになったが、やはり結構負けるな。ただなんか投了で終わってるのが多いのでresignしないようにしてみるか。 結構rayのスコアと食い違っていて、どうも死活をplayout 100では勘違いしているっぽいのでgnugo3のスコアにしてみる(いくつか試したら正しそうだった)。
% ./twogtp --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --white '../../../ray/ray --playout 100 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile bw_gnugo2d14_ray100_res0_
% ls bw_gnugo2d14_ray100_res0*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_bw_gnugo2d14_ray100_ray100_res0.txt
% grep White res_bw_gnugo2d14_ray100_ray100_res0.txt | wc
42 210 1076
42勝8敗。多少はresignの影響もあるがいうほど変わらないか。
一応もう一度黒でもresign 0で試してみる。
% ./twogtp --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --black '../../../ray/ray --playout 100 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile gnugo2d14_ray100_res0_
% ls gnugo2d14_ray100_res0_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_gnugo2d14_ray100_ray100_res0.txt
% grep White res_gnugo2d14_ray100_ray100_res0.txt | wc
18 90 459
% grep Black res_gnugo2d14_ray100_ray100_res0.txt | wc
32 160 819
32勝18敗。やはりresign 0の影響は結構ありそうなので誤って投了している疑惑はあるな。 ただ、それでもかなり近づいているので黒が明確に苦手っぽい。
Ray 50 vs GnuGo2、20勝30敗
% ./twogtp --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --black '../../../ray/ray --playout 50 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile gnugo2d14_ray50_res0_
% ls gnugo2d14_ray50_res0_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_gnugo2d14_ray50_res0.txt
% grep Black res_gnugo2d14_ray50_res0.txt | wc
20 160 819
% grep White res_gnugo2d14_ray50_res0.txt | wc
30 90 459
Ray 1 vs GnuGo2、24勝26敗
% ./twogtp --black '../../../ray/ray --playout 1 --reuse-subtree --no-debug --resign 0' --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --komi 6.5 --size 9 --games 50 --sgffile ray1_gnugo2d14_
% ls ray1_gnugo2d14_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_ray1_gnugo2d14.txt
% grep Black res_ray1_gnugo2d14.txt | wc
1だとむしろ強くなってる…まぁこの辺は探求しても仕方ない範囲だろうな。
Ray 100 vs GnuGo3、12勝18敗
次はgnugo3との対決。
- black ray100
- white gnugo3 lv5
% ./twogtp --white '../../../gnugo/interface/gnugo --mode gtp --level 5 --cosmic-gnugo' --black '../../../ray/ray --playout 100 --reuse-subtree --no-debug' --komi 6.5 --size 9 --games 30 --sgffile gnugo3lv5_ray100_
% ls gnugo3lv5_ray100_0* | xargs -L1 head -n 1 | grep "B+" | wc
12 12 616
% ls gnugo3lv5_ray100_0* | xargs -L1 head -n 1 | grep "W+" | wc
18 18 882
あれ?gnugo3ともいい勝負だ。そんな事ある?2ともう一度戦わせてみるか。
- black gnugo2d14
- white gnugo3 lv5
% ./twogtp --white '../../../gnugo/interface/gnugo --mode gtp --level 5 --cosmic-gnugo' --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --komi 6.5 --size 9 --games 30 --sgffile gnugo3lv5_gnugo2d14_
% ls gnugo3lv5_gnugo2d14_* | xargs -L1 head -n 1 | grep "B+" | wc
6 6 307
% ls gnugo3lv5_gnugo2d14_* | xargs -L1 head -n 1 | grep "W+" | wc
24 24 1242
10回に2回くらい勝ってるな。playout 100だとこの間くらいの強さなのか。いいかもしれない。
Ray 200 vs GnuGo3、25勝25敗
% ./twogtp --black '../../../ray/ray --playout 200 --reuse-subtree --no-debug --resign 0.0' --white '../../../gnugo/interface/gnugo --mode gtp --level 5 --cosmic-gnugo' --komi 6.5 --size 9 --games 50 --sgffile gnugo3lv5_ray200_
% ls gnugo3lv5_ray200_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_gnugo3lv5_ray200.txt
% grep Black res_gnugo3lv5_ray200.txt | wc
25 125 636
% grep White res_gnugo3lv5_ray200.txt | wc
25 125 642
おお、完全に5分だ。
Ray 300 vs GnuGo3、32勝18敗
% ./twogtp --black '../../../ray/ray --playout 300 --reuse-subtree --no-debug --resign 0.0' --white '../../../gnugo/interface/gnugo --mode gtp --level 5 --cosmic-gnugo' --komi 6.5 --size 9 --games 50 --sgffile gnugo3lv5_ray300_
% ls gnugo3lv5_ray300_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_gnugo3lv5_ray300.txt
% grep Black res_gnugo3lv5_ray300.txt | wc
32 160 812
いい感じに強くなるな。それにしても未だにfinal scoreの結果がW+87.5とかなるのだがなんなんだろう?
Ray 1 vs AmiGoGTP lv7、50勝0敗
% ./twogtp --black '../../../ray/ray --playout 1 --reuse-subtree --no-debug --resign 0.0' --white '../../../amigogtp-1.8/amigogtp/amigogtp' --komi 6.5 --size 9 --games 50 --sgffile ray1_amigolv7_
% ls ray1_amigolv7_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_ray1_amigolv7.txt
% grep Black res_ray1_amigolv7.txt | wc
50
ray 1でもAmigoGTP lv7よりは遥かに強い、という事になってしまった。
Ray 1000 vs Ray 5000、18勝3敗
長すぎたので途中で中断。結構違い出るね。
% ./twogtp --black '../../../ray/ray --playout 1000 --reuse-subtree --no-debug' --white '../../../ray/ray --playout 5000 --reuse-subtree --no-debug' --komi 6.5 --size 9 --games 50 --sgffile ray1000_ray5000_
Ray 1000 vs Ray 2000、22勝28敗
あんま変わらないな。
% ./twogtp --black '../../../ray/ray --playout 1000 --reuse-subtree --no-debug' --white '../../../ray/ray --playout 2000 --reuse-subtree --no-debug' --komi 6.5 --size 9 --games 50 --sgffile ray1000_ray2000_
% ls ray1000_ray2000_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_ray1000_ray2000.txt
% grep Black res_ray1000_ray2000.txt | wc
22
Ray 25 vs Ray 50、49勝1敗
圧倒的に25の方が強いんだが、そんな事ある?
% ./twogtp --black '../../../ray/ray --playout 25 --reuse-subtree --no-debug' --white '../../../ray/ray --playout 50 --reuse-subtree --no-debug' --komi 6.5 --size 9 --games 50 --sgffile ray25_ray50_
% ls ray25_ray50_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_ray25_ray50.txt
% grep Black res_ray25_ray50.txt | wc
summarize.sh
いい加減シェルスクリプト書いた。
#!/bin/sh
PREFIX=$1
ls ${PREFIX}_*.sgf | xargs -I {} ../gnugo --score finish {} | grep "wins by" > res_${PREFIX}.txt
grep Black res_${PREFIX}.txt | wc
Ray 50 vs Ray 75、49勝1敗
最弱のplayout数を求めて。
% ./twogtp --black '../../../ray/ray --playout 50 --reuse-subtree --no-debug' --white '../../../ray/ray --playout 75 --reuse-subtree --no-debug' --komi 6.5 --size 9 --games 50 --sgffile ray50_ray75_
% ./summarise.sh ray50_ray75
49
さすがにこれはおかしい気がする。 Sabakiで見た感じ、どうも普通にお互い打って途中で白が投了、というパターンっぽいな。
白黒入れ替えよう。
% ./twogtp --black '../../../ray/ray --playout 75 --reuse-subtree --no-debug' --white '../../../ray/ray --playout 50 --reuse-subtree --no-debug' --komi 6.5 --size 9 --games 50 --sgffile ray75_ray50_
% ./summarise.sh ray75_ray50
50
やはりいつも黒が勝つな。resignしないようにしてみよう。
% ./twogtp --black '../../../ray/ray --playout 50 --reuse-subtree --no-debug --resign 0' --white '../../../ray/ray --playout 75 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile ray50_ray75_r0_
% ./summarise.sh ray50_ray75_r0
50 250 1300
あれ、やはり黒が勝つな。これはplayoutの問題じゃなくてアルゴリズムの問題っぽいな。うーん。
AmiGoGTP lv7 vs Ray 1、0勝50敗
先ほどのAmigoの結果を白黒逆にしてみよう。
% ./twogtp --black '../../../amigogtp-1.8/amigogtp/amigogtp' --white '../../../ray/ray --playout 1 --reuse-subtree --no-debug --resign 0.0' --komi 6.5 --size 9 --games 50 --sgffile amigolv7_ray1_
% ./summarise.sh amigolv7_ray1
やはりAmiGoGTPでは全然勝てないという結論っぽいな。
GnuGo2 vs Ray 1、0勝50敗
% ./twogtp --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --white '../../../ray/ray --playout 1 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile gnugo2d14_ray1_
% ./summarise.sh gnugo2d14_ray1
まぢで?なんで?棋譜を見ても単にRay 1が強いだけに見えるなぁ。(手違いでsgfファイルは消してしまった)
GnuGo2 vs Ray 50、0勝50敗
Ray 50に戻してみよう。
% % ./twogtp --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --white '../../../ray/ray --playout 50 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile gnugo2d14_ray50_
% ./summarise.sh gnugo2d14_ray50
0
まぢで!?
20勝30敗だったのはなんだったんだ?
もう一度先後を入れ替えて試してみよう。
% ./twogtp --black '../../../ray/ray --playout 50 --reuse-subtree --no-debug --resign 0' --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --komi 6.5 --size 9 --games 50 --sgffile ray50_gnugo2d14_
% ./summarise.sh ray50_gnugo2d14
25
どうもめっちゃ白が得意らしい。黒はそうでもないらしい。うーん、俺が勝てない訳だ。
さっきRay 100では白でもそこそこ負けていた。 もう一度試してみよう。
% ./twogtp --black '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 14' --white '../../../ray/ray --playout 100 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile 2_gnugo2d14_ray100_
% ./summarise.sh 2_gnugo2d14_ray100
5
さっきは8だったが、まぁ同じ水準か。 下の方ではplayoutを上げる方が負ける率は上がるのか〜。 そして白はめっちゃ得意なのか〜。
GnuGo3 vs Ray 50、35勝15敗
GnuGo3を黒にしてみよう。
% ./twogtp --black '../../../gnugo/interface/gnugo --mode gtp --level 5 --cosmic-gnugo' --white '../../../ray/ray --playout 50 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile gnugo3lv5_ray50_
% ./summarise.sh gnugo3lv5_ray50
35
GnuGo3と戦うと白でも黒でもそんなに結果が変わらなさそうだな。そしてplayoutの分だけ弱くなっているように見える。
でもやはり下の方の挙動は不安定だな。型にハマるとめっちゃ強くなってしまう。 やはりgnugo2の代わりにはしない方がいいな。 一方でGnuGo3の代わりにはしても良いかもしれない。 でもfinal_scoreとかの安定さはGnuGo3を使いたい気持ちもあるんだよなぁ。
GnuGo3 vs Ray 1、30勝20敗
% ./twogtp --black '../../../gnugo/interface/gnugo --mode gtp --level 5 --cosmic-gnugo' --white '../../../ray/ray --playout 1 --reuse-subtree --no-debug --resign 0' --komi 6.5 --size 9 --games 50 --sgffile gnugo3lv5_ray1_
% ./summarise.sh gnugo3lv5_ray1
やはりあまり弱くならない、という事だな。
AmiGoGTP vs liberty、2勝8敗
% ./twogtp --black '../../../amigogtp-1.8/amigogtp/amigogtp' --white '../../../liberty-1.0_simple_gtp/liberty' --komi 6.5 --size 9 --games 10 --sgffile amigolv7_liberty_
% ./summarise.sh amigolv7_liberty
おお、いい勝負。
liberty vs GnuGo2 D4 1勝49敗
% ./twogtp --black '../../../liberty-1.0_simple_gtp/liberty' --white '../../../gnugo-2.6/interface/gnugo --mode gtp --quiet -D 4' --komi 6.5 --size 9 --games 50 --sgffile liberty_gnugo2d4_
% ./summarise.sh liberty_gnugo2d4
うむ、GnuGo 2にはだいぶ勝てないな。