-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Eliminate ONE_PLY #2289
Eliminate ONE_PLY #2289
Conversation
410dbb2
to
d721b67
Compare
missing bit: diff --git a/.travis.yml b/.travis.yml
index 1d56a23e9..a59ea4251 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -56,9 +56,6 @@ script:
- make clean && make -j2 ARCH=x86-32 optimize=no debug=yes build && ../tests/signature.sh $benchref
- make clean && make -j2 ARCH=x86-32 build && ../tests/signature.sh $benchref
- # Verify bench number is ONE_PLY independent by doubling its value
- - sed -i'.bak' 's/.*\(ONE_PLY = [0-9]*\),.*/\1 * 2,/g' types.h
- - make clean && make -j2 ARCH=x86-64 build && ../tests/signature.sh $benchref
#
# Check perft and reproducible search
- ../tests/perft.sh
|
Well I do agree. |
I have tried int the past several tests around fractional plies but had no success. But i'am personally convinced that with fractional plies there a higher optimum is possible. I understand that removing simplifies the code and coding (which for me makes no really difference, i never forget the ONE_PLY, its a automatic move for me) but if we remove it nobody will test around fractional plies anymore because too much would be to changed for it (and probably something is forgotten and an error is introduced). Perhaps we should set a target date and call for a period of intensive fractional plies testing. And if nothing is found until then simplify it away. |
I've been playing around with fractional plies since #2081 and haven't come up with any results either. To my understanding factional plies as they're implemented (with the tt only saving integer plies) can only be used for search reductions and there they're just a way to do less search reduction (skip every other half ply reduction), so they're less efficient than full ply reductions in almost every instance (because they search deeper). |
The first request I can find to keep ONE_PLY 'a few more months' was in 2016: |
@gvreuls They also could be used for extensions. For every other ply as noted in your comment regarding reductions or having multiple factors existing on a move , that would trigger a full ply extension. |
I would suggest a 6 month moratorium before removing it to allow one more shot at it with testing - if none is found, remove it. But since we know it doesn’t hurt the performance or current testing , my first choice would be to leave it “as is” since any re-introduction at a later time could be problematic. |
We could try tuning the related variables with ONE_PLY set to something like 256 and see what comes out? One issue is there are at least a couple of places where the Perhaps there are others? |
To some extent, this comes down to "enough people have tried and failed to make fractional search work that we have decided as a community to focus our attention on other avenues, which have proved much more fruitful." In addition to having entirely failed in our experience, there are theoretical reasons why fractional search depths should be difficult to make work:
To summarize, fractional depth systems
|
From the history, it seems that this might be the time to make a deadline
(1 month, 6 months, whatever), do a concerted effort and then remove it if
no gain is found by then.
But right now, the TCEC premier division has just started, so perhaps we
would be best to spend the next 3 weeks looking for Elo gainers for a
hopeful superfinal appearance (maybe including fractional plies, maybe not)
and then spend some time concentrating on this issue once the TCEC
superfinal has started?
|
@SapphireBrand Edit: |
…ased on my a adjusted fractional_base branch (see also official-stockfish/Stockfish#2289). Bench: 3504904
What date in the future should we decide for the removal, if no test proves that the ONE_PLY feature is useful after all? |
I think that everyone who wanted already tried this partial plies. My guess that today will be pretty OK. |
I will make a fresh version on top of the latest master, so we can all take another look. |
d721b67
to
2476cc6
Compare
@locutus2 That is, I think that you have found the optimum, and, furthermore, it is through your efforts that the community has that confidence. |
@SapphireBrand |
2476cc6
to
f9d621a
Compare
…forum that support for fractional plies has never been used, and @mcostalba's openness to the idea of eliminating it. The argument favoring eliminating ONE_PLY: * The term “ONE_PLY” comes up in a lot of forum posts (https://groups.google.com/forum/?fromgroups=#!searchin/fishcooking/ONE_PLY%7Csort:relevance): 474 posts to date. * There is occasionally a commit that breaks invariance of the code with respect to ONE_PLY. (https://groups.google.com/forum/?fromgroups=#!searchin/fishcooking/ONE_PLY%7Csort:date/fishcooking/ZIPdYj6k0fk/KdNGcPWeBgAJ) * To prevent such commits, there is a Travis CI hack that doubles ONE_PLY and rechecks bench. * Sustaining ONE_PLY has, alas, not resulted in any improvements to the engine, despite many individuals testing many experiments over 5 years. The strongest argument in favor of preserving ONE_PLY comes from @locutus: “If we use par example ONE_PLY=256 the parameter space is increases by the factor 256. So it seems very unlikely that the optimal setting is in the subspace of ONE_PLY=1.” There is a strong theoretical impediment to fractional depth systems: the transposition table uses depth to determine when a stored result is good enough to supply an answer for a current search. If you have fractional depths, then different pathways to the position can be at fractionally different depths. In the end, there are 3 separate times when a proposal to remove ONE_PY was defeated by the suggestion to “give it a few more months.” So… it seems like time to remove this distraction from the community. Binary identical to master. No functional change
f9d621a
to
665f0f8
Compare
Rebased onto the latest master, and updated the commit comment to include a summary (necessarily abbreviated) of the discussion. |
@snicolet this should be merged, as maintaining the PR is tedious, every other commit to master causes a conflict. |
Simplification that eliminates ONE_PLY, based on a suggestion in the forum that support for fractional plies has never been used, and @mcostalba's openness to the idea of eliminating it. We lose a little bit of type safety by making Depth an integer, but in return we simplify the code in search.cpp quite significantly. No functional change ------------------------------------------ The argument favoring eliminating ONE_PLY: * The term “ONE_PLY” comes up in a lot of forum posts (474 to date) https://groups.google.com/forum/?fromgroups=#!searchin/fishcooking/ONE_PLY%7Csort:relevance * There is occasionally a commit that breaks invariance of the code with respect to ONE_PLY https://groups.google.com/forum/?fromgroups=#!searchin/fishcooking/ONE_PLY%7Csort:date/fishcooking/ZIPdYj6k0fk/KdNGcPWeBgAJ * To prevent such commits, there is a Travis CI hack that doubles ONE_PLY and rechecks bench * Sustaining ONE_PLY has, alas, not resulted in any improvements to the engine, despite many individuals testing many experiments over 5 years. The strongest argument in favor of preserving ONE_PLY comes from @locutus: “If we use par example ONE_PLY=256 the parameter space is increases by the factor 256. So it seems very unlikely that the optimal setting is in the subspace of ONE_PLY=1.” There is a strong theoretical impediment to fractional depth systems: the transposition table uses depth to determine when a stored result is good enough to supply an answer for a current search. If you have fractional depths, then different pathways to the position can be at fractionally different depths. In the end, there are three separate times when a proposal to remove ONE_PLY was defeated by the suggestion to “give it a few more months.” So… it seems like time to remove this distraction from the community. See the pull request here: #2289
Merged via ca7d4e9, thanks! We lose a little bit of type safety by making Depth an integer, but in return we simplify the code in search.cpp quite significantly. |
Simplification that eliminates ONE_PLY, based on a suggestion in the forum that support for fractional plies has never been used, and @mcostalba's openness to the idea of eliminating it. We lose a little bit of type safety by making Depth an integer, but in return we simplify the code in search.cpp quite significantly. No functional change ------------------------------------------ The argument favoring eliminating ONE_PLY: * The term “ONE_PLY” comes up in a lot of forum posts (474 to date) https://groups.google.com/forum/?fromgroups=#!searchin/fishcooking/ONE_PLY%7Csort:relevance * There is occasionally a commit that breaks invariance of the code with respect to ONE_PLY https://groups.google.com/forum/?fromgroups=#!searchin/fishcooking/ONE_PLY%7Csort:date/fishcooking/ZIPdYj6k0fk/KdNGcPWeBgAJ * To prevent such commits, there is a Travis CI hack that doubles ONE_PLY and rechecks bench * Sustaining ONE_PLY has, alas, not resulted in any improvements to the engine, despite many individuals testing many experiments over 5 years. The strongest argument in favor of preserving ONE_PLY comes from @locutus: “If we use par example ONE_PLY=256 the parameter space is increases by the factor 256. So it seems very unlikely that the optimal setting is in the subspace of ONE_PLY=1.” There is a strong theoretical impediment to fractional depth systems: the transposition table uses depth to determine when a stored result is good enough to supply an answer for a current search. If you have fractional depths, then different pathways to the position can be at fractionally different depths. In the end, there are three separate times when a proposal to remove ONE_PLY was defeated by the suggestion to “give it a few more months.” So… it seems like time to remove this distraction from the community. See the pull request here: official-stockfish#2289
Simplification that eliminates ONE_PLY, based on a suggestion in the forum that support for fractional plies has never been used, and @mcostalba's openness to the idea of eliminating it.
Binary identical to master.
No functional change