From 839509dfa6fce68a1fa1103feb25f0f799bfe0da Mon Sep 17 00:00:00 2001 From: Fabian Fichter Date: Tue, 29 Dec 2020 15:06:05 +0100 Subject: [PATCH] Introduce variant piece values --- src/movepick.cpp | 4 ++-- src/psqt.cpp | 5 +++++ src/types.h | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/movepick.cpp b/src/movepick.cpp index dbf61ee0a..0d63c7862 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -104,7 +104,7 @@ void MovePicker::score() { for (auto& m : *this) if (Type == CAPTURES) - m.value = int(PieceValue[MG][pos.piece_on(to_sq(m))]) * 6 + m.value = int(VariantPieceValue[MG][pos.piece_on(to_sq(m))]) * 6 + (*captureHistory)[pos.moved_piece(m)][to_sq(m)][type_of(pos.piece_on(to_sq(m)))]; else if (Type == QUIETS) @@ -118,7 +118,7 @@ void MovePicker::score() { else // Type == EVASIONS { if (pos.capture(m)) - m.value = PieceValue[MG][pos.piece_on(to_sq(m))] + m.value = VariantPieceValue[MG][pos.piece_on(to_sq(m))] - Value(type_of(pos.moved_piece(m))); else m.value = (*mainHistory)[pos.side_to_move()][from_to(m)] diff --git a/src/psqt.cpp b/src/psqt.cpp index 0dac6005e..be6e47bca 100644 --- a/src/psqt.cpp +++ b/src/psqt.cpp @@ -25,6 +25,8 @@ #include "variant.h" #include "misc.h" +Value VariantPieceValue[PHASE_NB][PIECE_NB]; + namespace PSQT { #define S(mg, eg) make_score(mg, eg) @@ -177,6 +179,9 @@ void init(const Variant* v) { && v->extinctionPieceTypes.find(ALL_PIECES) != v->extinctionPieceTypes.end()) score = -make_score(mg_value(score) / 8, eg_value(score) / 8 / (1 + !pi->sliderCapture.size())); + VariantPieceValue[MG][pc] = VariantPieceValue[MG][~pc] = mg_value(score); + VariantPieceValue[EG][pc] = VariantPieceValue[EG][~pc] = eg_value(score); + // Determine pawn rank std::istringstream ss(v->startFen); unsigned char token; diff --git a/src/types.h b/src/types.h index 5f50a5123..afcfdb8c4 100644 --- a/src/types.h +++ b/src/types.h @@ -470,6 +470,9 @@ constexpr Value PieceValue[PHASE_NB][PIECE_NB] = { static_assert( PieceValue[MG][PIECE_TYPE_NB + 1] == PawnValueMg && PieceValue[EG][PIECE_TYPE_NB + 1] == PawnValueEg, "PieceValue array broken"); +extern Value VariantPieceValue[PHASE_NB][PIECE_NB]; + + typedef int Depth; enum : int {