2015/02/02 Javaの碁盤からJavascriptの eidogo に
2006/02/17 興味がわいて作成
囲碁の場合
1.モンテカルロ法とは?
2.モンテカルロ法を囲碁に適用すると?
3.5路盤での結果
4.9路盤と19路盤の結果
5.終局までの平均手数と平均目数、最大の手の目数
6.実際の囲碁プログラムでのモンテカルロ法
7.少し強く?したモンテカルロ法
8.実際にモンテカルロ法で対局させてみると?
2005年9月のコンピュータオリンピックの囲碁の9路盤部門でモンテカルロ法を採用したフランスの囲碁プログラムが 好成績を収めました。(3位と5位、9チーム中) こんなお手軽でインチキくさい?方法がどこまで効果があるものか自分でも少し調べてみました。
になります。 最初 100個 1000個 10000個πの値 3.28 3.208 3.154内部の点 82個 802個 7886個
2.モンテカルロ法を囲碁に適用すると?
囲碁に適用すると、 1. 全ての着手可能な場所に乱数で石を置く。 2. 1.を白黒交互に繰り返す。打つ場所がなくなってパスが2回続けば終局。 3. 点数を計算する。 4. 1. - 3. を何度も繰り返して点数の平均値を求める。 となります。 ここで注意しないといけないのは本当に完全に乱数で打っていくと、終局しない、という点です。 例えば下の図で、次に白がB4に打ってしまうと、黒はA5に打って、全部の石が 取られてしまいます。これを繰り返すため、無限に続きます。 ABCDE ABCDE ABCDE 1○○○●┐ 1○○○●┐ 1┌┬┬●┐ 2○●●┼● 2○●●┼● 2├●●┼● 3○○●●┤ 3○○●●┤ 3├┼●●┤ 4○+○●● 4○☆○●● 4├┼┼●● 5└○○●┘ 5└○○●┘ 5★┴┴●┘ B4に打つと・・・ 全部取られてしまう! そのため、「眼」には打たない、というルールを付け加えないといけません。 「眼」の定義は「4方向が全て自分の石か壁で、なおかつ自分の石のダメは2以上」 という風にしています。 もう一つ、ルールは中国ルールを採用しています。 これは終局図の点数計算が楽なためです。 中国ルールは簡単に言うと「盤上に残った自分の石と陣地の合計」を数える方法です。 日本ルールは「アゲハマ(取った石)と自分の陣地の合計」です。 最大の違いは「自分の陣地に石を置いても損にならない」という点でしょうか。 そのため、相手の死石を全部打ち上げても損になりません。 またアゲハマ(取った石)は無視できます。 ABCDE 1○○○●┐ アゲハマを無視すると、日本ルールでは黒地4目、白地2目なので黒2目勝ち。 2○●●┼● 3○○●●┤ 中国ルールでは黒地4目+黒石9個、白地2目+白石10個なので黒1目勝ち。 4○+○●● 5└○○●┘ このため、終局図で残っている石は全部活きた石(死石は全部取られている)と 考えることができます。3.5路盤での結果
下は5路盤でそれぞれの場所打った後に、100万局、乱数対戦を行った場合の 点数の平均値です。 例えば、5路盤の天元、C3に打った場合は、黒が平均+7.57目勝てる、という意味です。 逆に、隅のA1に打った場合は黒は-3.20目負ける(白が3.20目勝つ)になります。 5路盤の位置の平均点数(100万局の乱数対戦) A B C D E 1 -3.20 1.27 1.09 1.26 -3.21 2 1.26 4.89 6.07 4.97 1.27 3 1.02 6.14 7.57 6.09 1.05 4 1.26 4.95 6.09 4.93 1.29 5 -3.24 1.28 1.03 1.32 -3.24 なんだか意味ありげな数値が出ているようにも思えます。 実は5路盤は完全に解かれていて、解析された結果があります。 原論文は作者のページからダウンロードできます。 Solving Go on Small Boards. E.C.D. van der Werf, H.J. van den Herik, J.W.H.M. Uiterwijk (2003). ICGA Journal Vol.26, No. 2, pp.92-107. [ ps.gz ] http://erikvanderwerf.tengen.nl/5x5/5x5solved.html 完全解析の結果は、天元に黒が打って白全滅の黒25目勝ちです。 地の計算は中国ルールで数えてるので日本ルールなら黒24目勝ちが25目勝ち になっています。その他の初手は下の通りです。 黒25目勝ち 黒3目勝ち 白1目勝ち ABCDE ABCDE ABCDE 1┌┬┬┬┐ 1┌┬┬┬┐ 1┌┬┬┬┐ 2├┼┼┼┤ 2├┼┼┼┤ 2├┼┼┼┤ 3├┼●┼┤ 3├┼┼┼┤ 3├┼┼┼┤ 4├┼┼┼┤ 4├┼●┼┤ 4├●┼┼┤ 5└┴┴┴┘ 5└┴┴┴┘ 5└┴┴┴┘ 上3つ以外の初手は白25目勝ちです。 これを碁盤上に書くと、 -25 -25 -25 -25 -25 -25 -1 +3 -1 -25 -25 +3 +25 +3 -25 -25 -1 +3 -1 -25 -25 -25 -25 -25 -25 となります。 これをさっきのモンテカルロの結果と並べてみます。 100万回乱数で打った場合の平均 正しい答え A B C D E A B C D E 1 -3.20 1.27 1.09 1.26 -3.21 -25 -25 -25 -25 -25 2 1.26 4.89 6.07 4.97 1.27 -25 -1 +3 -1 -25 3 1.02 6.14 7.57 6.09 1.05 -25 +3 +25 +3 -25 4 1.26 4.95 6.09 4.93 1.29 -25 -1 +3 -1 -25 5 -3.24 1.28 1.03 1.32 -3.24 -25 -25 -25 -25 -25 どうでしょう? 個人的には5路盤という小さな盤ですら真の値とはかけ離れた結果が出ているように 思えます。特に実際は全滅するはずのB1、C1などの位置がモンテカルロでは+1.27、+1.09 と+で出ている点です。4.9路盤と19路盤の結果
同じように9路盤と19路盤で実行した結果です。 9路盤の各位置の平均点数(それぞれに100万局の乱数対戦) A B C D E F G H J 1 -2.70 0.36 0.31 0.69 0.77 0.69 0.30 0.31 -2.69 2 0.31 2.22 3.31 3.57 3.61 3.58 3.28 2.24 0.28 3 0.34 3.32 4.06 4.01 4.03 4.10 4.01 3.30 0.30 4 0.69 3.55 4.11 4.05 4.09 4.08 4.08 3.66 0.68 5 0.79 3.62 4.11 4.08 4.01 4.07 4.12 3.65 0.79 6 0.75 3.51 4.12 4.06 4.09 4.07 4.03 3.55 0.73 7 0.30 3.31 4.03 4.10 4.02 4.04 3.93 3.30 0.30 8 0.34 2.21 3.29 3.50 3.63 3.64 3.21 2.16 0.35 9 -2.72 0.33 0.28 0.70 0.76 0.65 0.33 0.37 -2.70 計算時間 10時間46分(Opteron248) 19路盤の各位置の平均点数(それぞれに10万局の乱数対戦) A B C D E F G H J K L M N O P Q R S T 1 -1.93 0.15 -0.33 0.53 0.35 0.10 0.66 0.12 0.14 0.56 0.20 0.23 0.03 0.42 0.59 0.35 -0.11 0.15 -1.98 2 -0.15 1.24 2.18 2.34 2.03 2.04 2.22 2.19 2.34 2.28 2.52 1.83 2.08 1.91 2.04 2.23 1.73 1.27 0.02 3 0.12 1.84 2.74 2.45 2.34 1.96 2.82 2.60 2.47 2.40 2.51 2.46 2.40 2.29 2.52 2.23 2.38 1.94 0.12 4 0.32 2.02 1.82 2.35 2.14 2.38 2.40 2.55 2.25 2.26 2.13 2.01 2.44 2.40 2.55 2.33 2.46 2.37 0.47 5 0.07 1.98 2.19 2.22 2.06 2.16 2.25 2.44 2.47 2.03 2.48 2.42 1.98 2.22 2.27 2.38 2.25 2.03 0.29 6 0.47 1.96 2.43 2.52 2.16 2.35 2.20 2.40 2.38 2.03 2.33 2.51 2.56 2.68 1.97 2.20 2.32 1.82 0.30 7 0.39 2.32 2.66 2.62 2.26 2.45 2.73 2.42 2.16 2.55 2.53 2.50 2.59 2.57 1.91 2.66 2.48 2.44 0.61 8 0.27 1.87 2.46 2.41 2.54 2.40 2.17 2.16 2.36 2.67 2.08 2.54 2.23 3.00 1.74 2.39 2.67 2.46 0.37 9 0.31 2.00 2.37 2.46 2.35 2.41 2.22 2.44 1.96 2.67 2.08 2.23 2.10 2.09 2.12 2.56 2.57 2.07 0.30 10 0.17 2.24 2.49 2.54 2.43 2.75 2.35 2.43 2.32 2.58 2.61 2.26 2.50 2.64 2.24 2.52 2.24 2.50 -0.00 11 0.20 2.51 2.67 2.30 2.47 2.64 2.38 2.47 2.50 2.07 2.42 2.28 2.05 2.43 2.54 2.75 2.69 2.41 0.40 12 0.15 2.03 2.73 2.58 2.74 2.29 2.21 1.84 2.44 2.68 2.40 2.41 2.40 2.39 2.67 2.69 2.39 2.42 -0.01 13 0.04 2.18 2.48 2.40 2.30 2.31 2.58 2.43 2.12 2.64 2.22 2.69 2.75 2.27 2.34 2.46 1.95 2.16 0.36 14 0.59 2.10 2.47 2.35 2.63 2.52 2.33 2.44 2.45 2.42 2.55 2.00 2.33 2.16 2.57 2.66 2.49 2.14 0.21 15 0.38 1.78 2.27 1.98 2.17 2.29 2.22 2.26 2.12 2.27 2.25 2.41 2.33 2.35 2.31 2.56 2.88 1.99 0.13 16 0.40 2.49 2.59 2.57 2.16 2.40 2.53 2.50 2.37 2.38 2.17 2.38 2.43 2.54 2.27 2.19 2.85 2.10 0.16 17 0.27 2.02 2.57 2.53 2.66 2.58 2.33 2.73 2.84 2.23 2.50 2.49 2.56 2.50 2.48 2.67 2.75 2.41 -0.06 18 -0.04 1.45 2.11 2.31 1.90 2.20 2.27 2.25 2.47 2.26 2.20 2.19 2.54 2.00 2.15 2.17 1.91 1.30 0.14 19 -2.31 0.14 -0.22 -0.08 0.03 0.41 0.52 0.14 0.32 0.27 0.30 0.37 0.49 0.57 0.51 0.36 -0.05 0.14 -2.25 計算時間 61時間(Opteron248) 19路は時間がかかるのでかなり回数が少ないです。 9路盤ではほぼ結果は収束しているようなのですが、19路盤では10万局の平均では かなりばらばらな値になっていて安定してるとは言いがたい数値になってます。 19路盤ではモンテカルロ法はかなり使い物にならない感じです。19路は参考程度で。5.終局までの平均手数と平均目数、最大の手の目数
5路盤 | 9路盤 | 19路盤 | |
---|---|---|---|
平均手数 | 41.9手 | 110手 | 443手 |
平均目数 | +2.12目 | +2.26目 | +1.89目 |
最大の手の目数(当座の最善手) | +7.54目 | +4.12目 | +3.00目 |
回数 | 1000万回 | 100万回 | 10万回 |
モンテカルロ囲碁同士の対戦 | 彩(黒)とモンテカルロ囲碁(白)の対戦 |
---|---|
(;GM[1]SZ[9]
PB[Aya]
PW[Aya]
DT[2006-02-17]RE[W+14.5]KM[6.5]TM[]RU[Chinese]PC[]EV[]GN[]AP[Aya 5.62]
;B[gd];W[ge];B[fe];W[fd];B[ed];W[ff];B[fc];W[ee];B[de];W[fd]
;B[ef];W[fe];B[fg];W[dd];B[he]C[とにかくアタリを打ちたがります。];W[ec];B[gf];W[ed];B[cd];W[df]
;B[eb];W[eg];B[dc];W[ce];B[gc];W[cc];B[db];W[gg];B[hf];W[hd]
;B[hc];W[hg];B[bd];W[if];B[id];W[be];B[fh];W[eh];B[bc];W[cb]
;B[bb];W[fb];B[ca];W[gh];B[fi];W[ei];B[gb];W[ae]C[よくやくヨセを打ちました。];B[ig];W[ih]
;B[cf];W[cg];B[bf];W[bg];B[ad];W[af];B[ib];W[ie];B[ig];W[if]
;B[ie];W[ig]C[日本ルールならここで終局ですが、中国ルールなのでこの後も自陣に手を入れたり敵陣に打ち込んだりします。];B[gi];W[hi];B[ga];W[da];B[cb];W[ia];B[ha];W[ch]
;B[ci];W[ab];B[ba];W[gi];B[aa];W[fi];B[ea];W[di];B[fa];W[bi]
;B[ac];W[ai];B[bf];W[fh];B[ag];W[dh];B[ah];W[bh];B[ag];W[ah]
;B[];W[cf];B[];W[]C[まで94手にて白の盤面9目勝ちです(中国ルール)。])
|
(;GM[1]SZ[9]
PB[Aya]
PW[MonteCarlo]
DT[2006-02-17]
RE[B+5.5]
KM[6.5]TM[]RU[Chinese]PC[]EV[]GN[]AP[Aya 5.62]
;B[gc];W[df];B[dc];W[cg];B[cd];W[fg];B[gf];W[ff];B[gg];W[ge]
;B[fh];W[gh];B[hh];W[hf];B[hg];W[eh];B[fd];W[fi];B[he];W[hd]
;B[if];W[fe];B[gd];W[ed];B[bf];W[ec];B[db];W[hc];B[gb];W[eb]
;B[ea];W[hb];B[fb];W[da];B[ca];W[ee];B[fa];W[ie];B[id];W[ha]
;B[bh];W[bg];B[ag];W[ce];B[be];W[bd];B[ch];W[dd];B[cc];W[cf]
;B[af];W[ah];B[ai];W[bc];B[bb];W[fc];B[dh];W[eg];B[hi];W[ab]
;B[di];W[ba]C[好手!なんとコウを仕掛けてきました。];B[aa];W[ga]C[継ぐとコウを取り返されてまずいです。];B[ac];W[da];B[ea];W[ae];B[ah];W[ei]
;B[gi];W[dg];B[ic];W[bi];B[ad];W[ib];B[fa];W[ie];B[id];W[ih]
;B[fb];W[ic];B[ie];W[ig];B[ii];W[ig];B[ih];W[gc];B[da];W[fh]
;B[gb];W[gd];B[];W[bd];B[];W[]C[まで彩(黒)の11目勝ち。62手目のコウを仕掛けた手が好手でした。])
|
なかなかそれっぽい棋譜が出来ています。乱数恐るべし。 意外と、モンテカルロ法だけでも12級ぐらいのプログラムは作れるかもしれません。 計算時間はかかりますけど。(この1局で2時間半かかってます。Opteron248 2.2GHz) また、モンテカルロ法の特徴がよく出ているのは15手目にアタリを打っているところです。 この局面では図抜けてこの手が高い点数になってました。これは次に白がポン抜かれるを 防ぐ手が1手だけ、なのでアタリを打てば取れる!と思ってるのですね。 特徴としては、 ・アタリが好き。 ・死石をダメ1にしたがる(1手で取れるように)。 ・ヨセが打てない。 でしょうか。
えーと、将棋は実験してません。 しかし昔(1999年)試したデータがあるのでそれでお茶を濁してみます。 乱数で駒を動かした20万局のデータ 平均手数 630.8手(2000手以上は引き分け扱い) 最短手数 12手 先手勝率 0.50165 (互角) 勝率の高い初手 30手、ほぼ同じ。 乱数でもちゃんと王を詰ませるのが少し驚きです。 これだけだと面白いデータは出なかったので、61手以上の対局は全部引き分け、 として60手以内で決着が付いた将棋を調べてみると、 500万局を試したうちの5837局(全体の0.12%)が該当。 (先手勝ち=2901, 後手勝ち=2936,引き分け=4994163,全=5000000, 先手勝率=0.497002) 勝率の高い手の順に並べると、 1:48飛(28):110/179=0.614525 ▲48飛が最善手(サンプルが少ないので怪しいです) 2:58金(49): 97/169=0.573964 3:96歩(97):112/197=0.568528 4:76歩(77):184/331=0.555891 ▲76歩も勝率が高い。それ以上に、速く終わりやすい(局数が多い) 5:58飛(28):107/193=0.554404 6:26歩(27): 95/175=0.542857 7:68銀(79):104/194=0.536082 8:48金(49):104/195=0.533333 9:18飛(28): 99/186=0.532258 10:18香(19): 98/185=0.529730 11:78金(69): 99/190=0.521053 12:38銀(39):100/192=0.520833 13:78銀(79): 91/175=0.520000 14:68金(69): 89/173=0.514451 15:86歩(87): 93/183=0.508197 16:36歩(37): 96/190=0.505263 17:66歩(67): 83/167=0.497006 18:38金(49): 95/194=0.489691 19:16歩(17): 87/178=0.488764 20:98香(99): 94/195=0.482051 21:38飛(28): 83/173=0.479769 22:68飛(28): 85/178=0.477528 23:48銀(39): 90/194=0.463918 24:58金(69): 92/205=0.448780 25:46歩(47):100/226=0.442478 26:56歩(57): 92/209=0.440191 27:48王(59): 83/195=0.425641 28:78飛(28): 67/165=0.406061 29:58王(59): 89/224=0.397321 30:68王(59): 83/227=0.365639 王が前進する▲68玉とか▲58玉、▲48玉などは危険地帯に近づく?ため短手数で負けやすい。 サンプル数が少ないので適当な事しか言えないのですが、乱数対戦の場合に、初手に ▲76歩、を指した場合は短手数で終わりやすい。 ▲58玉、などと王が前進する手は短手数で負けやすい。 ぐらいは言えそうです。 (元データは1999年の5月ごろにCSAのMLで菊池さんと議論した時のものです) ・・・将棋でも40手ぐらい乱数で動かして最後の駒得で判定すれば結構まともな プログラムが動きそうな気もします。 またちょっと面白いのは上は61手以上は引き分け、としていますが、 62手以上を引き分けとすると先手勝率がちょっと上がることです(先手勝率が0.497から0.529に上昇)。 これは先手が1手だけ多く指せるので、先手が詰ませる確率が上がるためと思われます。 1000万局の結果(62手以上を引き分け) 先手勝ち=6599, 後手勝ち=5882,引き分け=9987519,全=10000000, 先手勝率=0.528724
リンクなど