hgm wrote:bob wrote:1. how did you find the first 3 "best moves"? Not with a normal alpha.
Define "normal alpha". This obviously depends on if you are doing PVS or alpha-beta, if you do asipration or not.
For me, "normal" would be -INFINITY when you don't do aspiration, and score_of_previous_iteration - lowerMargin when you do. Of course you would use the score of the 3rd move in the multi-PV case.
2. Once you find the first "best 3" you absolutely set alpha "artificially low". Why? Because you are setting it _lower_ than the actual score for the third-best move, once you actually find the real 3rd best move.
Why on Earth would I do that? Once I actually find the real 3rd best move, alpha is of course set to the score of that. Why would you set it lower? Both in alpha-beta and PVS one usully increases alpha, when one finds a move with a better score.
Let me make it simpler.
There are 4 moves, A, B, C and D. A, B and D are the real best 4.
Once you have searched A, B and C, C is the 3rd best so far, and you are searching with its score as alpha. But D is the _real_ 3rd best move and has a higher score. So while searching all moves after C, you are using C's score as alpha, and it is lower than the real 3rd best move's score.
So again, how is this supposedly superior to what I am currently doing?
Why is that so hard to understand???
Because it is not true to begin with?
No disagreement at all there. I just disagree with the idea that picking them off one at a time is worse. Because I have actually _tested_ the idea. Both when I originally wrote the code, and then when I recently made some changes when someone found a small bug. And I definitely disagree with those that give a "pseudo-n-best moves" where some of the "n-best" actually come from previous iterations rather than the current one, etc...
Somehow the misconceptions about what I should be doing that you displayed above make me wonder what you actually tested, and if that had any relevance at all.
I explained exactly what I tested, which is exactly what has been discussed. This is not a _new_ idea. I'm simply asking exactly how this is more efficient than what I currently do. Particularly when testing both over several games (annotating requesting 5 best moves) did not show this supposed superiority...
There are other obvious issues. For example, you get the best move. Now you have to search with a lowered alpha. Which is clearly sub-optimal since it has to be low enough that a new move will trip over it. But if you make it low enough, _any_ move will fail high, and you don't exactly want that.
waiting on details of how these issues are circumvented...