mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 00:56:39 +08:00
Split PSQT init from Position init
Easier for tuning psq tables: TUNE(myParameters, PSQT::init); Also move PSQT code in a new *.cpp file, and retire the old and hacky psqtab.h that required to be included only once to work correctly, this is not idiomatic for a header file. Give wide visibility to psq tables (previously visible only in position.cpp), this will easy the use of psq tables outside Position, for instance in move ordering. Finally trivial code style fixes of the latest patches. Original patch of Lucas Braesch. No functional change.
This commit is contained in:
@@ -27,7 +27,6 @@
|
||||
#include "misc.h"
|
||||
#include "movegen.h"
|
||||
#include "position.h"
|
||||
#include "psqtab.h"
|
||||
#include "thread.h"
|
||||
#include "tt.h"
|
||||
#include "uci.h"
|
||||
@@ -52,7 +51,6 @@ Key Position::exclusion_key() const { return st->key ^ Zobrist::exclusion; }
|
||||
namespace {
|
||||
|
||||
const string PieceToChar(" PNBRQK pnbrqk");
|
||||
Score psq[COLOR_NB][PIECE_TYPE_NB][SQUARE_NB];
|
||||
|
||||
// min_attacker() is a helper function used by see() to locate the least
|
||||
// valuable attacker for the side to move, remove the attacker we just found
|
||||
@@ -130,10 +128,7 @@ std::ostream& operator<<(std::ostream& os, const Position& pos) {
|
||||
|
||||
|
||||
/// Position::init() initializes at startup the various arrays used to compute
|
||||
/// hash keys and the piece square tables. The latter is a two-step operation:
|
||||
/// Firstly, the white halves of the tables are copied from PSQT[] tables.
|
||||
/// Secondly, the black halves of the tables are initialized by flipping and
|
||||
/// changing the sign of the white scores.
|
||||
/// hash keys.
|
||||
|
||||
void Position::init() {
|
||||
|
||||
@@ -160,20 +155,6 @@ void Position::init() {
|
||||
|
||||
Zobrist::side = rng.rand<Key>();
|
||||
Zobrist::exclusion = rng.rand<Key>();
|
||||
|
||||
for (PieceType pt = PAWN; pt <= KING; ++pt)
|
||||
{
|
||||
PieceValue[MG][make_piece(BLACK, pt)] = PieceValue[MG][pt];
|
||||
PieceValue[EG][make_piece(BLACK, pt)] = PieceValue[EG][pt];
|
||||
|
||||
Score v = make_score(PieceValue[MG][pt], PieceValue[EG][pt]);
|
||||
|
||||
for (Square s = SQ_A1; s <= SQ_H8; ++s)
|
||||
{
|
||||
psq[WHITE][pt][ s] = (v + PSQT[pt][s]);
|
||||
psq[BLACK][pt][~s] = -(v + PSQT[pt][s]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -373,7 +354,7 @@ void Position::set_state(StateInfo* si) const {
|
||||
Square s = pop_lsb(&b);
|
||||
Piece pc = piece_on(s);
|
||||
si->key ^= Zobrist::psq[color_of(pc)][type_of(pc)][s];
|
||||
si->psq += psq[color_of(pc)][type_of(pc)][s];
|
||||
si->psq += PSQT::psq[color_of(pc)][type_of(pc)][s];
|
||||
}
|
||||
|
||||
if (si->epSquare != SQ_NONE)
|
||||
@@ -725,7 +706,7 @@ void Position::do_move(Move m, StateInfo& newSt, bool givesCheck) {
|
||||
do_castling<true>(us, from, to, rfrom, rto);
|
||||
|
||||
captured = NO_PIECE_TYPE;
|
||||
st->psq += psq[us][ROOK][rto] - psq[us][ROOK][rfrom];
|
||||
st->psq += PSQT::psq[us][ROOK][rto] - PSQT::psq[us][ROOK][rfrom];
|
||||
k ^= Zobrist::psq[us][ROOK][rfrom] ^ Zobrist::psq[us][ROOK][rto];
|
||||
}
|
||||
|
||||
@@ -764,7 +745,7 @@ void Position::do_move(Move m, StateInfo& newSt, bool givesCheck) {
|
||||
prefetch(thisThread->materialTable[st->materialKey]);
|
||||
|
||||
// Update incremental scores
|
||||
st->psq -= psq[them][captured][capsq];
|
||||
st->psq -= PSQT::psq[them][captured][capsq];
|
||||
|
||||
// Reset rule 50 counter
|
||||
st->rule50 = 0;
|
||||
@@ -820,7 +801,7 @@ void Position::do_move(Move m, StateInfo& newSt, bool givesCheck) {
|
||||
^ Zobrist::psq[us][PAWN][pieceCount[us][PAWN]];
|
||||
|
||||
// Update incremental score
|
||||
st->psq += psq[us][promotion][to] - psq[us][PAWN][to];
|
||||
st->psq += PSQT::psq[us][promotion][to] - PSQT::psq[us][PAWN][to];
|
||||
|
||||
// Update material
|
||||
st->nonPawnMaterial[us] += PieceValue[MG][promotion];
|
||||
@@ -835,7 +816,7 @@ void Position::do_move(Move m, StateInfo& newSt, bool givesCheck) {
|
||||
}
|
||||
|
||||
// Update incremental scores
|
||||
st->psq += psq[us][pt][to] - psq[us][pt][from];
|
||||
st->psq += PSQT::psq[us][pt][to] - PSQT::psq[us][pt][from];
|
||||
|
||||
// Set capture piece
|
||||
st->capturedType = captured;
|
||||
|
||||
Reference in New Issue
Block a user