mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-22 10:06:26 +08:00
Move PSQ score to Position
This patch simplifies Position::do_move() by moving the PSQ score from StateInfo to Position and updating it inside the put/remove/move_piece functions. The downside is that there is now slightly more computation done in Position::undo_move(), but the fishtest results are Elo neutral. Passed STC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 78820 W: 15775 L: 15760 D: 47285 http://tests.stockfishchess.org/tests/view/5b1cd1d00ebc5902ab9c64ab Passed LTC: LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 32966 W: 5716 L: 5615 D: 21635 http://tests.stockfishchess.org/tests/view/5b31e1230ebc5902b2e5a833 Closes https://github.com/official-stockfish/Stockfish/pull/1647 No functional change.
This commit is contained in:
committed by
Stéphane Nicolet
parent
af6072c8b7
commit
a781535168
@@ -43,7 +43,6 @@ struct StateInfo {
|
||||
int castlingRights;
|
||||
int rule50;
|
||||
int pliesFromNull;
|
||||
Score psq;
|
||||
Square epSquare;
|
||||
|
||||
// Not copied when making a move (will be recomputed anyhow)
|
||||
@@ -188,11 +187,16 @@ private:
|
||||
Bitboard castlingPath[CASTLING_RIGHT_NB];
|
||||
int gamePly;
|
||||
Color sideToMove;
|
||||
Score psq;
|
||||
Thread* thisThread;
|
||||
StateInfo* st;
|
||||
bool chess960;
|
||||
};
|
||||
|
||||
namespace PSQT {
|
||||
extern Score psq[PIECE_NB][SQUARE_NB];
|
||||
}
|
||||
|
||||
extern std::ostream& operator<<(std::ostream& os, const Position& pos);
|
||||
|
||||
inline Color Position::side_to_move() const {
|
||||
@@ -327,7 +331,7 @@ inline Key Position::material_key() const {
|
||||
}
|
||||
|
||||
inline Score Position::psq_score() const {
|
||||
return st->psq;
|
||||
return psq;
|
||||
}
|
||||
|
||||
inline Value Position::non_pawn_material(Color c) const {
|
||||
@@ -384,6 +388,7 @@ inline void Position::put_piece(Piece pc, Square s) {
|
||||
index[s] = pieceCount[pc]++;
|
||||
pieceList[pc][index[s]] = s;
|
||||
pieceCount[make_piece(color_of(pc), ALL_PIECES)]++;
|
||||
psq += PSQT::psq[pc][s];
|
||||
}
|
||||
|
||||
inline void Position::remove_piece(Piece pc, Square s) {
|
||||
@@ -401,6 +406,7 @@ inline void Position::remove_piece(Piece pc, Square s) {
|
||||
pieceList[pc][index[lastSquare]] = lastSquare;
|
||||
pieceList[pc][pieceCount[pc]] = SQ_NONE;
|
||||
pieceCount[make_piece(color_of(pc), ALL_PIECES)]--;
|
||||
psq -= PSQT::psq[pc][s];
|
||||
}
|
||||
|
||||
inline void Position::move_piece(Piece pc, Square from, Square to) {
|
||||
@@ -415,6 +421,7 @@ inline void Position::move_piece(Piece pc, Square from, Square to) {
|
||||
board[to] = pc;
|
||||
index[to] = index[from];
|
||||
pieceList[pc][index[to]] = to;
|
||||
psq += PSQT::psq[pc][to] - PSQT::psq[pc][from];
|
||||
}
|
||||
|
||||
inline void Position::do_move(Move m, StateInfo& newSt) {
|
||||
|
||||
Reference in New Issue
Block a user