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
Value extinction_value(int ply = 0) const;
bool extinction_claim() const;
const std::set<PieceType>& 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;
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;
// 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;