Replies: 11 comments 4 replies
-
|
Beta Was this translation helpful? Give feedback.
-
I've been testing a few things locally. What I came up with was -2 depth at root for pvIdx > 0 and allowing TT on PvNodes when pvIdx > 0 and it is our move with a lower bound. The combination of these two things means that we are able to use the previous iteration's main line results to very efficiently skip work on trivial transpositions. These transpositions currently waste a great deal of resources because they are going to have the same score as the main line, and are first in line for multiPV while contributing nothing useful. Taking the TT cutoff for our own moves with a lower bound is safe because it is either a fail high, which if large enough will promote to mainline and be resolved as ususal, or it has BOUND_EXACT which means it was searched as a PvNode at a greater depth than our current search. At the same time, it preserves the spirit of multiPV in that all of our opponents moves are disallowed from taking nonPV cutoffs/reductions. I think this was worth ~48 Elo at an STC of 18+0.18, MPV=4 for both. I can push a branch and test on fishtest if this is something people are interested in... |
Beta Was this translation helpful? Give feedback.
-
In SMP different threads often find different moves. get_best_thread() is the function that then picks one of them. We could output all of them in MultiPV w/o spending any additional resources. As a bonus this happens most often in positions where multiple moves are close which is when most people care about MultiPV. |
Beta Was this translation helpful? Give feedback.
-
Another idea: If number of threads >= multipv, have each thread search different moves at root. could partly use existing searchmoves infrastructure to handle this, with possible optimization for searchmoves of only 1 move. Leftover threads could just search best move or be equally distributed between all multipv moves. |
Beta Was this translation helpful? Give feedback.
-
Seems that part of the problem is that we're not sure what users want, which is a key piece of data to make a good choice. I can think of at least two broadly different user bases, the casuals who use browsers (e.g. lichess or chesscom), and the "power" users of correspondence. Soliciting from feedback from at least the latter if not the former would be useful. It would also be good to perhaps explore the options in more detail. The "overkill" way would be to implement all the choices, make it selectable via UCI and thence solicit feedback from power users or browser users. However, maintainers have a history of disdaining option overload, so mayhaps this would need to be a branch outside (but tracking) master. That said, for browser users at least, using a fake/free/pseudo mode is likely to be a clear improvement. Also, if I interpret jhellis3 correctly (not sure I do), that sounds like a straight, direct improvement to the current "equal time" strategy, and so quite separately from the question of what other modes are good, improving the current mode is certainly worth a fishtest. |
Beta Was this translation helpful? Give feedback.
-
Fishtest result for aforementioned patch can be found here: https://tests.stockfishchess.org/tests/view/663e5d163a2f9702074bc16a |
Beta Was this translation helpful? Give feedback.
-
Just as i said on Discord, i'm not sure STC gains from an option that should be turned off in regular game playing anyway make for a good argument for any type of tweak. |
Beta Was this translation helpful? Give feedback.
-
You could also argue for a variant of 1 with something like a node limit, since sometimes other moves take more nodes to resolve the same depth. I suspect this is actually a decent portion of multipv elo loss. IMO 2 would be nice to have if you can keep it as decent as leela's output. It also makes the most sense, since it considers the secondary moves the right amount for maximum elo and naturally looks at bad moves less. But I haven't seen this done well in an AB, and there are concerns like out of window searches mentioned above. 3 could be trying to simulate 2 if 2 can't work directly (maybe search at the adjusted depth but with new window? Would be some level of elo loss though) Personally I don't see much of an appeal between "minimal elo loss with usable mpv" and "full search", but if someone does want it you may want to use some UCI option to control the balance between it. |
Beta Was this translation helpful? Give feedback.
-
One thing to consider is that stockfish/uci support setting a maximum thinking time/nodes/depth/etc but not a minimum. Support for a minimum would be interesting/useful. |
Beta Was this translation helpful? Give feedback.
-
Maybe this is of some interest: https://github.com/joergoster/Stockfish/releases/tag/mpv1 |
Beta Was this translation helpful? Give feedback.
-
I have a simple idea: only main thread searches multiple PV moves. This should dramatically reduce the strength loss of enabling MultiPV if multiple threads are used. Let me know what you think. |
Beta Was this translation helpful? Give feedback.
-
Following the conversation that happened on Discord about MultiPV I decided to open a formal discussion here on GitHub.
There are currently 3 ways to implement MultiPV:
Beta Was this translation helpful? Give feedback.
All reactions