Skip to content

Commit

Permalink
No classical eval. Bench: 3492488
Browse files Browse the repository at this point in the history
  • Loading branch information
vondele committed May 29, 2021
1 parent 6174a37 commit 0f425a2
Showing 1 changed file with 6 additions and 37 deletions.
43 changes: 6 additions & 37 deletions src/evaluate.cpp
Expand Up @@ -1113,43 +1113,12 @@ Value Eval::evaluate(const Position& pos) {
v = Evaluation<NO_TRACE>(pos).value();
else
{
// Scale and shift NNUE for compatibility with search and classical evaluation
auto adjusted_NNUE = [&]()
{

int scale = 903 + 28 * pos.count<PAWN>() + 28 * pos.non_pawn_material() / 1024;

Value nnue = NNUE::evaluate(pos, true) * scale / 1024;

if (pos.is_chess960())
nnue += fix_FRC(pos);

return nnue;
};

// If there is PSQ imbalance we use the classical eval. We also introduce
// a small probability of using the classical eval when PSQ imbalance is small.
Value psq = Value(abs(eg_value(pos.psq_score())));
int r50 = 16 + pos.rule50_count();
bool largePsq = psq * 16 > (NNUEThreshold1 + pos.non_pawn_material() / 64) * r50;

// Use classical evaluation for really low piece endgames.
// One critical case is the draw for bishop + A/H file pawn vs naked king.
bool lowPieceEndgame = pos.non_pawn_material() == BishopValueMg
|| (pos.non_pawn_material() < 2 * RookValueMg && pos.count<PAWN>() < 2);

v = largePsq || lowPieceEndgame ? Evaluation<NO_TRACE>(pos).value() // classical
: adjusted_NNUE(); // NNUE

// If the classical eval is small and imbalance large, use NNUE nevertheless.
// For the case of opposite colored bishops, switch to NNUE eval with small
// probability if the classical eval is less than the threshold.
if ( largePsq
&& !lowPieceEndgame
&& ( abs(v) * 16 < NNUEThreshold2 * r50
|| ( pos.opposite_bishops()
&& abs(v) * 16 < (NNUEThreshold1 + pos.non_pawn_material() / 64) * r50)))
v = adjusted_NNUE();
int scale = 903 + 28 * pos.count<PAWN>() + 28 * pos.non_pawn_material() / 1024;

v = NNUE::evaluate(pos, true) * scale / 1024;

if (pos.is_chess960())
v += fix_FRC(pos);
}

// Damp down the evaluation linearly when shuffling
Expand Down

2 comments on commit 0f425a2

@snicolet
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you have a net which is better in endgames, we can also test the simplification with that net.

After all a net is just a giant parameter tweak, and we have always accepted simplification + parameter tweak combos.

@vondele
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, that's also running (take 2). But I'm not sure it actually plays better... we'll see.

Please sign in to comment.