From 12461996a5bb6d4c07d4b7e464924eaaa406b01d Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 1 Nov 2009 22:09:53 +0100 Subject: [PATCH] Remove SEE optimizations Don't seem to help, perhaps because we return an approximate SEE score instead of the real negative score so that we have some bad capture or evasion sub-optimal ordering that compensates the speed up. Anyhow after 999 games at 1+0 Mod vs Orig +240 =514 -245 -2 ELO So almost no harm to remove and make the code simpler. Signed-off-by: Marco Costalba --- src/evaluate.cpp | 4 ++-- src/position.cpp | 34 ++++------------------------------ src/position.h | 2 +- 3 files changed, 7 insertions(+), 33 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 82edeec8..fd0ef5b2 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -1171,8 +1171,8 @@ namespace { Square b8 = relative_square(us, (square_file(s) == FILE_A) ? SQ_B8 : SQ_G8); if ( pos.piece_on(b6) == piece_of_color_and_type(opposite_color(us), PAWN) - && pos.see(s, b6, false) < 0 - && pos.see(s, b8, false) < 0) + && pos.see(s, b6) < 0 + && pos.see(s, b8) < 0) { ei.mgValue -= Sign[us] * TrappedBishopA7H7Penalty; ei.egValue -= Sign[us] * TrappedBishopA7H7Penalty; diff --git a/src/position.cpp b/src/position.cpp index 1fe723ae..4a0075cb 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1300,13 +1300,13 @@ void Position::undo_null_move() { int Position::see(Square to) const { assert(square_is_ok(to)); - return see(SQ_NONE, to, false); + return see(SQ_NONE, to); } int Position::see(Move m) const { assert(move_is_ok(m)); - return see(move_from(m), move_to(m), false); + return see(move_from(m), move_to(m)); } int Position::see_sign(Move m) const { @@ -1322,10 +1322,10 @@ int Position::see_sign(Move m) const { && type_of_piece_on(from) != KING) return 1; - return see(from, to, true); + return see(from, to); } -int Position::see(Square from, Square to, bool shortcut) const { +int Position::see(Square from, Square to) const { // Material values static const int seeValues[18] = { @@ -1337,7 +1337,6 @@ int Position::see(Square from, Square to, bool shortcut) const { }; Bitboard attackers, stmAttackers, b; - int pieceDiff = 0; assert(!shortcut || from != SQ_NONE); assert(square_is_ok(from) || from == SQ_NONE); @@ -1356,22 +1355,6 @@ int Position::see(Square from, Square to, bool shortcut) const { if (type_of_piece(piece) == KING) return seeValues[capture]; - // If captured piece is defended by enemy pawns or knights then SEE is negative - // when captured piece value does not compensate the lost of capturing one. - if (shortcut) - { - pieceDiff = seeValues[piece] - seeValues[capture]; - - if ( pieceDiff > seeValues[PAWN] - &&(attacks_from(to, us) & pieces(PAWN, them))) - return -(pieceDiff - seeValues[PAWN] / 2); - - if ( pieceDiff > seeValues[KNIGHT] - && pieces(KNIGHT, them) - &&(pieces(KNIGHT, them) & attacks_from(to))) - return -(pieceDiff - seeValues[KNIGHT] / 2); - } - // Handle en passant moves if (st->epSquare == to && type_of_piece_on(from) == PAWN) { @@ -1442,15 +1425,6 @@ int Position::see(Square from, Square to, bool shortcut) const { for (pt = PAWN; !(stmAttackers & pieces(pt)); pt++) assert(pt < KING); - // If captured piece is defended by an enemy piece then SEE is negative - // if captured piece value does not compensate the lost of capturing one. - if (pieceDiff > seeValues[pt]) - { - assert(shortcut); - return -(pieceDiff - seeValues[pt] / 2); - } else - pieceDiff = 0; // Only first cycle - // Remove the attacker we just found from the 'attackers' bitboard, // and scan for new X-ray attacks behind the attacker. b = stmAttackers & pieces(pt); diff --git a/src/position.h b/src/position.h index a55d1770..f2f517e2 100644 --- a/src/position.h +++ b/src/position.h @@ -229,7 +229,7 @@ public: void undo_null_move(); // Static exchange evaluation - int see(Square from, Square to, bool shortcut) const; + int see(Square from, Square to) const; int see(Move m) const; int see(Square to) const; int see_sign(Move m) const; -- 2.39.2