mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Revert previous patches due to bug
We have a bug (possibly because of returning draw from root move list), it is possible to see when looking at games with a GUI, we can see rarely but consistently the score return as #0 for many depths until it comes back to normal values. Revert patches until it is not fixed. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
4ad6a3496b
commit
a1f9bf19d9
1 changed files with 19 additions and 30 deletions
|
@ -726,7 +726,7 @@ namespace {
|
||||||
if (PvNode && thread.maxPly < ss->ply)
|
if (PvNode && thread.maxPly < ss->ply)
|
||||||
thread.maxPly = ss->ply;
|
thread.maxPly = ss->ply;
|
||||||
|
|
||||||
// Step 1. Initialize node.
|
// Step 1. Initialize node and poll. Polling can abort search
|
||||||
if (!SpNode)
|
if (!SpNode)
|
||||||
{
|
{
|
||||||
ss->currentMove = ss->bestMove = threatMove = (ss+1)->excludedMove = MOVE_NONE;
|
ss->currentMove = ss->bestMove = threatMove = (ss+1)->excludedMove = MOVE_NONE;
|
||||||
|
@ -742,6 +742,18 @@ namespace {
|
||||||
goto split_point_start;
|
goto split_point_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pos.thread() == 0 && ++NodesSincePoll > NodesBetweenPolls)
|
||||||
|
{
|
||||||
|
NodesSincePoll = 0;
|
||||||
|
poll(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 2. Check for aborted search and immediate draw
|
||||||
|
if (( StopRequest
|
||||||
|
|| pos.is_draw<false>()
|
||||||
|
|| ss->ply > PLY_MAX) && !RootNode)
|
||||||
|
return VALUE_DRAW;
|
||||||
|
|
||||||
// Step 3. Mate distance pruning
|
// Step 3. Mate distance pruning
|
||||||
if (!RootNode)
|
if (!RootNode)
|
||||||
{
|
{
|
||||||
|
@ -902,12 +914,7 @@ namespace {
|
||||||
if (pos.pl_move_is_legal(move, ci.pinned))
|
if (pos.pl_move_is_legal(move, ci.pinned))
|
||||||
{
|
{
|
||||||
pos.do_move(move, st, ci, pos.move_gives_check(move, ci));
|
pos.do_move(move, st, ci, pos.move_gives_check(move, ci));
|
||||||
|
value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, rdepth);
|
||||||
if (pos.is_draw<false>() || ss->ply + 1 > PLY_MAX)
|
|
||||||
value = VALUE_DRAW;
|
|
||||||
else
|
|
||||||
value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, rdepth);
|
|
||||||
|
|
||||||
pos.undo_move(move);
|
pos.undo_move(move);
|
||||||
if (value >= rbeta)
|
if (value >= rbeta)
|
||||||
return value;
|
return value;
|
||||||
|
@ -1097,22 +1104,6 @@ split_point_start: // At split points actual search starts from here
|
||||||
// Step 14. Make the move
|
// Step 14. Make the move
|
||||||
pos.do_move(move, st, ci, givesCheck);
|
pos.do_move(move, st, ci, givesCheck);
|
||||||
|
|
||||||
// Step XX. Poll. Check if search should be aborted.
|
|
||||||
if (pos.thread() == 0 && ++NodesSincePoll > NodesBetweenPolls)
|
|
||||||
{
|
|
||||||
NodesSincePoll = 0;
|
|
||||||
poll(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step XX. Check for aborted search and immediate draw
|
|
||||||
if ( StopRequest
|
|
||||||
|| pos.is_draw<false>()
|
|
||||||
|| ss->ply + 1 > PLY_MAX)
|
|
||||||
{
|
|
||||||
value = VALUE_DRAW;
|
|
||||||
goto undo;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step extra. pv search (only in PV nodes)
|
// Step extra. pv search (only in PV nodes)
|
||||||
// The first move in list is the expected PV
|
// The first move in list is the expected PV
|
||||||
if (isPvMove)
|
if (isPvMove)
|
||||||
|
@ -1159,7 +1150,6 @@ split_point_start: // At split points actual search starts from here
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 17. Undo move
|
// Step 17. Undo move
|
||||||
undo:
|
|
||||||
pos.undo_move(move);
|
pos.undo_move(move);
|
||||||
|
|
||||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||||
|
@ -1322,6 +1312,10 @@ undo:
|
||||||
ss->bestMove = ss->currentMove = MOVE_NONE;
|
ss->bestMove = ss->currentMove = MOVE_NONE;
|
||||||
ss->ply = (ss-1)->ply + 1;
|
ss->ply = (ss-1)->ply + 1;
|
||||||
|
|
||||||
|
// Check for an instant draw or maximum ply reached
|
||||||
|
if (pos.is_draw<true>() || ss->ply > PLY_MAX)
|
||||||
|
return VALUE_DRAW;
|
||||||
|
|
||||||
// Decide whether or not to include checks, this fixes also the type of
|
// Decide whether or not to include checks, this fixes also the type of
|
||||||
// TT entry depth that we are going to use. Note that in qsearch we use
|
// TT entry depth that we are going to use. Note that in qsearch we use
|
||||||
// only two types of depth in TT: DEPTH_QS_CHECKS or DEPTH_QS_NO_CHECKS.
|
// only two types of depth in TT: DEPTH_QS_CHECKS or DEPTH_QS_NO_CHECKS.
|
||||||
|
@ -1456,12 +1450,7 @@ undo:
|
||||||
|
|
||||||
// Make and search the move
|
// Make and search the move
|
||||||
pos.do_move(move, st, ci, givesCheck);
|
pos.do_move(move, st, ci, givesCheck);
|
||||||
|
value = -qsearch<NT>(pos, ss+1, -beta, -alpha, depth-ONE_PLY);
|
||||||
if (pos.is_draw<true>() || ss->ply+1 > PLY_MAX)
|
|
||||||
value = VALUE_DRAW;
|
|
||||||
else
|
|
||||||
value = -qsearch<NT>(pos, ss+1, -beta, -alpha, depth-ONE_PLY);
|
|
||||||
|
|
||||||
pos.undo_move(move);
|
pos.undo_move(move);
|
||||||
|
|
||||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||||
|
|
Loading…
Add table
Reference in a new issue