最後に、MarcのMoveGeneratorの指手の優先制御について分析する。基本的にアービトレイション中にMVV/LVAに基いた move ordering が行われているわけだが、全生成手の優先順を見ると王手とポーンが成る手が例外扱いされており、全体的な優先付けは次の様になっている。
--
1) 王手
2) 成る手(あれば)
3) 駒を取る手(MVV/LVA順)
4) 駒を取らない手
--
この優先順をそのまま将棋で用いるのは不適切と思える。将棋では、王手が最善手になるのは寄せか詰がある、あるいは勝負が決するほどの駒得になる場合くらいだし、チェスのようにポーンが成ると勝負が決まってしまうような状況は少ない。従って、1) 2) は省くとして 3) 4) をこのままとするのもいささか問題がある。MarcのMoveGeneratorでは、「最も価値の高い敵駒」を「最も価値の低い自駒」で取る手の順になってはいるが、純粋な交換値(差分値)ではなく「敵駒の価値」が優先される[*1]。ソフト探索では、駒を取る手で優先度を決める場合、通常以下のことも付加し複雑になる。
--
a) 取れる敵駒が只か否か
- また取った時に成れるか否か

- その敵駒が、次に自駒を取れるか否か
b) 取りに行く自駒が取られそうな状態か否か
- 取られそうなら紐が付いているか否か
- 更に紐が付いているなら、敵のどの種類の駒に取られそうか
--
これらを加味してやや精密な交換値を求め、優先順を制御した方が効率は上がる(αβ枝刈が効いて探索量が減る)。しかしながらハード探索の場合、ここに挙げた判断や演算全部をそのまま実装しようとすると複雑になり過ぎて回路規模が大きくなる上にクリティカルパス、つまりは探索速度にまで影響が及びかねないのでバランスが問題となる。このあたりは実際に試して実験値を得ないと何とも言えないが、将棋に適した指手優先制御を考える必要があることを、今後の課題としてここに挙げておく。


更に、静止探索に入る前の「4) 駒を取らない手」についても、何の工夫もなく漠然と「盤上の駒が動く手」「持駒を盤上に打つ手」を生成し探索しても当然ながら効率は上がらない。チェスでは駒を打つ手がルール上存在しないので、ここでも将棋固有の優先付けの工夫が重要になってくる。付け加えて、全幅探索で良いのならまだ簡単だが、選択的探索を実現したいならば優先付けだけでなく生成条件付けも必要になり、回路規模の増加が避けられなくなる問題も出てくると予想できる。


将棋でのハード探索が有効であるか否かを決めるのは、このあたりの研究が非常に大きな鍵になると思われる。探索速度は上がっても、探索順の拙さによって探索効率が落ちれば、ハード探索の意味が薄れてしまうからだ。私個人の目標としては、2年以内を目処に一次試作を完了させる予定で、それまでにある程度解決しておきたい最優先事項である。実証で3年、実用まで5年といったところ[*2]


[*1] このあたりの詳細は、以前に挙げたMarcの論文中に記述されている。要は「移動先のループ」と「移動元のループ」があり、それまで生成してない手の中で最有力手を取り出すという手法で、外側の「移動先」が内側の「移動元」より優先され、純粋な交換値ではなく「取る駒の価値」が優先キーになる。これがアービタによってソートされることになるだけだが、生成速度を重視するならば、この手法は極めて有力と考えられる。

[*2] このような計画では、A岡さん(特に名を秘す)やY下さん(特に名を秘す)に先を越されるかも知れない。いや、もしかしてK木さん(特に名を秘す)が数年前から作ってたりして、しかも既に動いてたりして? 私はゆっくりですが追いかけますので、みなさんお先にどうぞ。