王将の移動可能範囲の評価方法
現実逃避がてら、GA将!!!!!でやってる王将の移動可能範囲の評価について書いてみます。選手権とかで時々聞かれたりする事があるので、まぁ多少の需要はあるかな、とも思いますし。
んで、王将の8近傍のうち安全なマスの数を評価するってのは、割と以前からされていた様ですし、それを24近傍に拡張したものもどっかで見た覚えがあります。
一言で言っちゃうと、GA将!!!!!でやってるのはそれを任意の距離n*1まで拡張したものです。
まず、用語として「安全に移動可能なマス」の定義をします。これは、次の両方の条件を満たすマスの事です。
- 自分の駒が無い(空マスか、相手の駒がある)
- 相手の利きの数が0
次に、実際の処理方法。
- 現在の王将の位置を起点として、その8近傍の距離1の安全なマスにマークする
- 距離1の安全なマスを起点として、その8近傍の距離2の安全なマスにマークする。ただし、現在の王将の位置及びマーク済みのマスは無視する。
- 以下、距離nまで同じ処理(距離n-1の安全なマスの8近傍の安全なマスを距離nの安全なマスとしてマーク)を繰り返す。
これは、実例を見てもらった方が早いと思うので、盤面の一部を切り出した図を書きます。図中の駒は全て先手の駒で、数値があるマスはマークされたマスです(数値は距離を表します)。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 筋/段 |
---|---|---|---|---|---|---|---|
歩 | 歩 | 歩 | 歩 | 歩 | 歩 | 歩 | 七 |
5 | 4 | 金 | 2 | 銀 | 王 | 1 | 八 |
5 | 4 | 3 | 金 | 1 | 桂 | 香 | 九 |
この例だと、距離1・4・5が各2マスで距離2・3が1マスです。実際の評価値は、距離とマスの数に応じて適当に点数を付けます。(学習させると、距離が遠いマスほど評価値が低くなり、同じ距離なら2〜3個目のマスあたりが最も高評価になります。)
んで、こういう評価をすると何が嬉しいのか、実例をいくつか。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 筋/段 |
---|---|---|---|---|---|---|---|
歩 | 歩 | 歩 | 歩 | 歩 | 歩 | 歩 | 七 |
金 | 銀 | 王 | 1 | 八 | |||
金 | 1 | 桂 | 香 | 九 |
実例その1。自分の駒が壁になっているケースを「悪い」と評価可能です。この例だと、金が4八に寄ったせいで、距離2以降のマスがざっくり消えています(その分評価値が下がる)。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 筋/段 |
---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 歩 | 六 | |
歩 | 歩 | 歩 | 歩 | 歩 | 2 | 七 | |
v龍 | 金 | 2 | 銀 | 王 | 1 | 八 | |
3 | 金 | 1 | 桂 | 香 | 九 |
実例その2。今度は横から後手の龍が攻めてきたケース。ピンチですね。
しかし、端歩を付けば1七から逃げれるという事を認識出来て居ます(図では省略しましたが、五段より上も同様に処理します)。
こういう評価が出来るので、自玉が逃げ回るのが得意になったり、敵玉の逃げ道に利きをつけて塞ぐ、という事が可能になります(上の例で後手番の場合だと、1七を塞いで先手玉の逃げ場所を狭くする、という手も指せるかもしれません)。
ただ、この評価項目は結構重いんで、重い分に見合った価値があるのかは不明です。私は貧乏性なんで実装してそのまま有効にしていますが、場合によっては実装したら弱くなる、なんて事もあるかもしれません。
*1:現在のGA将!!!!!の設定では5