Code: Select all
if moves_searched == 0 {
score = -search(-beta, -alpha)
else {
score = -search(-(alpha+1), -alpha)
if score > alpha && score < beta {
score = -search(-beta, -alpha)
}
}
...
moves_searched += 1
However, I get approximately -30 elo when testing versions of my engine with plain AB vs PVS:
Code: Select all
Results of PVS vs AB (10, NULL, 16MB, hyatt2500.epd):
Elo: -28.12 +/- 3.94, nElo: -34.52 +/- 4.82
LOS: 0.00 %, DrawRatio: 40.68 %, PairsRatio: 0.70
Games: 20000, Wins: 6895, Losses: 8510, Draws: 4595, Points: 9192.5 (45.96 %)
Ptnml(0-2): [1547, 1936, 4068, 1483, 966], WL/DD Ratio: 5.92
My move ordering scheme is as follows:
Root:
- PV move
- Other moves sorted by nodes count from last iteration
- PV/TT move
- Good captures (sorted by MVV/LVA then tested with SEE >= 0)
- 2 killer moves
- Non-capture moves sorted by history heuristic
- Bad captures (SEE < 0)
I tested the first 20 positions in https://www.chessprogramming.org/Silent_but_Deadly with fixed 12-depth search to compare statistics between AB and PVS versions of my engine and found the following:
- Total average nodes and time reduced by PVS was approximately 33%
- Cut-off on 1st move rate: 96.5% (Nodes that failed-high on first move divided by total nodes that failed high)
- PVS re-search rate: 0.0045%
The numbers seem good to me, but in self-play, the plain AB version is significantly stronger than the PVS version. Any ideas?
Thanks!