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:
parent
14df99130f
commit
3f14ed6602
2 changed files with 13 additions and 8 deletions
|
@ -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.
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue