将棋プログラムは、人工知能を学ぶのにぴったりな題材です。コンピュータに将棋の指し手を考えさせるには、第2回で説明した昔ながらの記号処理的人工知能から最近の機械学習まで、幅広く使う必要があるためです。それよりも何よりも、将棋という題材は楽しく盛り上がります。

 前回までは、人工知能の定義や分類、向く仕事と向かない仕事、人工知能の歴史を見てきました。今回からはいよいよ人工知能のプログラミングとして、将棋プログラムをつくってみることにします。

 様々なゲームの中から将棋を選んだのは、将棋が日本人に親しまれているほか、本将棋からミニ将棋まで幅広い種類があり、適当な難度の将棋を選択できるからです。たとえばミニ将棋であれば、研修の中でプログラミングできる難度です。後日、ミニ将棋を使った研修の事例を紹介する予定にしています。

 将棋自体のルールはここでは紹介しませんが、将棋が他の盤上ゲームと比べてどのようなゲームであるか、少し見ていきましょう。

 将棋はチェスや囲碁、リバーシなどと同様、運に左右されず、有限回数で二人の内の一人が勝ち、他方は負ける「二人零和有限確定完全情報ゲーム (Two-players, Zero-sum, Logical Perfection Information Game)」です。将棋には千日手(*1)や持将棋(*2)があるため有限回数で勝負が付くかどうかを置いておけば、将棋も二人零和有限確定完全情報ゲームです。将棋の初期状態を図1に示します。

図1●将棋の初期状態
図1●将棋の初期状態
[画像のクリックで拡大表示]
*1「千日手(Potentially Endless Repetition of Moves)」とは、盤上の駒と持ち駒、手番が全く同じ局面が同じ手順で4回現れたときのことです。将棋では連続王手のときは王手を掛けていた側が反則負けになり、それ以外は引き分けになります。千日手を回避する方がいいのかどうかも戦略になります。
*2「持将棋 (Drawn Game of Shogi)」とは先手と後手の両方の玉将が入玉し詰みがない状態で、両者の合意の下に持将棋にするかを決定します。持将棋になれば、その時点の駒の合計点数で勝敗が決まります。コンピュータ将棋の実装では面倒なものの一つになっています。

 将棋が二人零和有限確定完全情報ゲームであるため、将棋の人工知能プログラムではフレーム問題が起きにくく、思考プログラムの実装やそのパラメータの学習に力を集中させることができます。もちろん将来は、「相手の対局方針やその精神状態を見極めて思考プログラムを入れ替える」など、人間に近い発想をする人工知能プログラムも出てくるかも知れません。

 さて、具体的な説明に入る前に、ここで確認です。今回は人工知能の題材として将棋を選びましたが、本来の選び方は逆です。将棋プログラムをつくる上で、人工知能の技術が最もヒットしているから使うだけです。目的は優れた将棋プログラムをつくることであり、人工知能はあくまでも手段です。間違わないでください。