コンピューター将棋の構造 - 検索エンジン 「浅読みくん」

…という訳で「合法手生成モジュール」と「評価関数」を使って検索エンジン、その名も「浅読みくん」を構築してみたいと思います。「浅読みくん」はその名の示す通り3手先しか読めません。

唐突ですが、人間は「三手の読み」をどの様に行うのでしょう?将棋へたっぴの我としては…

①自分にとって都合の良さそうな手を考え、局面を進める
②相手が指しそうな手を考え、局面を進める
③自分にとって都合の良さそうな手を考え、局面を進める

…こうやって想像の中で3手進めて一番良さそうな結果の候補手を選びます。人間は極めて自然に「見込みのない手」をかなりの確率で最初から切り捨てて「実現しそうな手」を繋げて読みを入れていきます。これは5手読みだろうと10手読みであろうと変わりはありません。重要なポイントは人間は先へ、先へと読みを入れます。正確な読みはいかにして予想の道のりを外さないか…という事になります。

「浅読みくん」の「三手の読み」は以下の方法で行われます。(注・実際のプログラム実行順序は少々異なりますが概念・結果は同じなので悪しからず。)ちょいと文章で説明するとややこしいのですが、図面を見ながら追ってください。

① 開始局面から一手進めた全局面を生成
② 上から一つ選んで一手進めた全局面を生成…これで二手先の局面が出現します。
③ 上から一つ選んでまた一手進めた全局面を生成…これで三手先の局面が出現します。
④ ステップ③で生じた全局面より自分に一番都合の良い(勝っていると判断される)局面を選びます…自分の着手なのだから自分に一番有利な結果を選ぶのは当然。(不利な状況なら一番マシな局面を選びます)…局面の優位度に応じ点をつけ(「評価関数」の出番です)、最高点を一手前、すなわち「二手先の局面」に報告します。

⑤ 「二手先の局面」(相手が指した直後の局面)では「三手先の局面」(30~200)から戻ってくる評価点の中から相手にとっては最高・最良(自分にとっては最低・最悪)の点数を選び「二手先の局面」にその数字を報告します。

⑥ 「一手先の局面」(自分が指した直後の局面)では「二手先の局面」(30~200)から戻ってくる評価点の中から自分にとっては最高・最良(相手にとっては最低・最悪)の点数を選び…これが候補手の最終評価値になります。

⑦ 候補手中、一番最終評価値が高い手を選び「次の手」として推薦します。(同点の場合はランダムに選びます)

…といろいろ書きましたが重要なのは


① 検索エンジンは○○手先の局面を生成し、
② 評価関数は○○手先の局面を査定する時のみに使用。
③ 最後には○○手先の末端からトーナメント式に評価値の高い手が(相手の手番では評価値の低い手が)上に上り候補手の最終評価値になります。

もっと短くまとめるなら「○○手先の局面を生成し、一番評価値の高い局面へと繋がる候補手を選ぶ」…という事です。

チカレタ…ので更なる解説は(続)。

投稿者: 紫外線 投稿日時: 日, 07/12/2009 - 13:36 categories [ ]

返信

このフィールドの内容は非公開にされ、公表されることはありません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 使用できるHTMLタグ: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <hr>
  • 行と段落は自動的に折り返されます。

書式オプションに関するさらに詳しい情報...