Skip to content

Commit

Permalink
Fix dynamic contempt for MultiPV
Browse files Browse the repository at this point in the history
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 official-stockfish#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
  • Loading branch information
WOnder93 authored and snicolet committed Mar 27, 2018
1 parent 8ff2fcf commit 367304e
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down

0 comments on commit 367304e

Please sign in to comment.