Bonanzaのやり方

Bonanzaの開発者である保木邦仁氏が、11月10日から12日に開催された第11回 ゲームプログラミングワークショップ2006で発表したときの資料です。数式は飾りだと思っても何とかなるのかもしれませんが、コンピュータ将棋・チェスの知識がないと全く意味がわかりません。実際に発表を行ったときは、口頭でいろいろ補足しながらもっとわかりやすく話したのではないかと思うのですが。

私が目を通して見て理解したようなしなかったようなことをメモしておきます。誤っている可能性が高いです。まず前提となる基礎知識として、Bonanzaは他のソフトと違って、人間なら読み飛ばすようなありえない着手まですべて読んでいます。(という私の認識なのですが、厳密には違うかも?)

  • このやり方では読むべき局面数がすぐに大きくなってしまうように思われるが、知られているテクニックを利用することで1手深く読むのに3倍から5倍程度に収められる。
  • 手の探索にはいろいろな手法を使っている。(全くわかりません)
  • このように多種の手法を調整するのは、手動による試行錯誤では効率が悪すぎる。
  • そこで、プロ棋士などの棋譜を多数用意して局面をどのように評価すべきかを機械的に学習させる。
  • 棋譜中の手が最善と仮定して、それにできるだけ適合するような評価関数を構成したい。(というのはちょっと違うか?)
  • 可能な手の評価値が最善手の評価値を上回ってしまう頻度が大きく、上回り方の程度が大きいほど、評価関数が劣っていることになるので、変数を調整して改善する。
  • ただし、変数ごとに重要度が異なるので、それぞれで重み付けを変えてやる。
  • 結果は、例えば駒の価値(交換値)は「歩:106、香:279、桂:304、銀:428、金:527、角:617、飛:700」など。(これに加えて、玉との位置関係などでまた点数が上下する。)
  • いろいろ見ていくと、結果がおかしい例も見受けられる。

そのほか、第11回 ゲームプログラミングワークショップ2006に関連する話題は詰将棋メモ: コンピュータ将棋2006からどうぞ。