summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
f010b6d)
Restructure RazorMargins and FutilityMargins arrays so that their
values can be more easily tuned.
Add RazorApprMargins array which replaces razorAtDepthOne concept,
because setting RazorApprMargin very high value at ply one is
same as not razoring there at all.
Comment out setting razoring and futility margins through uci to
avoid errors while tuning.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
// Margins for futility pruning in the quiescence search, and at frontier
// and near frontier nodes
// Margins for futility pruning in the quiescence search, and at frontier
// and near frontier nodes
- Value FutilityMarginQS;
- Value FutilityMargins[6] = { Value(0x100), Value(0x200), Value(0x250),
- Value(0x2A0), Value(0x340), Value(0x3A0) };
+ const Value FutilityMarginQS = Value(0x80);
+
+ //remaining depth: 1 ply 1.5 ply 2 ply 2.5 ply 3 ply 3.5 ply
+ const Value FutilityMargins[12] = { Value(0x100), Value(0x120), Value(0x200), Value(0x220), Value(0x250), Value(0x270),
+ // 4 ply 4.5 ply 5 ply 5.5 ply 6 ply 6.5 ply
+ Value(0x2A0), Value(0x2C0), Value(0x340), Value(0x360), Value(0x3A0), Value(0x3C0)};
- const bool RazorAtDepthOne = false;
- Depth RazorDepth;
- Value RazorMargin;
+ const Depth RazorDepth = 4*OnePly;
+
+ //remaining depth: 1 ply 1.5 ply 2 ply 2.5 ply 3 ply 3.5 ply
+ const Value RazorMargins[6] = { Value(0x180), Value(0x300), Value(0x300), Value(0x3C0), Value(0x3C0), Value(0x3C0) };
+
+ //remaining depth: 1 ply 1.5 ply 2 ply 2.5 ply 3 ply 3.5 ply
+ const Value RazorApprMargins[6] = { Value(0x100000), Value(0x300), Value(0x300), Value(0x300), Value(0x300), Value(0x300) };
// Last seconds noise filtering (LSN)
bool UseLSNFiltering;
// Last seconds noise filtering (LSN)
bool UseLSNFiltering;
UseQSearchFutilityPruning = get_option_value_bool("Futility Pruning (Quiescence Search)");
UseFutilityPruning = get_option_value_bool("Futility Pruning (Main Search)");
UseQSearchFutilityPruning = get_option_value_bool("Futility Pruning (Quiescence Search)");
UseFutilityPruning = get_option_value_bool("Futility Pruning (Main Search)");
- FutilityMarginQS = value_from_centipawns(get_option_value_int("Futility Margin (Quiescence Search)"));
- int fmScale = get_option_value_int("Futility Margin Scale Factor (Main Search)");
- for (int i = 0; i < 6; i++)
- FutilityMargins[i] = (FutilityMargins[i] * fmScale) / 100;
+ //FutilityMarginQS = value_from_centipawns(get_option_value_int("Futility Margin (Quiescence Search)"));
+ //int fmScale = get_option_value_int("Futility Margin Scale Factor (Main Search)");
+ //for (int i = 0; i < 6; i++)
+ // FutilityMargins[i] = (FutilityMargins[i] * fmScale) / 100;
- RazorDepth = (get_option_value_int("Maximum Razoring Depth") + 1) * OnePly;
- RazorMargin = value_from_centipawns(get_option_value_int("Razoring Margin"));
+ //RazorDepth = (get_option_value_int("Maximum Razoring Depth") + 1) * OnePly;
+ //RazorMargin = value_from_centipawns(get_option_value_int("Razoring Margin"));
UseLSNFiltering = get_option_value_bool("LSN filtering");
LSNTime = get_option_value_int("LSN Time Margin (sec)") * 1000;
UseLSNFiltering = get_option_value_bool("LSN filtering");
LSNTime = get_option_value_int("LSN Time Margin (sec)") * 1000;
}
// Null move search not allowed, try razoring
else if ( !value_is_mate(beta)
}
// Null move search not allowed, try razoring
else if ( !value_is_mate(beta)
- && approximateEval < beta - RazorMargin
- && (RazorAtDepthOne || depth > OnePly)
+ && approximateEval < beta - RazorApprMargins[int(depth) - 2]
&& ttMove == MOVE_NONE
&& !pos.has_pawn_on_7th(pos.side_to_move()))
{
Value v = qsearch(pos, ss, beta-1, beta, Depth(0), ply, threadID);
&& ttMove == MOVE_NONE
&& !pos.has_pawn_on_7th(pos.side_to_move()))
{
Value v = qsearch(pos, ss, beta-1, beta, Depth(0), ply, threadID);
- if ( (v < beta - RazorMargin - RazorMargin / 4)
- || (depth <= 2*OnePly && v < beta - RazorMargin)
- || (depth <= OnePly && v < beta - RazorMargin / 2))
- return v;
+ if (v < beta - RazorMargins[int(depth) - 2])
+ return v;
}
// Go with internal iterative deepening if we don't have a TT move
}
// Go with internal iterative deepening if we don't have a TT move
{
if (futilityValue == VALUE_NONE)
futilityValue = evaluate(pos, ei, threadID)
{
if (futilityValue == VALUE_NONE)
futilityValue = evaluate(pos, ei, threadID)
- + FutilityMargins[int(depth)/2 - 1]
- + 32 * (depth & 1);
+ + FutilityMargins[int(depth) - 2];
if (futilityValue < beta)
{
if (futilityValue < beta)
{
o["Selective Plies"] = Option(7, 0, 10);
o["Futility Pruning (Main Search)"] = Option(true);
o["Futility Pruning (Quiescence Search)"] = Option(true);
o["Selective Plies"] = Option(7, 0, 10);
o["Futility Pruning (Main Search)"] = Option(true);
o["Futility Pruning (Quiescence Search)"] = Option(true);
- o["Futility Margin (Quiescence Search)"] = Option(50, 0, 1000);
- o["Futility Margin Scale Factor (Main Search)"] = Option(100, 0, 1000);
- o["Maximum Razoring Depth"] = Option(3, 0, 4);
- o["Razoring Margin"] = Option(300, 150, 600);
+ //o["Futility Margin (Quiescence Search)"] = Option(50, 0, 1000);
+ //o["Futility Margin Scale Factor (Main Search)"] = Option(100, 0, 1000);
+ //o["Maximum Razoring Depth"] = Option(3, 0, 4);
+ //o["Razoring Margin"] = Option(300, 150, 600);
o["LSN filtering"] = Option(true);
o["LSN Time Margin (sec)"] = Option(4, 1, 10);
o["LSN Value Margin"] = Option(200, 100, 600);
o["LSN filtering"] = Option(true);
o["LSN Time Margin (sec)"] = Option(4, 1, 10);
o["LSN Value Margin"] = Option(200, 100, 600);