1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-29 16:23:09 +00:00

Don't update bestValue when pruning

Simply return a fail-low score

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2011-12-08 19:12:17 +01:00
parent 14df99130f
commit 3f14ed6602
2 changed files with 13 additions and 8 deletions

View file

@ -948,6 +948,9 @@ split_point_start: // At split points actual search starts from here
{ {
lock_grab(&(sp->lock)); lock_grab(&(sp->lock));
bestValue = sp->bestValue; bestValue = sp->bestValue;
moveCount = sp->moveCount;
assert(bestValue > -VALUE_INFINITE && moveCount > 0);
} }
// Step 11. Loop through moves // Step 11. Loop through moves
@ -1065,13 +1068,7 @@ split_point_start: // At split points actual search starts from here
if (futilityValue < beta) if (futilityValue < beta)
{ {
if (SpNode) if (SpNode)
{
lock_grab(&(sp->lock)); lock_grab(&(sp->lock));
if (futilityValue > sp->bestValue)
sp->bestValue = bestValue = futilityValue;
}
else if (futilityValue > bestValue)
bestValue = futilityValue;
continue; continue;
} }
@ -1220,9 +1217,17 @@ split_point_start: // At split points actual search starts from here
// case of StopRequest or thread.cutoff_occurred() are set, but this is // case of StopRequest or thread.cutoff_occurred() are set, but this is
// harmless because return value is discarded anyhow in the parent nodes. // harmless because return value is discarded anyhow in the parent nodes.
// If we are in a singular extension search then return a fail low score. // If we are in a singular extension search then return a fail low score.
if (!SpNode && !moveCount) if (!moveCount)
return excludedMove ? oldAlpha : inCheck ? value_mated_in(ss->ply) : VALUE_DRAW; return excludedMove ? oldAlpha : inCheck ? value_mated_in(ss->ply) : VALUE_DRAW;
// We have pruned all the moves, so return a fail-low score
if (bestValue == -VALUE_INFINITE)
{
assert(!playedMoveCount);
bestValue = alpha;
}
// Step 21. Update tables // Step 21. Update tables
// If the search is not aborted, update the transposition table, // If the search is not aborted, update the transposition table,
// history counters, and killer moves. // history counters, and killer moves.

View file

@ -263,7 +263,7 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta,
Value bestValue, Depth depth, Move threatMove, Value bestValue, Depth depth, Move threatMove,
int moveCount, MovePicker* mp, int nodeType) { int moveCount, MovePicker* mp, int nodeType) {
assert(pos.pos_is_ok()); assert(pos.pos_is_ok());
assert(bestValue >= -VALUE_INFINITE); assert(bestValue > -VALUE_INFINITE);
assert(bestValue <= alpha); assert(bestValue <= alpha);
assert(alpha < beta); assert(alpha < beta);
assert(beta <= VALUE_INFINITE); assert(beta <= VALUE_INFINITE);