Relationship between move ordering and pruning
Posted: Mon Dec 17, 2012 3:47 pm
Over the years there has been a constant tendency to increase the amount of pruning and reductions in my program. What is a bit odd about this is that what didn't work before appears to work now. We do very aggressive forward pruning as well as LMR. So why is this?
One of the the things that has improved over time is our move ordering. We have the classic stuff as well as modern improvements and a couple twists of our own, all designed to improve move ordering. Probably the biggest advance in move ordering beyond the classic capture MVVLVA and killer stuff is the history heuristic. That has been around a very long time but not in it's current form which is basically a rapidly "aged" table of move success rates. So I decided to turn that off in an experiment to see how much it "buys" in terms of speed. In the past move ordering was considered a performance issue only - a way to speed up the search but not improve the strength of the program at any particularly depth. But that is no longer the case and probably hasn't been for a long time. Nevertheless I was still surprised when I found that at 10 ply fixed depth searches it was worth 150 ELO. (This test actually finished at 151 ELO plus - but I only have the older data.)
My tentative conclusion here (which is something I think most people already believe) is that heavy pruning, reductions and move ordering are very complimentary. You cannot successfully do heavy pruning without exceptionally good move ordering.
Anecdotal evidence points to this too. Many times I have seen people report that LMR is not worth much in their program. In Komodo it is worth well over 100 ELO at fast time controls. The first time I implemented LMR in Doch I also only was able to obtain a few ELO. And if I was not extremely careful and conservative I found that it had a negative impact on the strength of the program. But today's implementation looks reckless by comparison.
Here is some old data on this run at 10 ply fixed depth. I often use fixed depth to try to isolate performance numbers, never to measure ELO but the difference in ELO here is so huge it is not subject to debate.
One of the the things that has improved over time is our move ordering. We have the classic stuff as well as modern improvements and a couple twists of our own, all designed to improve move ordering. Probably the biggest advance in move ordering beyond the classic capture MVVLVA and killer stuff is the history heuristic. That has been around a very long time but not in it's current form which is basically a rapidly "aged" table of move success rates. So I decided to turn that off in an experiment to see how much it "buys" in terms of speed. In the past move ordering was considered a performance issue only - a way to speed up the search but not improve the strength of the program at any particularly depth. But that is no longer the case and probably hasn't been for a long time. Nevertheless I was still surprised when I found that at 10 ply fixed depth searches it was worth 150 ELO. (This test actually finished at 151 ELO plus - but I only have the older data.)
My tentative conclusion here (which is something I think most people already believe) is that heavy pruning, reductions and move ordering are very complimentary. You cannot successfully do heavy pruning without exceptionally good move ordering.
Anecdotal evidence points to this too. Many times I have seen people report that LMR is not worth much in their program. In Komodo it is worth well over 100 ELO at fast time controls. The first time I implemented LMR in Doch I also only was able to obtain a few ELO. And if I was not extremely careful and conservative I found that it had a negative impact on the strength of the program. But today's implementation looks reckless by comparison.
Here is some old data on this run at 10 ply fixed depth. I often use fixed depth to try to isolate performance numbers, never to measure ELO but the difference in ELO here is so huge it is not subject to debate.
Code: Select all
Rank ELO +/- Games Score Player
---- ------- ------ -------- -------- ----------------------------
1 3146.3 20.1 749 69.960 Base
2 3000.0 20.1 749 30.040 NoHistory
w/l/d: 255 206 288 38.45 percent draws
TIME RATIO log(r) NODES log(r) ave DEPTH GAMES PLAYER
--------- ---------- -------- -------- -------- --------- ------- -------
0.0788 0.657 -0.420 0.058 -0.463 9.9964 749 Base
0.1200 1.000 0.000 0.091 0.000 9.9975 749 NoHistory