前回は、将棋プログラムの基盤として、駒の動きや盤面を管理する「将棋盤プログラム」のつくりかたについて、オブジェクト指向の観点から解説しました。(実際に将棋盤を完成させるには、まだまだつくる必要があるクラスがありますが…)

 今回からはいよいよ、将棋の指し手をコンピュータに考えさせる人工知能プログラムのつくりかたに入っていきます。

人間はどのようにして次の一手を指すのか-人工知能プログラムをつくる前に

人工知能プログラムをつくる有力なアプローチの一つに、「人間の思考を真似ること」があります。このため、実際に人工知能による将棋の思考プログラムをつくる前に、まず人間の思考方法について考えることは重要です。

 人間のプレイヤーはまず、現時点での将棋盤と持駒台の駒の配置を見て、次の指し手の候補を考えます。続いて、相手がどのような手を指すか、相手側になって考えます。さらに、その相手側の手に対して、自分がどのような手を指すかを考えます。ここまでで、既に3手先まで読んでいることになります。

 将棋の初級者が読めるのは3手先ぐらいですが、上級者は先読みが深くなっていき、プロでは10手以上先を読んでいます。一般的な将棋プログラムも、人間と同様に「先読み」を実行しています。

 それでは人間は、将棋盤と持駒台の駒の配置(これを局面、または盤面と呼びます)から、どのように最初の指し手を考えているのでしょうか。

 最初に着手可能な手(これは合法手と呼ばれています)を挙げて、その手を指したときの盤面を想定して、その時点での盤面の評価を行います。ちなみに、将棋の着手可能な指し手の最大値は593手と知られています。

 盤面を評価して、勝ちそうなのか負けそうなのか、有利なのか不利なのか、もっと微妙な判断では「指しやすい」か「指しにくい」か、などで判断します。これを先読みした盤面で行い、一番評価が良くなった盤面になる指し手を選びます。

人間による盤面評価

 人間の思考で肝心なのが、この「盤面評価」です。将棋であれば、駒の損得、手の広さ、玉の守り、攻めやすさなどで、総合的に評価しています。図1に人間の思考の概要を示します。人間は注目している場所と、注目していない場所を瞬時に切り分けていて、盤面情報を全て平等には見ていません。これは、今の人工知能では不得意とする部分です。

図1●将棋における人間の思考
図1●将棋における人間の思考
[画像のクリックで拡大表示]

 さらに人間は、盤面評価を経験によって非形式的に行っており、その評価の経過を説明しづらい場合が多くあります。指した本人でさえ、なぜこの手を選んだかを感想戦で他人に説明できないこともあります。特に「指しやすい」とか「指しにくい」とかの微妙な盤面評価は、本人の感覚的なものであることが多く、説明しにくいものです。

 この難しい盤面評価を、何とかコンピュータで評価してみせることが、人工知能の役目になります。その評価の精度を高めるため、人工知能の要素技術の一つである機械学習を採用する場合もあります。

人間の偉大な成果-手筋と詰将棋

 将棋には「手筋」と呼ばれる、駒を有効に使える一連の指し手があります。特に序盤の手筋(これを定跡と呼びます)は、長い年月を経て多くの将棋棋士によって発見、または創造されました。また中盤以降の部分的な盤面に対する手筋も多くあります。

 人間はこれらの手筋を模倣し、将棋を指すことで上達します。とすれば、人工知能の思考プログラムも、この手筋を取り入れることで強くなるでしょう。このように人工知能は人間の手柄を「横取り」することで、強くすることができます。

 序盤・中盤では手筋が重要になる一方で、終盤では「玉将が詰むか詰まざるか」、または「必至(受けの手では詰みを回避できない状態)を掛けられるか」が重要になります。

 終盤では玉将を中心に読むことになるため、手が狭くなり、深読みができるようになります。コンピュータの思考プログラムでも、終盤になるとコンピュータの計算能力をフル活用することで、人間よりもさらに深く、速く読むことができます。詰将棋はコンピュータの得意技といえます。

 このため、終盤になるとコンピュータは人間よりも圧倒的に強くなります。ちなみに前回、盤面を管理する「将棋盤プログラム」における高速な実装のつくりかたを紹介したのは、先読みを深くするためには、将棋盤プログラム自体の高速化が不可欠になるためです。

 こうした「手筋」や「詰将棋」を実現するアルゴリズムは将棋プログラムには欠かせないものですが、人工知能の技術とはやや離れますので、これ以上は触れません。次に、人工知能による思考プログラムの肝となる「盤面評価」のつくりかたをみていきましょう。