「ボナンザ VS 勝負脳」を読んでみた。

将棋、人工知能の両方に興味のある人はもちろんのこと、将棋には興味があるが人工知能には興味のない人や、その逆の人が読んでも楽しめる本であると思う。


本書では、将棋ソフト「ボナンザ」の内部的な設計などについて述べられている。
ボナンザは独自の「評価関数」を持ち、全幅探索を行った上で最も評価値の高い手を打つとの事であるが、
「評価関数」などと言う単語はあまり聞きなれないものだと思うので、その辺りについて、かなり簡単にではあるがまとめてみる。

評価関数について

将棋の盤面を評価する評価関数Eが3つの変数X,Y,Zによって決定されるとすると、例えばEは以下のように書くことが出来る。 \alpha,\beta,\gammaはそれぞれX,Y,Zの重み(各変数をどれぐらい重視するか)である。

 E(X,Y,Z) = \alpha X + \beta Y + \gamma Z

ここで、X,Y,Zがそれぞれ以下を表す変数であるとし、具体的に考える。

  • Xは「王」に隣接する味方の駒数
  • Yは味方の全駒数
  • Zは相手の全駒数

X,Y,Zが上の様な定義の場合、例えば \alphaの値が大きければ、「王」に隣接する味方の駒数を重視する、すなわち「王」の周りを味方の駒が取り囲むような戦略をとるようになる。また \betaの値が大きければ、味方の駒をなるべく減らさないような防御的戦略になり、 \gammaが大きければその逆で攻撃的戦略をとる。
この例では変数が3つしかないが、実際はさらに多くの変数によって評価関数を構成することで、より柔軟な戦略を表現する。
評価関数においては、 \alpha,\beta,\gammaなどの重みの値を適切に設定することが重要である。しかし人手でこれらを設定することは難しい(変数の数が増えれば増える程、難しくなる)。
そこで、 \alpha,\beta,\gammaの最適な値の探索に機械学習を用いる、と言った具合である。

AI(人工知能)を作る

この本を読んで、将棋のAI作りに興味を持つ方も多いのではないだろうか。
ただ、本書でも述べられているように将棋はルールが複雑なため、いきなりAIを作るといってもなかなか難しい。


個人的には、こういったゲームのAI作りに取り掛かる際は、まずオセロ(リバーシ)に挑戦してみるといいのではないかと思う。
オセロは将棋に比べてルールが単純な上に、打ち手が石を置く回数が60回(白、黒30ずつ)と限られているため、将棋と比べるとAIを作るのは楽である。

また、本書の3章で紹介されている「ミニマックス法」、「alpha-beta法」などは、オセロAIにおいても同様に用いる事が可能である。こういったことからも、オセロAIを作ってみる事は、将棋AIを作る上で色々と勉強になる。


自分自身、一年ほど前にオセロAI作りに挑戦した事があるが、なかなか面白く、いい経験になった覚えがある。

Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS)

Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS)