コンピュータ囲碁におけるモンテカルロ法

コンピュータ囲碁の入門
コンピュータ囲碁GREAT―プログラムの作り方とネット対局の実際


オセロ、チェスや将棋、囲碁のようなゲームは終局状態は簡単に定義できる。「こういう形になればゲームセットである」と判定したり、その状態の先手の勝ち負けを判定するプログラムは簡単に書ける。


だけど、ゲームの途中でどちらが有利なのかを判断させるためには、適当な評価関数を用意しなければならない。これらのゲームに共通してそういう性質がある。


そのなかでもコンピュータ囲碁はそれらのプログラムのなかでも最も難しいとされている。うまい評価関数を作成すること自体が難しい。


将棋ならば駒を得しているかだとか、王のまわりは安全かだとか駒の働きはどうかだとかそういったパラメータを導入する。それらのパラメータは熟練したプレイヤ(人間)が経験的に知っているものであり、ゲーム終了の局面から何らかの方法で逆算したものではない。


序盤で王を囲っておかないと、終盤で相手に駒を渡したときに詰みやすいが、いまのコンピュータ将棋のアルゴリズムでは序盤の局面において終盤付近まで読む(探索する)ことは不可能なので、評価関数に手心を加えてやる必要が出てくるのだ。


Mathematical Go: Chilling Gets the Last Point

だけど囲碁では手心を加えようにもどう加えていいのかお手上げに近いものがある。どの石が終盤に生きてくるのかを定式化するのはとても難しいからである。一方、モンテカルロ法をコンピュータ囲碁に応用するという手法がある。


現在の局面からでたらめに打っていき、終局させてみる。終局状態は簡単に判定できるから、9路盤ならばいまどきのパソコンなら秒間に1000万局ぐらい終局までシミュレーションしてみることが出来る。(と思う)


そのうえで、たくさん自分勝ちの終局状態があるところに着手する。たったこれだけのアルゴリズムであるが、これが結構強いのである。いままでの囲碁プログラムは何だったのだ、という感じだ。「たくさん優勢になる変化があれば優勢」というのは、この手のゲーム共通の性質だ。


たった一つの受けの好手があってその変化によって敗勢になることもあるので、なかなか難しいものがあるとは思うが、こんな単純な手法でそれなりの成果があがるというのは大変興味深い。