開発メモ : 角交換に特化した高速化

↓妄想ここから↓


発生する頻度の高い局面に特化した最適化というのが可能だ。


例えば、持ち駒のうち、角を持っていることが多いなら、角と他の持ち駒の組み合わせだけ高速に生成できるように何らかの形で展開したりテーブル化しておくだとか。持ち駒の7種類に対してすべての組み合わせ(2**7 = 128通り)を展開すると膨大なコード量になるので、すべての組み合わせを展開するのは現実的ではないが、特定の持ち駒の組み合わせに対して高速化するというぐらいなら可能だ。


例えば、角交換した戦型向けに最適化してはどうか。角を持っていることが前提なら、128通りではなくその半分の64通りで済む。もう開始3手目でこちらから角を換える。無条件な1手損角換りである。しかし角を手駒にしたことによって、相手のソフトは、駒打ちの指し手生成にとても時間がかかり、その分だけ探索が浅くなる。こちらは角を持ち合っている形の指し手生成に特化しているので、それほど速度低下にはならない。局面も角換わりに特化して、居飛車の角換りの棋譜からのみ学習させる。戦型を限定することで、かなり正確な局面評価が出来るはずだ。


しかも角換わりの定跡を抜けたところでも事前に長時間思考させて最善応手列を求めておく。角換り将棋のエキスパートの誕生である。


↑妄想ここまで↑


というようなことは…私はやりませんが、深夜に意識が朦朧としてくるとそんなとんでもない(やっても効果があるかどうかが怪しい)プログラムのことが脳裏をよぎります。


そう言えば、その昔、金沢将棋(?)が筋違い角(角交換〜45角打)を得意としていて、羽生さんが「あの戦法は狭いところ(変化がそんなに広くない局面)をやっていくので、(事前に定跡として入力したり、コンピュータでも先まで読みやすいので)コンピュータ将棋向きでは」とか言われていたことを思い出しました。