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

Retire Null Driven IID

It does not seem to clearly improve things and
in any case is disabled by default, so retire for now.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2009-03-13 15:39:22 +01:00
parent c8773c720a
commit bfcfaf7101
2 changed files with 1 additions and 38 deletions

View file

@ -125,9 +125,6 @@ namespace {
const bool UseIIDAtPVNodes = true; const bool UseIIDAtPVNodes = true;
const bool UseIIDAtNonPVNodes = false; const bool UseIIDAtNonPVNodes = false;
// Use null move driven internal iterative deepening?
bool UseNullDrivenIID = false;
// Internal iterative deepening margin. At Non-PV moves, when // Internal iterative deepening margin. At Non-PV moves, when
// UseIIDAtNonPVNodes is true, we do an internal iterative deepening search // UseIIDAtNonPVNodes is true, we do an internal iterative deepening search
// when the static evaluation is at most IIDMargin below beta. // when the static evaluation is at most IIDMargin below beta.
@ -437,7 +434,6 @@ void think(const Position &pos, bool infinite, bool ponder, int side_to_move,
if (UseLogFile) if (UseLogFile)
LogFile.open(get_option_value_string("Search Log Filename").c_str(), std::ios::out | std::ios::app); LogFile.open(get_option_value_string("Search Log Filename").c_str(), std::ios::out | std::ios::app);
UseNullDrivenIID = get_option_value_bool("Null driven IID");
UseQSearchFutilityPruning = get_option_value_bool("Futility Pruning (Quiescence Search)"); UseQSearchFutilityPruning = get_option_value_bool("Futility Pruning (Quiescence Search)");
UseFutilityPruning = get_option_value_bool("Futility Pruning (Main Search)"); UseFutilityPruning = get_option_value_bool("Futility Pruning (Main Search)");
@ -1201,7 +1197,6 @@ namespace {
Value approximateEval = quick_evaluate(pos); Value approximateEval = quick_evaluate(pos);
bool mateThreat = false; bool mateThreat = false;
bool nullDrivenIID = false;
bool isCheck = pos.is_check(); bool isCheck = pos.is_check();
// Null move search // Null move search
@ -1226,19 +1221,6 @@ namespace {
Value nullValue = -search(pos, ss, -(beta-delta-1), depth-R*OnePly, ply+1, false, threadID); Value nullValue = -search(pos, ss, -(beta-delta-1), depth-R*OnePly, ply+1, false, threadID);
// Check for a null capture artifact, if the value without the null capture
// is above beta then mark the node as a suspicious failed low. We will verify
// later if we are really under threat.
if ( UseNullDrivenIID
&& nullValue < beta
&& depth > 6 * OnePly
&&!value_is_mate(nullValue)
&& ttMove == MOVE_NONE
&& ss[ply + 1].currentMove != MOVE_NONE
&& pos.move_is_capture(ss[ply + 1].currentMove)
&& pos.see(ss[ply + 1].currentMove) + nullValue >= beta)
nullDrivenIID = true;
pos.undo_null_move(); pos.undo_null_move();
if (value_is_mate(nullValue)) if (value_is_mate(nullValue))
@ -1262,10 +1244,8 @@ namespace {
// low score (which will cause the reduced move to fail high in the // low score (which will cause the reduced move to fail high in the
// parent node, which will trigger a re-search with full depth). // parent node, which will trigger a re-search with full depth).
if (nullValue == value_mated_in(ply + 2)) if (nullValue == value_mated_in(ply + 2))
{
mateThreat = true; mateThreat = true;
nullDrivenIID = false;
}
ss[ply].threatMove = ss[ply + 1].currentMove; ss[ply].threatMove = ss[ply + 1].currentMove;
if ( depth < ThreatDepth if ( depth < ThreatDepth
&& ss[ply - 1].reduction && ss[ply - 1].reduction
@ -1295,22 +1275,6 @@ namespace {
search(pos, ss, beta, Min(depth/2, depth-2*OnePly), ply, false, threadID); search(pos, ss, beta, Min(depth/2, depth-2*OnePly), ply, false, threadID);
ttMove = ss[ply].pv[ply]; ttMove = ss[ply].pv[ply];
} }
else if (nullDrivenIID)
{
// The null move failed low due to a suspicious capture. Perhaps we
// are facing a null capture artifact due to the side to move change
// and this position should fail high. So do a normal search with a
// reduced depth to get a good ttMove to use in the following full
// depth search.
Move tm = ss[ply].threatMove;
assert(tm != MOVE_NONE);
assert(ttMove == MOVE_NONE);
search(pos, ss, beta, depth/2, ply, false, threadID);
ttMove = ss[ply].pv[ply];
ss[ply].threatMove = tm;
}
// Initialize a MovePicker object for the current position, and prepare // Initialize a MovePicker object for the current position, and prepare
// to search all moves: // to search all moves:

View file

@ -120,7 +120,6 @@ namespace {
o.push_back(Option("Full Depth Moves (non-PV nodes)", 3, 1, 100)); o.push_back(Option("Full Depth Moves (non-PV nodes)", 3, 1, 100));
o.push_back(Option("Threat Depth", 5, 0, 100)); o.push_back(Option("Threat Depth", 5, 0, 100));
o.push_back(Option("Selective Plies", 7, 0, 10)); o.push_back(Option("Selective Plies", 7, 0, 10));
o.push_back(Option("Null driven IID", false));
o.push_back(Option("Futility Pruning (Main Search)", true)); o.push_back(Option("Futility Pruning (Main Search)", true));
o.push_back(Option("Futility Pruning (Quiescence Search)", true)); o.push_back(Option("Futility Pruning (Quiescence Search)", true));
o.push_back(Option("Futility Margin (Quiescence Search)", 50, 0, 1000)); o.push_back(Option("Futility Margin (Quiescence Search)", 50, 0, 1000));