Pruning in PV nodes
Posted: Tue Jan 14, 2014 9:02 pm
It's interesting, that agressive reductions even at the root node can't harm SmarThink playing strength. Below see code snippet for root search function.
I've runned test match between new version with the code above, and previous one (no pruning at the root). Currently it shows 1409.5:1398.5 — so, probably, no significant changes when I've expected some dropdown.
What is your expirience of forward pruning in PV-nodes? I think at least some moves can be reduced.
I've runned test match between new version with the code above, and previous one (no pruning at the root). Currently it shows 1409.5:1398.5 — so, probably, no significant changes when I've expected some dropdown.
What is your expirience of forward pruning in PV-nodes? I think at least some moves can be reduced.
Code: Select all
int reduction_bound[16] = {200, 200, 200, 200, 200, 200, 200, 150, 100, 75, 65, 50, 40, 35, 30, 25};
int reduction_num_bound[8] = {25, 25, 25, 20, 15, 10, 5, 0};
int RootSearch(int a, int b, int d)
{
int min_value;
int max_value;
if (mate_moves > 0)
{
min_value = -(INFINITY - (mate_moves << 1));
max_value = min_value + 1;
}
else
{
min_value = -INFINITY - 1;
max_value = INFINITY + 1;
}
if (a < min_value) a = min_value;
if (b > max_value) b = max_value;
if (a >= b) return (a);
if (d >= 5 * INCPLY && b == a + 1)
{
int bound = reduction_bound[MIN(d / INCPLY, 15)] + reduction_num_bound[MIN(7, RootMoveNum)];
int res_reducted = Search(a + bound, b + bound, d - 4 * INCPLY - ((int)((d / 6) / INCPLY)) * INCPLY, TRUE, (b == a + 1) ? NODE_TYPE_CUT : NODE_TYPE_EXACT);
if (threads[CURRENT_THREAD].board->stopped) return 0;
if (res_reducted >= b + bound) return res_reducted;
}
{
int res = Search(a, b, d, TRUE, (b == a + 1) ? NODE_TYPE_CUT : NODE_TYPE_EXACT);
// printf("[%d;%d: %d]\n", min_value, max_value, res);
return res;
}
}