« プログラミング講座(116) 局面数 | トップページ | プログラミング講座(118) グラデーション »

2013/03/09

プログラミング講座(117) 評価関数の可能性

統計の勉強をして、8175局のほぼでたらめな9路盤対局シミュレーションの結果から、初手と勝率の関係について考察してきました。9路盤の初手天元並びは有意水準95%で勝率が高いという結論になりました。この結果が正しいのかどうか、もう一度8100局程度のシミュレーションをして同様の結果になるか調べてみようと思い、囲碁シミュレータ PTB804-2 を走らせ始めました。

このシミュレータででたらめな対局を眺めるのも悪くありません。なんでそんなところに打つのかとハラハラしたりできます。しばらくは、(自分の1目の眼に打たないという以外は)でたらめに打つルールをもう少し改善して、もうちょっとまともなシミュレーションにしたいとあれこれ考えていました。

囲碁では将棋のような局面を評価する関数が作れないことから、シミュレーション結果を利用するモンテカルロ木探索という手法が使われているのですが、シミュレーション対局を見ながら、ある局面のスコアを計算できないかということに思いが至りました。終局後は日本ルールの場合は地とアゲハマを数えればスコアが算出できます。終局の局面ではこれと同じ値になるスコアを対局中に計算できないものかと考えました。

アゲハマは対局中も数えられますが、問題は地です。地は確定するまで数えられません。しかし、地の候補地を数えることで、終局ではそれが地になることに気づきました。地の候補地を「その石の活路(呼吸点)とその石の活路で囲まれた空点」と定義することによって、これが可能になります。

地の候補地を簡単に数えられれば、評価関数として使える可能性があり、評価関数があればプレイアウトに頼らずにゲーム木の探索手法が使える可能性があります。

この考えをもう少し整理してプログラミングに反映したいと思います。(Java や) JavaScript で利用したグラフ理論によるモデルを使ったほうが簡単に計算できそうなら、プログラミング言語を JavaScript に変更しようと思います。グラフ理論の計算はバイナリ(0か1の)のベクトルや行列を扱うのですが、Small Basic では"001011000" などの文字列として扱うしかなく、とても遅くなりそうな気がするからです。

|

« プログラミング講座(116) 局面数 | トップページ | プログラミング講座(118) グラデーション »

囲碁」カテゴリの記事

Small Basic」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: プログラミング講座(117) 評価関数の可能性:

« プログラミング講座(116) 局面数 | トップページ | プログラミング講座(118) グラデーション »