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.