I've been messing around with a very simple form of late-move reductions, and so far, I've gotten 32 Elo from them, which is pretty nice. From my testing so far, LMR seems to put the dev version of Blunder at around ~2250, based on some other engines around that level on the CCRL:
Code: Select all
Rank Name Elo +/- Games Score Draw
0 Blunder 7.3.0 48 11 3200 56.8% 16.3%
1 Stash v17.0 -3 23 800 49.6% 11.1%
2 Napoleon -39 21 800 44.4% 27.0%
3 SpaceDog -70 23 800 40.0% 13.8%
4 CeeChess_v1.3 -80 23 800 38.8% 13.5%
Code: Select all
score := int16(0)
historyScore := search.history[search.Pos.SideToMove][move.FromSq()][move.ToSq()]
if legalMoves > 4 && depth > 3 && historyScore < 50 && !inCheck {
newDepth := depth - 2
if legalMoves > 6 {
newDepth--
}
score = -search.negamax(newDepth, ply+1, -beta, -alpha, &childPVLine, true)
if score > alpha {
score = -search.negamax(depth-1, ply+1, -beta, -alpha, &childPVLine, true)
}
} else {
score = -search.negamax(depth-1, ply+1, -beta, -alpha, &childPVLine, true)
}
From the reading I've done, LMR can be a fickle beast and is one of those features where it can work very well for some programs, but be a loss for others. So I'm curious what others have gained from LMR so I can get a ballpark idea of how much more Elo I can squeeze out of it, or if I'm making a silly mistake somewhere.
Also, note the 32 Elo doesn't include the history heuristics. LMR + history heuristics gained ~60-70 Elo for Blunder together. And I also realize that LMR + PVS is common, but see here for why I'm not using PVS right now: forum3/viewtopic.php?f=7&t=78183&sid=22 ... f177c93bf3