My scheme in Cilkchess was to gradually increase the movement, starting at 2 (I only used even scores), but if I kept getting failures in the same direction I incremented by ever increasing values. The amount of increment I believe was reset if a failure switched from upper to lower or visa versa.Bo Persson wrote:It doesn't have to be linear, you can accelerate the step if you start far from the final score.Dann Corbit wrote:MTD(f) does a linear search. I would guess that a good hash implementation would be essential, because the initial guess must be excellent for the method to prevail.Zach Wegner wrote:I thought that's what MTD(f) did? At least, when I was thinking about MTD(f), I would've done it that way.Dann Corbit wrote:I always liked the search variant called {IIRC} C-Star, which uses mtd(f) like probing, but in a binary search rather than a linear search. There is something very appealing to me about that method.
Here was another thing I thought of doing, in case anyone else hadn't thought of it:
When doing the probes, use MTD(f) to get a score for only the first move, instead of searching all moves when the others will likely fail. Then the rest of the root node becomes like PVS.
Inspired by Don Daily (no less, I move gamma 0.16 pawns in the proper direction after the first probe. Then step 0.32, 0.64, etc points until passing over the score (fail high/fail low condition changes).
Knowing that we are now closer, I use step/=2 for each additional iteration, altering the direction if fail high/fail low changes again.
Most of the time, this zooms in on the final score pretty fast.
Except when it doesn't.
I think this is a bit of a black art and would depend very much on your specific implementation and probably needs significant testing. The optimum algorithm may not necessarily be the fastest, but probably one that minimizes the effects of the worst case.
One thing is sure, this is different. There were some positions that take longer to search than PVS, however MOST positions were faster. The ones that took a long time to search were usually not a big problem for chess strength because it usually didn't prevent your program from playing the correct move. The "incrementing increments" pretty much solved this problem for me anyway.
There were some problems that mtd(f) solved dramatically faster than PVS too. I think PVS has it's pathological cases too, but we just don't notice them as much. You notice it with mtd(f) because you see many more researches that are painful to observe, but with normal alpha beta we are used to seeing the first move take a long time and don't realize that the process is similar - it's just sorting through a lot of garbage.