mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Fix dynamic contempt for MultiPV
Use rootMoves[PVIdx].previousScore instead of bestValue for dynamic contempt. This is equivalent for MultiPV=1 (bench remained the same, even for higher depths), but more correct for MultiPV. STC (MultiPV=3): LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 2657 W: 1079 L: 898 D: 680 http://tests.stockfishchess.org/tests/view/5aaa47cb0ebc590297330403 LTC (MultiPV=3): LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 2390 W: 874 L: 706 D: 810 http://tests.stockfishchess.org/tests/view/5aaa593a0ebc59029733040b VLTC 240+2.4 (MultiPV=3): LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 2399 W: 861 L: 694 D: 844 http://tests.stockfishchess.org/tests/view/5aaf983e0ebc5902a182131f LTC (MultiPV=4, Skill Level=17): LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 747 W: 333 L: 175 D: 239 http://tests.stockfishchess.org/tests/view/5aabccee0ebc5902997ff006 Note: although the ELO differences seem huge, they are inflated by the nature of Skill Level / MultiPV search, so I don't think they can be reasonably compared with classic ELO strength. See https://github.com/official-stockfish/Stockfish/pull/1491 for some verifications searches with MultiPV = 10 at depths 12 and 24 from the starting position and the position after 1.e4, comparing the outputs of the full PV by the old master and by this patch. No functional change for MultiPV=1
This commit is contained in:
parent
8ff2fcf299
commit
367304e930
1 changed files with 5 additions and 4 deletions
|
@ -343,14 +343,15 @@ void Thread::search() {
|
|||
// Reset aspiration window starting size
|
||||
if (rootDepth >= 5 * ONE_PLY)
|
||||
{
|
||||
Value previousScore = rootMoves[PVIdx].previousScore;
|
||||
delta = Value(18);
|
||||
alpha = std::max(rootMoves[PVIdx].previousScore - delta,-VALUE_INFINITE);
|
||||
beta = std::min(rootMoves[PVIdx].previousScore + delta, VALUE_INFINITE);
|
||||
alpha = std::max(previousScore - delta,-VALUE_INFINITE);
|
||||
beta = std::min(previousScore + delta, VALUE_INFINITE);
|
||||
|
||||
ct = Options["Contempt"] * PawnValueEg / 100; // From centipawns
|
||||
|
||||
// Adjust contempt based on current bestValue (dynamic contempt)
|
||||
ct += int(std::round(48 * atan(float(bestValue) / 128)));
|
||||
// Adjust contempt based on root move's previousScore (dynamic contempt)
|
||||
ct += int(std::round(48 * atan(float(previousScore) / 128)));
|
||||
|
||||
Eval::Contempt = (us == WHITE ? make_score(ct, ct / 2)
|
||||
: -make_score(ct, ct / 2));
|
||||
|
|
Loading…
Add table
Reference in a new issue