]> git.sesse.net Git - stockfish/commitdiff
Retire KBBKN endgame
authorMarco Costalba <mcostalba@gmail.com>
Sun, 12 Jan 2014 21:32:41 +0000 (22:32 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 12 Jan 2014 21:32:41 +0000 (22:32 +0100)
As pointed out by Joona, Lucas and otehr people in
the forum, this endgame is not a known, there are many
positions where it takes more than 50 moves to claim the
win and becasue exact rules is not possible better to
retire and allow the search to workout the endgame for us.

bench: 8502826

src/endgame.cpp
src/endgame.h

index 869a36d76ceb5d0358765e7dd89ef639f240f6f6..85419941982c9bb77fec58098cbf94a70a281cb9 100644 (file)
@@ -118,7 +118,6 @@ Endgames::Endgames() {
   add<KRKN>("KRKN");
   add<KQKP>("KQKP");
   add<KQKR>("KQKR");
   add<KRKN>("KRKN");
   add<KQKP>("KQKP");
   add<KQKR>("KQKR");
-  add<KBBKN>("KBBKN");
 
   add<KNPK>("KNPK");
   add<KNPKB>("KNPKB");
 
   add<KNPK>("KNPK");
   add<KNPKB>("KNPKB");
@@ -348,29 +347,6 @@ Value Endgame<KQKR>::operator()(const Position& pos) const {
 }
 
 
 }
 
 
-/// KBB vs KN. This is almost always a win. We try to push the enemy king to a corner
-/// and away from his knight. For a reference of this difficult endgame see:
-/// en.wikipedia.org/wiki/Chess_endgame#Effect_of_tablebases_on_endgame_theory
-
-template<>
-Value Endgame<KBBKN>::operator()(const Position& pos) const {
-
-  assert(verify_material(pos, strongSide, 2 * BishopValueMg, 0));
-  assert(verify_material(pos, weakSide, KnightValueMg, 0));
-
-  Square winnerKSq = pos.king_square(strongSide);
-  Square loserKSq = pos.king_square(weakSide);
-  Square knightSq = pos.list<KNIGHT>(weakSide)[0];
-
-  Value result =  VALUE_KNOWN_WIN
-                + PushToCorners[loserKSq]
-                + PushClose[square_distance(winnerKSq, loserKSq)]
-                + PushAway[square_distance(loserKSq, knightSq)];
-
-  return strongSide == pos.side_to_move() ? result : -result;
-}
-
-
 /// Some cases of trivial draws
 template<> Value Endgame<KNNK>::operator()(const Position&) const { return VALUE_DRAW; }
 template<> Value Endgame<KmmKm>::operator()(const Position&) const { return VALUE_DRAW; }
 /// Some cases of trivial draws
 template<> Value Endgame<KNNK>::operator()(const Position&) const { return VALUE_DRAW; }
 template<> Value Endgame<KmmKm>::operator()(const Position&) const { return VALUE_DRAW; }
index 681b379f6341c74f5a98c897b613bd96f71ada31..f6c314276ba84b1bbc003cc05dc96072d55e3c38 100644 (file)
@@ -42,7 +42,6 @@ enum EndgameType {
   KRKN,  // KR vs KN
   KQKP,  // KQ vs KP
   KQKR,  // KQ vs KR
   KRKN,  // KR vs KN
   KQKP,  // KQ vs KP
   KQKR,  // KQ vs KR
-  KBBKN, // KBB vs KN
   KmmKm, // K and two minors vs K and one or two minors
 
 
   KmmKm, // K and two minors vs K and one or two minors