詰め部分木を実装しました

5/5のコンピュータ将棋選手権まであと1週間ですねえ。
空き時間はすべて開発に投入しています。
去年は当日の朝までコードをいじってバグだらけになって酷い目に合いましたので(^^;
(とか言いながら今年も当日までいじりそうで危険)


というわけで、詰め部分木をやっと実装しました。
GPWの時に、マイムーブ西村さんが実装してて「いいなあ……」と思ってましたが、
作るのに半年かかりました(汗
どうも、類似ハッシュという言い方がよく判りませんでしたが(今も判りません)
要は、詰んだ手順を覚えておけばいいわけですよ。
http://www31.ocn.ne.jp/~kfend/inside_kfend/ptc.html
KFEndの詰めろ意識した探索なんかも参考にやってみたら、
意外にあっさり動いてくれて、しかも詰めろの回避だけじゃなくて、相手に詰めろもかけられるようになって、
秀樹感激!るいるい(古い)


進歩本の棚瀬さんのIS将棋解説での、
詰めろ局面を解けるようになりました(棚瀬さん天才!)


後手が▼39飛成△18王▼28金打の詰めろをかけています。
(先手にパスさせて詰め将棋を呼べばわかります)


水平線って言うか、なぜか静止探索が22角成りを上位に上げるんですよねえ……。
相手の守りを崩して、金と角交換で良いと思うんですかねえ?
戦線に飛車を呼び込むだけで損と思うけど
途中で詰め部分木が発動して16歩で詰めろ回避を考え始めて、
最終的に自陣が堅い29金を選択(゚Д゚ )ウマー

▼v歩v銀
 9 8 7 6 5 4 3 2 1
---------------------------+
v香v桂 ・ ・ ・ ・ ・v桂v玉|一
 ・ ・ ・v飛 ・ ・ ・v金v香|二
v歩v歩v歩 ・v歩 金 ・ ・v歩|三
 ・ ・ ・ ・ ・ 角 ・ ・ ・|四
 ・ ・ ・ 桂 ・ ・ ・ ・ ・|五
 ・ ・ 歩 ・ ・ 歩 歩 ・ ・|六
 歩 歩 ・ ・v馬 ・ 金 歩 歩|七
 ・ ・ 銀 ・ ・v歩 銀 王 ・|八
 香 桂 ・ ・v飛 ・ 金 ・ 香|九
---------------------------+
△ 歩四 銀

詰めろ:▼39飛成△18王▼28金打

gen:100 △53桂成(613)△22角成(467)△66歩打(429)△63歩打(388)△53桂(346)
# 1  0.1s   +467 △22角成▼同飛
# 2  0.1s   +467 △22角成▼同飛△53桂成
# 3  0.2s   +274 △22角成▼同飛△29金▼79飛成
# 4  0.9s    -64 △22角成▼同飛△29金▼79馬△53桂成
# 4  1.1s    +50 △16歩▼65飛△32金▼39飛成△同王
# 4  1.2s   +145 △29金▼39銀打△18王▼65飛△53角成
# 5  1.7s   +427 △29金▼39銀打△18王▼28歩打△53角成▼65飛
# 6  3.2s   +369 △29金▼39銀打△18王▼28歩打△53桂成▼29歩成△62圭
# 7 10.9s   +338 △29金▼65飛△31銀打▼33歩打△22銀成▼同王△53角成▼79飛成△77
桂

25.6s 互角(+338) △29金▼65飛△31銀打▼33歩打△22銀成▼同王△53角成▼79飛成△77
桂

 4(  21040)**
 5(  78941)*******
 6( 105426)*********
 7( 144343)************
 8( 153018)*************
 9( 207377)******************
10( 123649)***********
11( 138438)************
12(  44112)****
13(  37433)****
14(   5158)*
15(   2456)*
16(    233)*
17(     38)*

っていうか一週間前に詰め部分木作ってる自分って( ´Д`)


しかし、詰め部分木の利用ってのは素晴らしい方法ですね。
確認のコストが凄く低いので末端でも安心して確かめられます。
ただ、厳密には同じ手順で詰みまで到達しても、途中で王の応手が変化して、実は詰んでない
ってこともあると思うんです。
元々、厳密では無い代わりに速い、実践的必至探索と進歩本にもあるのでそれは仕方ないでしょうが……
考えてみると、動的に作り出すマクロ手筋みたいな気もしますね。
連続手のキラー手というか、キラー手筋?