Reverse Futility Pruning

Home * Search * Selectivity * Pruning * Reverse Futility Pruning

Reverse Futility Pruning, (Static Null Move Pruning)
postpones a extended futility pruning condition applied at [pre]... pre frontier nodes to skip moves inside its move loop if material balance plus gain of the move and safety margin does not improve alpha, ...
int search( int alpha, int beta, ... ) {
  bool fprune = ...;
  int margin = ...;
  for ( all moves ) {
    if ( fprune && materialBalance + margin + gain(move) <= alpha ) continue;
    make( move );
    score = -search(-beta, -alpha, ...);
    unmake( move );
    ...
  }
  ...
}
... with the "reversed" or negamaxed fail-high condition of a more reliable score minus safety margin greater or equal than beta - after making the move, and calling the child and its static evaluation. Thus, Reverse Futility Pruning relies on the null move observation, and is a generalisation of standing pat at quiescent nodes, or a special case of null move pruning without explicitly making one [1]:
int search( int alpha, int beta, ... ) {
  int eval = evaluate(...);
  int margin = ...;
  if (... && eval - margin >= beta) {
    return eval - margin; /* fail soft */
  ...
}

See also


Forum Posts

2008 ...

2010 ...

2015 ...


References

  1. ^ Re: Reverse Futility Pruning by Don Dailey, CCC, December 02, 2011

What links here?


Up one Level