それなりに開発を続ける
将棋の方は、桂馬も打てるようになり、それなりにルールは満たしてきた。
あとは打ち歩詰めが実装できてないぐらいかな。
現実には、王手がかかっていたら、優先して逃げる手を探索する必要があるようで、
ほっておくと、逃げずに相手に王手をかけようとする。
駒得だけでは、目的がわからないようで。
あと、王手がかかっている場合、王への利きをさえぎっている味方の駒の動きを制限する
「ピン」と呼ばれる概念を導入しないといけないみたい。
まずは、利きのリストを作る処理を作った。
ちゃんとさせるようになったら、評価関数を工夫して、
その後は、なるべく差分で計算できるようにして、一から評価関数を計算しないようにして、高速化をはたさないといけない。
探索も、反復深化をやるなら、ハッシュもいるし。序盤に定跡も入れないとならない。
終盤の完全読み、必至読みルーチンもいるだろう。
こんだけやって、やっと普通で、ここから勝負なんだよなあ‥‥。
来年の春までにできるんのかな。
がんばんないといけないのは、探索の果ての評価ではなくて、
まず戦略を考えて、探索する方向。
たとえば、穴熊だから桂馬を使うとか、王手飛車を狙うためにおとりを仕掛けて、
飛車を誘導するとか。
みんな頑張って手筋DBとして実装してるようだけど、理論的に体系化されてないみたい。
考えてみたら、オセロじゃそんなの皆無だし。
王を詰めるための完全読みルーチンを使って、飛車や角を狙う処理をやってみるって路線はあるかなって思ってる。
特定の駒を狙う読みという形で一般化して、敵の重要な駒を狙う。
あとは、敵の弱点を探して、弱点をとがめる手を読むとか。
「コンピュータ将棋の進歩4」の二章に「手筋パターン」としてさらりと書かれてるけど、KFEndで、局所パターンで比較して手筋として有望なら、評価が下がる方向でも、探索対象として残すって戦略が入ってるらしい。
http://www31.ocn.ne.jp/~kfend/
オセロは互いに独立な局所パターンで成功してるけど、将棋は独立してないので難しいよなあと思う。
http://www31.ocn.ne.jp/~kfend/inside_kfend/bad_shape.html
ここの悪形チェックはよく読んで、評価関数作るのに参考にしようと思う。