summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
afcee1e)
Currently we exit the loop when
abs(bestValue) >= VALUE_KNOWN_WIN
but there is no logical reason for this. It seems more
natural to re-search again with full open window.
This has practically no impact in most cases, we have a
'no functional change' running 'bench' command.
// Start with a small aspiration window and, in case of fail high/low,
// research with bigger window until not failing high/low anymore.
// Start with a small aspiration window and, in case of fail high/low,
// research with bigger window until not failing high/low anymore.
// Search starts from ss+1 to allow referencing (ss-1). This is
// needed by update gains and ss copy when splitting at Root.
bestValue = search<Root>(pos, ss+1, alpha, beta, depth * ONE_PLY);
// Search starts from ss+1 to allow referencing (ss-1). This is
// needed by update gains and ss copy when splitting at Root.
bestValue = search<Root>(pos, ss+1, alpha, beta, depth * ONE_PLY);
- assert(alpha >= -VALUE_INFINITE && beta <= VALUE_INFINITE);
+ // Search with full window in case we have a win/mate score
+ if (abs(bestValue) >= VALUE_KNOWN_WIN)
+ {
+ alpha = -VALUE_INFINITE;
+ beta = VALUE_INFINITE;
+ }
- } while (abs(bestValue) < VALUE_KNOWN_WIN);
+ assert(alpha >= -VALUE_INFINITE && beta <= VALUE_INFINITE);
+ }
}
// Skills: Do we need to pick now the best move ?
}
// Skills: Do we need to pick now the best move ?