1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

Use past SE information also for success cases

If singular extension search was succesful in the past then
skip another the SE search and extend of one ply.

Another way to mitigate the cost of SE at the price of
some more spurious extension, but on 90% of cases info
is correct.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2010-07-31 08:14:06 +01:00
parent fe23c70cf1
commit cbcc581a86

View file

@ -979,7 +979,7 @@ namespace {
Move movesSearched[256]; Move movesSearched[256];
EvalInfo ei; EvalInfo ei;
StateInfo st; StateInfo st;
const TTEntry* tte; const TTEntry *tte, *ttx;
Key posKey; Key posKey;
Move ttMove, move, excludedMove, threatMove; Move ttMove, move, excludedMove, threatMove;
Depth ext, newDepth; Depth ext, newDepth;
@ -1190,17 +1190,6 @@ namespace {
&& is_lower_bound(tte->type()) && is_lower_bound(tte->type())
&& tte->depth() >= depth - 3 * OnePly; && tte->depth() >= depth - 3 * OnePly;
// Avoid to do an expensive singular extension search on nodes where
// such search had already failed in the past.
if ( !PvNode
&& singularExtensionNode
&& depth < SingularExtensionDepth[PvNode] + 5 * OnePly)
{
TTEntry* ttx = TT.retrieve(pos.get_exclusion_key());
if (ttx && is_lower_bound(ttx->type()))
singularExtensionNode = false;
}
// Step 10. Loop through moves // Step 10. Loop through moves
// Loop through all legal moves until no moves remain or a beta cutoff occurs // Loop through all legal moves until no moves remain or a beta cutoff occurs
while ( bestValue < beta while ( bestValue < beta
@ -1226,9 +1215,22 @@ namespace {
&& move == tte->move() && move == tte->move()
&& ext < OnePly) && ext < OnePly)
{ {
// Avoid to do an expensive singular extension search on nodes where
// such search have already been done in the past, so assume the last
// singular extension search result is still valid.
if ( !PvNode
&& depth < SingularExtensionDepth[PvNode] + 5 * OnePly
&& ((ttx = TT.retrieve(pos.get_exclusion_key())) != NULL))
{
if (is_upper_bound(ttx->type()))
ext = OnePly;
singularExtensionNode = false;
}
Value ttValue = value_from_tt(tte->value(), ply); Value ttValue = value_from_tt(tte->value(), ply);
if (abs(ttValue) < VALUE_KNOWN_WIN) if (singularExtensionNode && abs(ttValue) < VALUE_KNOWN_WIN)
{ {
Value b = ttValue - SingularExtensionMargin; Value b = ttValue - SingularExtensionMargin;
ss->excludedMove = move; ss->excludedMove = move;