Author: milix
Date: 11:06:53 11/11/04
The below pseudocode (slightly modified) comes from the paper 'Fail High Reductions' of Rainer Feldmann, 1996 int FHR_negascout(alpha, beta, depth) { e = evaluate(); t = threat(); d = depth; fh_node = false; if (!in_check AND alpha==beta-1 AND e-t >= beta) { fh_node = true; d = d-1; } if (d <= 0) return quiescent(alpha, beta); N = generate_moves(); low = alpha; high = beta; best = -INF; for_all_moves m[i], i=1..N { make_move(m[i]); score = -FHR_negascout(-high, -low, d-1); if (score>low AND score<beta AND i>1) { score = -FHR_negascout(-beta, -score, depth-1); } undo_move(m[i]); low = max(low,score); best = max(best,score); if (best >= beta) return best; high = low+1; } return best; } My question is about the condition: if (score>low AND score<beta AND i>1) Why score>low and i>1? I think that we expect this node to fail high, so if it didn't we must research. Same for the first move. So if the above are true the condition of research must be: if ((fh_node AND score<beta) OR (score>low AND score<beta AND i>1)) Am I missing something? Thanks in advance, Anastasios Milikas
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.