From: Fabian Fichter Date: Sun, 31 May 2020 21:57:14 +0000 (+0200) Subject: Tweak fairy piece PSQT X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=e214b9d1b452350d9c03613c533264f4836f05ea;p=fairystockfish.git Tweak fairy piece PSQT makruk STC LLR: 2.95 (-2.94,2.94) [0.00,10.00] Total: 3823 W: 362 L: 289 D: 3172 http://www.variantfishtest.org:6543/tests/view/5ed10d906e23db36d55f2c6b janggi LLR: 2.97 (-2.94,2.94) [0.00,10.00] Total: 1166 W: 619 L: 503 D: 44 xiangqi Total: 1000 W: 291 L: 287 D: 422 shogi Total: 1000 W: 489 L: 482 D: 29 --- diff --git a/src/psqt.cpp b/src/psqt.cpp index e653344..6b7fe5f 100644 --- a/src/psqt.cpp +++ b/src/psqt.cpp @@ -141,14 +141,16 @@ void init(const Variant* v) { // Scale slider piece values with board size const PieceInfo* pi = pieceMap.find(pt)->second; - if (pi->sliderQuiet.size() || pi->sliderCapture.size()) + bool isSlider = pi->sliderQuiet.size() || pi->sliderCapture.size() || pi->hopperQuiet.size() || pi->hopperCapture.size(); + bool isPawn = !isSlider && pi->stepsQuiet.size() && !std::any_of(pi->stepsQuiet.begin(), pi->stepsQuiet.end(), [](Direction d) { return d < SOUTH / 2; }); + if (isSlider) { constexpr int lc = 5; constexpr int rm = 5; constexpr int r0 = rm + RANK_8; int r1 = rm + (v->maxRank + v->maxFile) / 2; int leaper = pi->stepsQuiet.size() + pi->stepsCapture.size(); - int slider = pi->sliderQuiet.size() + pi->sliderCapture.size(); + int slider = pi->sliderQuiet.size() + pi->sliderCapture.size() + pi->hopperQuiet.size() + pi->hopperCapture.size(); score = make_score(mg_value(score) * (lc * leaper + r1 * slider) / (lc * leaper + r0 * slider), eg_value(score) * (lc * leaper + r1 * slider) / (lc * leaper + r0 * slider)); } @@ -192,7 +194,9 @@ void init(const Variant* v) { : pt == KING ? KingBonus[std::min(r, RANK_8)][std::min(f, FILE_D)] * (1 + v->capturesToHand) : pt <= QUEEN ? Bonus[pc][std::min(r, RANK_8)][std::min(f, FILE_D)] : pt == HORSE ? Bonus[KNIGHT][std::min(r, RANK_8)][std::min(f, FILE_D)] - : make_score(5, 5) * (2 * f + std::max(std::min(r, Rank(v->maxRank - r)), RANK_1) - 8)); + : isSlider ? make_score(5, 5) * (2 * f + std::max(std::min(r, Rank(v->maxRank - r)), RANK_1) - v->maxFile - 1) + : isPawn ? make_score(5, 5) * (2 * f - v->maxFile) + : make_score(10, 10) * (f + std::max(std::min(r, Rank(v->maxRank - r)), RANK_1) - v->maxFile / 2)); if (pt == SOLDIER && r < v->soldierPromotionRank) psq[pc][s] -= score * (v->soldierPromotionRank - r) / (4 + f); psq[~pc][rank_of(s) <= v->maxRank ? relative_square(BLACK, s, v->maxRank) : s] = -psq[pc][s];