mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Call apply_weight() for both colors in one go
Due to rounding errors in apply_weight() where we divide by 0x100 it is not possible to keep some functionality. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
74db0f0f40
commit
6776f76d20
1 changed files with 13 additions and 16 deletions
|
@ -255,7 +255,7 @@ namespace {
|
||||||
void evaluate_threats(const Position& pos, EvalInfo& ei);
|
void evaluate_threats(const Position& pos, EvalInfo& ei);
|
||||||
|
|
||||||
template<Color Us, bool HasPopCnt>
|
template<Color Us, bool HasPopCnt>
|
||||||
void evaluate_space(const Position& pos, EvalInfo& ei);
|
int evaluate_space(const Position& pos, EvalInfo& ei);
|
||||||
|
|
||||||
template<Color Us>
|
template<Color Us>
|
||||||
void evaluate_passed_pawns(const Position& pos, EvalInfo& ei);
|
void evaluate_passed_pawns(const Position& pos, EvalInfo& ei);
|
||||||
|
@ -362,8 +362,8 @@ Value do_evaluate(const Position& pos, EvalInfo& ei) {
|
||||||
// Evaluate space for both sides
|
// Evaluate space for both sides
|
||||||
if (ei.mi->space_weight() > 0)
|
if (ei.mi->space_weight() > 0)
|
||||||
{
|
{
|
||||||
evaluate_space<WHITE, HasPopCnt>(pos, ei);
|
int s = evaluate_space<WHITE, HasPopCnt>(pos, ei) - evaluate_space<BLACK, HasPopCnt>(pos, ei);
|
||||||
evaluate_space<BLACK, HasPopCnt>(pos, ei);
|
ei.value += apply_weight(make_score(s * ei.mi->space_weight(), 0), Weights[Space]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,7 +470,7 @@ void read_weights(Color us) {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// init_king_tables() initializes king bitboards for both sides adding
|
// init_attack_tables() initializes king bitboards for both sides adding
|
||||||
// pawn attacks. To be done before other evaluations.
|
// pawn attacks. To be done before other evaluations.
|
||||||
|
|
||||||
template<Color Us, bool HasPopCnt>
|
template<Color Us, bool HasPopCnt>
|
||||||
|
@ -1039,27 +1039,24 @@ namespace {
|
||||||
// twice. Finally, the space bonus is scaled by a weight taken from the
|
// twice. Finally, the space bonus is scaled by a weight taken from the
|
||||||
// material hash table.
|
// material hash table.
|
||||||
template<Color Us, bool HasPopCnt>
|
template<Color Us, bool HasPopCnt>
|
||||||
void evaluate_space(const Position& pos, EvalInfo& ei) {
|
int evaluate_space(const Position& pos, EvalInfo& ei) {
|
||||||
|
|
||||||
const Color Them = (Us == WHITE ? BLACK : WHITE);
|
const Color Them = (Us == WHITE ? BLACK : WHITE);
|
||||||
|
|
||||||
// Find the safe squares for our pieces inside the area defined by
|
// Find the safe squares for our pieces inside the area defined by
|
||||||
// SpaceMask[us]. A square is unsafe if it is attacked by an enemy
|
// SpaceMask[us]. A square is unsafe if it is attacked by an enemy
|
||||||
// pawn, or if it is undefended and attacked by an enemy piece.
|
// pawn, or if it is undefended and attacked by an enemy piece.
|
||||||
Bitboard safeSquares = SpaceMask[Us]
|
Bitboard safe = SpaceMask[Us]
|
||||||
& ~pos.pieces(PAWN, Us)
|
& ~pos.pieces(PAWN, Us)
|
||||||
& ~ei.attacked_by(Them, PAWN)
|
& ~ei.attacked_by(Them, PAWN)
|
||||||
& (ei.attacked_by(Us) | ~ei.attacked_by(Them));
|
& (ei.attacked_by(Us) | ~ei.attacked_by(Them));
|
||||||
|
|
||||||
// Find all squares which are at most three squares behind some friendly pawn
|
// Find all squares which are at most three squares behind some friendly pawn
|
||||||
Bitboard behindFriendlyPawns = pos.pieces(PAWN, Us);
|
Bitboard behind = pos.pieces(PAWN, Us);
|
||||||
behindFriendlyPawns |= (Us == WHITE ? behindFriendlyPawns >> 8 : behindFriendlyPawns << 8);
|
behind |= (Us == WHITE ? behind >> 8 : behind << 8);
|
||||||
behindFriendlyPawns |= (Us == WHITE ? behindFriendlyPawns >> 16 : behindFriendlyPawns << 16);
|
behind |= (Us == WHITE ? behind >> 16 : behind << 16);
|
||||||
|
|
||||||
int space = count_1s_max_15<HasPopCnt>(safeSquares)
|
return count_1s_max_15<HasPopCnt>(safe) + count_1s_max_15<HasPopCnt>(behind & safe);
|
||||||
+ count_1s_max_15<HasPopCnt>(behindFriendlyPawns & safeSquares);
|
|
||||||
|
|
||||||
ei.value += Sign[Us] * apply_weight(make_score(space * ei.mi->space_weight(), 0), Weights[Space]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue