2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

tweet

  • tweets

« インサイド・ボンクラーズ | トップページ | Amazon EC2からfloodgateなう »

バグ?

つれづれなるままにボナソースを読んでいますが、ちょっと気になる点があったのでメモ。

hash.cのhash_store()の以下の部分ですが、

1     if ( hand_hash != HAND_B
2          && keyt_hash != ( word2 & ~(uint64_t)0x2fU ) )
3       {
4         slot = (unsigned int)hash_word2 >> 31;
5         SignKey( hash_word2, hash_word1 );
6         ptrans_table[index].always[slot].word1 = hash_word1;
7         ptrans_table[index].always[slot].word2 = hash_word2;
8       }
9     SignKey( word2, word1 );
10    ptrans_table[index].prefer.word1 = word1;
11    ptrans_table[index].prefer.word2 = word2;

探索結果をpreferに書く(10,11)んだけど、今のpreferの内容はalwaysにコピーする。ただし、書こうとしている結果が今のpreferと同じ局面に対するもの(より深い探索結果)ならalwaysへのコピーはしない、ってことだろうと思うんですが、

もしそうなら、if条件(1,2)でhandのチェックは不要、というかやらない方がいいんじゃないでしょうか?keyが違えば盤面が別なので、handが同じかは意味ないと思うんですが。

盤面が同じでhandが違う、という場合は書くべきかどうか微妙な気はしますが、そうしたいならばif条件は&&ではなくて||ですよね。

見てるのはv4.1.2ですが、v4.1.3でも変わってないようです。

ということでたぶんバグなんじゃないかなぁ?という気がしてはいるのですが、なにしろあのボナンザなので、私が何か勘違いしてるのかも?という気もしないでもないです^^;

まあここを変えてもそうドラスティックに強さ変わるわけではないとは思いますが、「盤面異なるが持ち駒は同じ」局面群に対してはpreferしか使わないことになるので、そこそこ発生するような気はします。

それにしても、なんでボナンザってコメントないんでしょうか?w 深まる謎がぜんぜん解決しない…

« インサイド・ボンクラーズ | トップページ | Amazon EC2からfloodgateなう »

将棋プロセサ」カテゴリの記事

コメント

A級様、

間違えていました、&& ではなく || です。あと、
今読んでみると何故 ~0x2fU と論理積を取っているのかも謎です。

今までずっと気づかなかったということは、A 級さんの仰るように、そもそもやらない方が良いかもしれません><

発見してくださり有難うございます!

コメントありがとうございます。
疑問が解決して、こちらこそ助かりました。
0x2fはそう言われると謎ですが、まったく気づかなかったです^^;

あと今更ですが、ボナ使わせてもらってます。その面でもほんとお世話になっておりますです。

不明な点があればどんどん教えてください。
恐らくバグや不必要なコードがまだまだあると思います、教えて下さると助かります。

A級さんの、他人の実装を極力利用してオリジナルの成果を出そうという姿勢が好きです。ガンバって下さい!

そう言っていただけると大変心強く、また励みになります。独力での解決に窮したらお言葉に甘えて何かお聞きするかもしれません。今後ともよろしくお願い致しますm(__)m

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/507007/33363404

この記事へのトラックバック一覧です: バグ?:

« インサイド・ボンクラーズ | トップページ | Amazon EC2からfloodgateなう »