Evert wrote:Clemens Pruell wrote:
Sadly, my new engine is only slightly better, it will analyze 8 plies in the same time.
However, it uses a whole bunch of improvements which my old
engine didn't use:
Iterative Deepening (the old engine searched 7 plies immediately),
Hashmoves, (simplified) SEE, Killer/Counter/History/Blunder Moves for better move ordering,
No null-move?
Also, out of curiosity, what are "blunder moves"? Simply keeping track of moves that historically fail low and sort them lower down in the move list, or something more clever?
Yes, and that's exactly where my bug was, I accidently sorted them
in reverse order [moves with low history/blunder ratio first ...]
Now that the moves are ordered as intended everything seems to work
fine and node count is ok for most positions.
Very big thanks for all your help here.+
Next I'll see whether Null Move could possibly help me with doing 9-plys.
Btw. I sometimes get Instable Search results with my Aspiration Window!
Sometimes when a position must be searched twice (because the bounds of the AW
were wrong) the returned bound will first tell me, that the
result of the search is lower than alpha.
So then I adjust the A/B Window to e.g. -INFINITY/oldAlpha+1.
After doing the second search 99% of the time the value is indeed in the
range of -INFINITY/oldAlpha+1 - as expected!
But very rarely the result of the second search will be oldAlpha+1 (!).
Is this a proof that there must be some more bugs with my Search Function ?
Could the fail-soft AlphaBeta version I use be the reason for this issue, or does/can this
happen with fail-hard AB too? Which parts of the
search / evaluation functions could be responsible for instable search results
(I've not yet looked at PVS or other algorithms of manipulating the
search window because they seem to be even more risky/subject to
instable search results than e.g. AW.)
I'm having trouble figuring out which parts of my search / evaluation
function could possibly be the reason for the instable search results
and whether or how I can reduce the chance of getting a (seemingly...)
impossible fail-high right after a fail-low like the example?