Computer Chess Club Archives


Search

Terms

Messages

Subject: "Percentage of fail-highs" question

Author: Daniel Clausen

Date: 13:52:21 01/03/00


Hi

I have a question concerning the percentage of fail highs, especially fail
highs after the first tried move in a position. I heard from different
sources that the expected fail high percentage for the first tried move
should be somewhere >90%.

When I calculate 7 plies from the initial position I get the following values:

branching factor = 4.61
#nodes=170429            // Total number of nodes generated
   #q=19291 [1%]         // #(quiescense-nodes#
   #i=401 [0%]           // #(illegal nodes) (ie side-to-move in check)
#positions=50063         // #positions on which a search is applied to
   #fhs=27982 [55%]      // #positions where I get a fail-high (FH)
   #fh1s=23591 [47%]     // #positions where the FH occurs after the 1st move
#pvsTries=126872         // # of search-tries with [alpha, alpha+1] window
   #pvsFails=21 [0%]     // # of PVS-related researches


As you can see, the percentage on fail-highs after the 1st move, are *far*
away from the 90%...

I agree that my move-ordering is not the best:
  - Hash move
  - Capture moves (ordered by MVV/LVA)
  - Other moves (the first two sorted by history-value)

So I surely can improve a bit with a more decent move-ordering. But my
feeling is that hash moves should have the biggest influence. And without
hashing I get the values:

branching factor = 5.58
#positions=171551
   #fhs=85721 [49%]
   #fhs1s=67770 [39%]


So hash-moves helped but not as much as expected... 39% -> 47%.


I'm beginning to think that maybe I count them in a wrong way.
Here's the relevant code:

int searchWhite(ply, alpha, beta, ...)
{
   legalMoves = 0;
   positions  = 0;

   // Loop over all moves.
   while( (move=nextMove(ply)) != NO_MOVE)
   {
      makeWhiteMove(move);

      // Search the 1st move with the full window.
      // Is that okay?
      if(legalMoves==0)
      {
         score = searchBlack(ply+1, alpha, beta, ...);
      }
      // Search the rest of the moves with a minimal window.
      else
      {
         pvsTries++;
         score = searchBlack(ply+1, alpha, alpha+1, ...);

         if(score>alpha && score<beta)
         {
            pvsFails++;
            score = searchBlack(ply+1, alpha, beta, ...);
         }
      }

      best = max(best, score);
      unmakeWhiteMove(move);

      if(alpha>=beta)
      {
         failHighs++;
         if(legalMoves == 0) failHighsOn1st++;

         return beta;
      }

      legalMoves++;
   }
}


Any comments? Did I miss something or is my move-ordering simply
that bad?

Kind regards,
 -sargon



This page took 0.01 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.