思うだけで学ばない日記 2.0

思うだけで学ばない日記から移転しました☆!よろしくお願いします。

Keep it clean.

置換表の矛盾について、一昨日までは単純に後からやってくるlowerBoundかupperBoundが絶対に正しい!(なぜなら、後の方が探索の深さNが大きいから)、と単純に思っていたのだが、そうとは言い切れず(すわなち実は探索一発の中でも矛盾が生じ得り)、しかもぱっと見矛盾していなケースも実は信頼できない恐れがあることが昨日分かった。一昨日まで正しいと思っていたやり方では音を立てて崩れ去ってしまた。崩れ去ってしまたあるよ、、orz

だが矛盾が発生する仕組みが分かっ大麻、ちょっと考えれば対策は出てくる。すわなち、置換表が完全にはヒットしなかったが、部分的にはヒットしてalphaかbetaが変更された場合、その子ノード以下の探索の間、置換表を参照しなければ良いのだ*1。そうすれば、置換表による実質的探索延長をある程度まで享受しつつ、置換表を完璧に無矛盾に保てる。

思いついたことを人に先に言われてしまうと精神的にダメージを受けるので今日わそれを先に書いたものなり。

方式に名前をつけておきたいが、むかし初夏村NOW三郎という人が発明者自身が発明物に自分の名前をつけるのは恥ずかしいことだとある人を糾弾してたのを見た気がするので奥ゆかしい漏れは上の方法は『NB0AMGの方法』と名付けようとぞ思う

なお面倒くさいので実際に対戦して検証とか一切していな(マテ

■追記 (2011/10/27 12:50)

上で述べたやり方、すわなち置換表が完全にはヒットしなかったが、部分的にはヒットしてalphaかbetaが変更された場合、その子ノード以下の探索の間、置換表を参照しない、というのはちょっとやりすぎかもしれない。
実際には、探索延長にならなければ無問題なので、前記子ノードの探索中も、探索延長にならない置換は許容できる。すわなち、通常の置換では局面のrdepth(末端からの手数)が、置換表エントリのrdepth以下だったら置換候補とするが、前記子ノードの探索中は両者の一致を置換の必要条件とすれば良い(第二のNB0AMGの方法)。
全く手を打たない場合より多少効率は落ちるが、第一の方法よりはうんとマシだし、それでいて置換表を完璧に無矛盾に保てる。

*1:これは置換表を「参照」するな、というだけであって、置換表への登録は無条件に続けて良い。また、子ノードの列挙が終われば参照を再開できる