From: IIvec Date: Mon, 5 Mar 2018 21:24:26 +0000 (+0100) Subject: Simplification: use Arctan for the optimism S-curve X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=82697f1193cc8c99c99c282361a3ada25c758243;p=stockfish Simplification: use Arctan for the optimism S-curve This was an idea of Gontran Lemaire (gonlem), but the graphs he published did not seem accurate to me. I did my own graphs, got my own constants and here is the result: STC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 42179 W: 8704 L: 8622 D: 24853 http://tests.stockfishchess.org/tests/view/5a9db6270ebc590297cb611b LTC: LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 17737 W: 2702 L: 2577 D: 12458 http://tests.stockfishchess.org/tests/view/5a9eb5b20ebc590297cb61b2 Note: we are now back to 70% draw rate in selfplay mode! Bench: 5544908 --- diff --git a/src/search.cpp b/src/search.cpp index 548ea914..832501f2 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -351,10 +351,7 @@ void Thread::search() { ct = Options["Contempt"] * PawnValueEg / 100; // From centipawns // Adjust contempt based on current bestValue (dynamic contempt) - int sign = (bestValue > 0) - (bestValue < 0); - ct += bestValue > 500 ? 70 : - bestValue < -500 ? -70 : - bestValue / 10 + sign * int(std::round(3.22 * log(1 + abs(bestValue)))); + ct += int(std::round(48 * atan(float(bestValue) / 128))); Eval::Contempt = (us == WHITE ? make_score(ct, ct / 2) : -make_score(ct, ct / 2));