Roughly, what's the range of Elo improvement I should get after changing from alpha-beta to PVS? I finally got around to implementing PVS, but see no Elo difference after testing. (My old version actually performed ever so slightly better.) I ran an engine vs world test with 480 games games each with no measurable difference. So I'm wondering if my implementation is buggy, my testing is flawed, or maybe I'm expecting too much improvement, in which case I need more games. Or perhaps even some combination of the above problems.
xsadar wrote:Roughly, what's the range of Elo improvement I should get after changing from alpha-beta to PVS? I finally got around to implementing PVS, but see no Elo difference after testing. (My old version actually performed ever so slightly better.) I ran an engine vs world test with 480 games games each with no measurable difference. So I'm wondering if my implementation is buggy, my testing is flawed, or maybe I'm expecting too much improvement, in which case I need more games. Or perhaps even some combination of the above problems.
If you don't get a big improvement (I guess you should expect about 50 Elo) then your move ordering is bad. Find out what your pv node fail high rate is on average. It should be over 90%. If you do not usually fail high on the pv nodes, then you will waste lots of time with re-searching.
PVS gains its boost from the zero window searches, but that advantage vanishes if the zero window searches fail high.
xsadar wrote:Roughly, what's the range of Elo improvement I should get after changing from alpha-beta to PVS? I finally got around to implementing PVS, but see no Elo difference after testing. (My old version actually performed ever so slightly better.) I ran an engine vs world test with 480 games games each with no measurable difference. So I'm wondering if my implementation is buggy, my testing is flawed, or maybe I'm expecting too much improvement, in which case I need more games. Or perhaps even some combination of the above problems.
If you don't get a big improvement (I guess you should expect about 50 Elo) then your move ordering is bad. Find out what your pv node fail high rate is on average. It should be over 90%. If you do not usually fail high on the pv nodes, then you will waste lots of time with re-searching.
PVS gains its boost from the zero window searches, but that advantage vanishes if the zero window searches fail high.
What are you currently doing for move ordering?
Thanks for the suggestion. I'll have to check my pv-node fail-high percentage. I would think my move ordering should be good enough to get a decent improvement, but I could be wrong.
My move ordering is currently:
1. Hash move
2. All captures and promotions ordered by MVV/LVA
3. All other moves
In fact, if your move ordering is very good, you will also get no improvement from PVS.
I think your estimate of 50 Elo is very optimitic. IIRC Bob once wrote here that Crafty is ~10% faster because of PVS. (But this was long ago, so I might have it wrong.) That would mean only 10 Elo.
My engines did not benefit from PVS, last time I tried. I admit that in combination with LMR, PVS is the most natural thing to do. You will do a re-search anywy at unreduced depth for any score above alpha, so there would not be any benefit from doing the pilot search with an open window. It seems also logical to do that re-search immediately with an open window, as you already have an indication that the search will not fail low. There is no general reason why scores should get lower on deeper search.
hgm wrote:In fact, if your move ordering is very good, you will also get no improvement from PVS.
I think your estimate of 50 Elo is very optimitic. IIRC Bob once wrote here that Crafty is ~10% faster because of PVS. (But this was long ago, so I might have it wrong.) That would mean only 10 Elo.
If that's the case, I'll definitely need more games. Hopefully I can get a response from Bob.
My engines did not benefit from PVS, last time I tried. I admit that in combination with LMR, PVS is the most natural thing to do. You will do a re-search anywy at unreduced depth for any score above alpha, so there would not be any benefit from doing the pilot search with an open window. It seems also logical to do that re-search immediately with an open window, as you already have an indication that the search will not fail low. There is no general reason why scores should get lower on deeper search.
hgm wrote:In fact, if your move ordering is very good, you will also get no improvement from PVS.
I think your estimate of 50 Elo is very optimitic. IIRC Bob once wrote here that Crafty is ~10% faster because of PVS. (But this was long ago, so I might have it wrong.) That would mean only 10 Elo.
If that's the case, I'll definitely need more games. Hopefully I can get a response from Bob.
My engines did not benefit from PVS, last time I tried. I admit that in combination with LMR, PVS is the most natural thing to do. You will do a re-search anywy at unreduced depth for any score above alpha, so there would not be any benefit from doing the pilot search with an open window. It seems also logical to do that re-search immediately with an open window, as you already have an indication that the search will not fail low. There is no general reason why scores should get lower on deeper search.
I guess the most important missing piece of data is what your current "pv node is correct" rate is.
xsadar wrote:Roughly, what's the range of Elo improvement I should get after changing from alpha-beta to PVS? I finally got around to implementing PVS, but see no Elo difference after testing. (My old version actually performed ever so slightly better.) I ran an engine vs world test with 480 games games each with no measurable difference. So I'm wondering if my implementation is buggy, my testing is flawed, or maybe I'm expecting too much improvement, in which case I need more games. Or perhaps even some combination of the above problems.
Edit: zilch-0.0.0.3a is my engine with alpha-beta zilch-0.0.0.4 is with PVS.
PVS is a nominal change. It searches slightly faster, but then has to occasionally re-search to get a true score where normal alpha/beta does not. The advantage is that you will "sniff" out a good move quicker, and if that happens just prior to time running out, PVS will fail high while normal alpha/beta would time out and not play the actual best move. I doubt it is worth more than 10 Elo or something, which means you are going to need 20,000+ games to be able to measure the improvement...
xsadar wrote:Roughly, what's the range of Elo improvement I should get after changing from alpha-beta to PVS? I finally got around to implementing PVS, but see no Elo difference after testing. (My old version actually performed ever so slightly better.) I ran an engine vs world test with 480 games games each with no measurable difference. So I'm wondering if my implementation is buggy, my testing is flawed, or maybe I'm expecting too much improvement, in which case I need more games. Or perhaps even some combination of the above problems.
Edit: zilch-0.0.0.3a is my engine with alpha-beta zilch-0.0.0.4 is with PVS.
PVS is a nominal change. It searches slightly faster, but then has to occasionally re-search to get a true score where normal alpha/beta does not. The advantage is that you will "sniff" out a good move quicker, and if that happens just prior to time running out, PVS will fail high while normal alpha/beta would time out and not play the actual best move. I doubt it is worth more than 10 Elo or something, which means you are going to need 20,000+ games to be able to measure the improvement...
Hmm... The way people talk about PVS I thought (and hoped) it would be more of an improvement than that. So, since around 20,000 games is generally impractical, is it best to just assume that if you're not getting too many re-searches and the average time to depth decreases, that it's probably implemented properly and is thus an improvement? Or how is the best way to verify your implementation?