【レポート】

アマチュア竜王・清水上氏 VS 将棋ソフト・激指

2 2CPUで約50万局面/秒を読む激指

    佐藤晃洋  [2006/03/30]

    コンピュータ将棋においては、基本的にゲーム理論の一つである「ミニマックス法」を用い、ある盤面の状態が自分にとって有利なのかどうかを判断する「評価関数」の値を、自らの手番のときは最大になるような、相手の手番のときは最小になるような手を指すという形で手順を検討していくのが一般的。そこで問題なのがこの評価関数の中身だ。評価関数の出す値が適切なものであればそのソフトは強いし、不適切であれば弱いということで、これをどうプログラミングしていくかが勝負の分かれ目となる。

    鶴岡氏はこの点について「まず基本は駒の損得」と語り、各駒にそれぞれ固有の点数を与えた上でその点数がなるべく大きくなるような手を選ぶ、という様子を解説した。ちなみに駒の種類によって点数は異なるが、その決め方は「駒の効きの数をベースにして経験的なもので調整した」という。ただこれだけでは、特に終盤戦において(昔のコンピュータ将棋によくあった)「重要な局面でどうでもいい駒の駒得を狙ってしまいその間に負けてしまう」という問題が発生するので、この点を改善するためにAI将棋の思考ルーチン「YSS」の作者である山下宏氏が考案した「玉に近い部分ほど評価点を高くする(特に局面が進めば進むほど高くなる)」という方法を採用するなどしているとのこと。

    ミニマックス法の基本を解説した図

    「激指」における各駒の価値を示した表

    コンピュータ将棋においては、思考効率を上げるために「何手先まで手を読むか」と同時に「読まないでもいい手をどう切り捨てるか」という点も重要なポイント。鶴岡氏は「激指」において採用している方法として、プロ棋士の対局記録などから得られた統計情報を元に、ある局面で指される確率が一定以下になると読みを打ち切るという方法を紹介した。この結果「平均で約10手先、深いところで約20手先までを読んでます」と鶴岡氏は語った上で、「私はアマ初段だが、だいたい10手以上先を読もうとすると頭がこんがらがってしまうので、この点でも既にコンピュータの方が上回っている」とコンピュータの強さの理由の一端を示した。

    このように玉の近くになるほど評価関数が高くなるような重み付けを行う

    実際に「激指」で読む手数の分布

    序盤の駒組みの段階では駒の損得が発生しないので、そのままでは前記の評価関数上は値が変化せず手の優劣が発生しなくなってしまう。これについては序盤でよく指される手のデータをインプットした「定跡データベース」を用い、今指している対局の局面の中に完全にデータベースと一致するものがあればその手を指すという手法をとっている。そのほか、仮に一致するものがない場合には極力似た局面を探す、一般的な囲い(矢倉囲い・美濃囲いなど)の形に似ていたらプラス評価するなどの方法でフォローを図っている、と鶴岡氏は解説した。一方終盤の詰め将棋の段階の強さはコンピュータ将棋に定評のあるところだが、「実際には20数手詰みを読むような機会は少ない」という。

    ちなみに現在の「激指」では「2CPUで約50万局面/秒ぐらい」の局面を読んでいるとのこと。もちろん並列化などによる高速化を図ってはいるものの、「(ミニマックス法で使用する)ツリーには順番の依存関係があるため並列化による効果は大きくない」ため、「4CPUでも1CPUの2倍ぐらいの局面しか処理できない」という。

    またプログラムの改良については「改良したつもりが実は弱くなっていたこともよくある」ということで、何かプログラムの思考ロジックに変更を施した際は必ず旧プログラムと自動対戦を行いチェックするそうだ。「1,000局対戦して520勝したら強くなったといえる」と鶴岡氏は語った。

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン