one replyのなぞ
保木さんの論文を初めて読んでから、「one reply」というのが分からなくて、そのままずっと放置してました。
で、放置したことも忘れていたんですが、今回のことで思い出して、探索延長の部分のソースを見てみると、こんなコードが。
else if ( ptree->nsuc_check[ply] && ptree->move_last[ply] - ptree->move_last[ply-1] == 1 ) { ptree->onerp_extension_done++; extension = EXT_ONEREP;
move_lastは指し手を格納しているはず、指し手から指し手を引き算するとは…?
Javaの知識とカンだけで読んでいるので、こういうのが出てくるとお手上げです。
で、ひねり出したのがこんな解釈です。
・move_lastは最終の指し手を格納しているアドレスを指している
・上記の引き算はこんな意味
「自ノードの最終指し手格納アドレス−親ノードのそれ=1」
→「自ノードの最終指し手格納アドレスが、親ノードのそれから1つしか増えてない」
→「自ノードの指し手は1つしかない」
これがよく聞くポインタっていうやつなんでしょうか。
Cを勉強してから出直してきます。。
それにしても、読めば読むほどため息が出てきます。
探索の根幹部分のコードは、各種の枝刈りやextension/reductionにもかかわらず、驚くほど単純。
多重反復深化なんかも、いかめしい言葉に引きずられて難しく考えすぎてました。
いろいろ試みたあげく実装を断念していた*1のですが、実際はひどく簡単な内容で、「何だ、そんなことだったのか」という感じです。
この辺はすぐに役立ちますね。
興味のあるところは大体読み終わったし、宿題もまだ残っているので、そろそろ開発に戻ります。
*1:今でもコードに残骸が残っている