From: Fabian Fichter Date: Fri, 29 Jan 2021 20:33:17 +0000 (+0100) Subject: Tweak futility pruning for extinction variants X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=ba8fac3e73f1e8c7e9ef93338a43a246d2610512;p=fairystockfish.git Tweak futility pruning for extinction variants atomic STC LLR: 2.96 (-2.94,2.94) [0.00,10.00] Total: 2994 W: 1118 L: 999 D: 877 http://www.variantfishtest.org:6543/tests/view/6014099b6e23db669974e628 atomic LTC LLR: 2.97 (-2.94,2.94) [0.00,10.00] Total: 4099 W: 1416 L: 1287 D: 1396 http://www.variantfishtest.org:6543/tests/view/601425556e23db669974e63a extinction STC LLR: 2.96 (-2.94,2.94) [0.00,10.00] Total: 496 W: 279 L: 177 D: 40 http://www.variantfishtest.org:6543/tests/view/601409d26e23db669974e62f extinction LTC LLR: 2.97 (-2.94,2.94) [0.00,10.00] Total: 794 W: 410 L: 305 D: 79 http://www.variantfishtest.org:6543/tests/view/601445566e23db669974e643 kinglet STC LLR: 2.95 (-2.94,2.94) [0.00,10.00] Total: 1223 W: 587 L: 479 D: 157 http://www.variantfishtest.org:6543/tests/view/601441fc6e23db669974e641 kinglet LTC LLR: 2.95 (-2.94,2.94) [0.00,10.00] Total: 994 W: 480 L: 376 D: 138 http://www.variantfishtest.org:6543/tests/view/601445906e23db669974e645 --- diff --git a/src/position.h b/src/position.h index 3f65599..0cc9915 100644 --- a/src/position.h +++ b/src/position.h @@ -173,6 +173,7 @@ public: Value extinction_value(int ply = 0) const; bool extinction_claim() const; const std::set& extinction_piece_types() const; + bool extinction_single_piece() const; int extinction_piece_count() const; int extinction_opponent_piece_count() const; PieceType capture_the_flag_piece() const; @@ -754,6 +755,14 @@ inline const std::set& Position::extinction_piece_types() const { return var->extinctionPieceTypes; } +inline bool Position::extinction_single_piece() const { + assert(var != nullptr); + return var->extinctionValue == -VALUE_MATE + && std::any_of(var->extinctionPieceTypes.begin(), + var->extinctionPieceTypes.end(), + [](PieceType pt) { return pt != ALL_PIECES; }); +} + inline int Position::extinction_piece_count() const { assert(var != nullptr); return var->extinctionPieceCount; diff --git a/src/search.cpp b/src/search.cpp index 6c5914f..f5bfcf4 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -920,11 +920,8 @@ namespace { // Step 8. Futility pruning: child node (~50 Elo) if ( !PvNode && depth < 8 - && !( pos.extinction_value() == -VALUE_MATE - && !pos.blast_on_capture() - && pos.extinction_piece_types().find(ALL_PIECES) == pos.extinction_piece_types().end()) && !(pos.capture_the_flag_piece() && !pos.checking_permitted()) - && eval - futility_margin(depth, improving) * (1 + pos.check_counting() + 2 * pos.must_capture()) >= beta + && eval - futility_margin(depth, improving) * (1 + pos.check_counting() + 2 * pos.must_capture() + pos.extinction_single_piece()) >= beta && eval < VALUE_KNOWN_WIN) // Do not return unproven wins return eval;