- int materialist = psqt;
- int positional = output[0];
-
- int delta_npm = abs(pos.non_pawn_material(WHITE) - pos.non_pawn_material(BLACK));
- int entertainment = (adjusted && delta_npm <= BishopValueMg - KnightValueMg ? 7 : 0);
-
- int A = 128 - entertainment;
- int B = 128 + entertainment;
-
- int sum = (A * materialist + B * positional) / 128;
-
- return static_cast<Value>( sum / OutputScale );
+ // Give more value to positional evaluation when material is balanced
+ if ( adjusted
+ && abs(pos.non_pawn_material(WHITE) - pos.non_pawn_material(BLACK)) <= RookValueMg - BishopValueMg)
+ return static_cast<Value>(((128 - delta) * psqt + (128 + delta) * positional) / 128 / OutputScale);
+ else
+ return static_cast<Value>((psqt + positional) / OutputScale);