Skip to content

Commit a2f01c0

Browse files
snicoletvondele
authored andcommitted
Sometimes change the (materialist, positional) balance
Our new nets output two values for the side to move in the last layer. We can interpret the first value as a material evaluation of the position, and the second one as the dynamic, positional value of the location of pieces. This patch changes the balance for the (materialist, positional) parts of the score from (128, 128) to (121, 135) when the piece material is equal between the two players, but keeps the standard (128, 128) balance when one player is at least an exchange up. Passed STC: LLR: 2.93 (-2.94,2.94) <-0.50,2.50> Total: 15936 W: 1421 L: 1266 D: 13249 Ptnml(0-2): 37, 1037, 5694, 1134, 66 https://tests.stockfishchess.org/tests/view/60a82df9ce8ea25a3ef0408f Passed LTC: LLR: 2.94 (-2.94,2.94) <0.50,3.50> Total: 13904 W: 516 L: 410 D: 12978 Ptnml(0-2): 4, 374, 6088, 484, 2 https://tests.stockfishchess.org/tests/view/60a8bbf9ce8ea25a3ef04101 closes #3492 Bench: 3856635
1 parent ff4c222 commit a2f01c0

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed

src/evaluate.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1119,7 +1119,7 @@ Value Eval::evaluate(const Position& pos) {
11191119

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

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

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

src/evaluate.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ namespace Eval {
4343

4444
namespace NNUE {
4545

46-
Value evaluate(const Position& pos);
46+
Value evaluate(const Position& pos, bool adjusted = false);
4747
bool load_eval(std::string name, std::istream& stream);
4848
bool save_eval(std::ostream& stream);
4949
void init();

src/nnue/evaluate_nnue.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ namespace Stockfish::Eval::NNUE {
134134
}
135135

136136
// Evaluation function. Perform differential calculation.
137-
Value evaluate(const Position& pos) {
137+
Value evaluate(const Position& pos, bool adjusted) {
138138

139139
// We manually align the arrays on the stack because with gcc < 9.3
140140
// overaligning stack variables with alignas() doesn't work correctly.
@@ -158,13 +158,26 @@ namespace Stockfish::Eval::NNUE {
158158
ASSERT_ALIGNED(buffer, alignment);
159159

160160
const std::size_t bucket = (pos.count<ALL_PIECES>() - 1) / 4;
161-
162161
const auto [psqt, lazy] = featureTransformer->transform(pos, transformedFeatures, bucket);
163-
if (lazy) {
162+
163+
if (lazy)
164164
return static_cast<Value>(psqt / OutputScale);
165-
} else {
165+
else
166+
{
166167
const auto output = network[bucket]->propagate(transformedFeatures, buffer);
167-
return static_cast<Value>((output[0] + psqt) / OutputScale);
168+
169+
int materialist = psqt;
170+
int positional = output[0];
171+
172+
int delta_npm = abs(pos.non_pawn_material(WHITE) - pos.non_pawn_material(BLACK));
173+
int entertainment = (adjusted && delta_npm <= BishopValueMg - KnightValueMg ? 7 : 0);
174+
175+
int A = 128 - entertainment;
176+
int B = 128 + entertainment;
177+
178+
int sum = (A * materialist + B * positional) / 128;
179+
180+
return static_cast<Value>( sum / OutputScale );
168181
}
169182
}
170183

0 commit comments

Comments
 (0)