From cc54a91ca508e68bf84715a50f84c79f66b8f109 Mon Sep 17 00:00:00 2001 From: Stefano80 Date: Tue, 28 Apr 2015 22:06:18 +0100 Subject: [PATCH 1/1] Replace MVV/LVA by MVV for good captures Passed STC LLR: 3.71 (-2.94,2.94) [-3.00,1.00] Total: 64363 W: 12299 L: 12214 D: 39850 and LTC LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 69976 W: 11056 L: 11011 D: 47909 Bench: 8012532 Resolves #340 --- src/movepick.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/movepick.cpp b/src/movepick.cpp index 190a30f8..9656e5e6 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -134,10 +134,10 @@ MovePicker::MovePicker(const Position& p, Move ttm, const HistoryStats& h, const /// highest values will be picked first. template<> void MovePicker::score() { - // Winning and equal captures in the main search are ordered by MVV/LVA. + // Winning and equal captures in the main search are ordered by MVV. // Suprisingly, this appears to perform slightly better than SEE based // move ordering. The reason is probably that in a position with a winning - // capture, capturing a more valuable (but sufficiently defended) piece + // capture, capturing a valuable (but sufficiently defended) piece // first usually doesn't hurt. The opponent will have to recapture, and // the hanging piece will still be hanging (except in the unusual cases // where it is possible to recapture with the hanging piece). Exchanging @@ -148,15 +148,7 @@ void MovePicker::score() { // has been picked up in pick_move_from_list(). This way we save some SEE // calls in case we get a cutoff. for (auto& m : *this) - if (type_of(m) == ENPASSANT) - m.value = PieceValue[MG][PAWN] - Value(PAWN); - - else if (type_of(m) == PROMOTION) - m.value = PieceValue[MG][pos.piece_on(to_sq(m))] - Value(PAWN) - + PieceValue[MG][promotion_type(m)] - PieceValue[MG][PAWN]; - else - m.value = PieceValue[MG][pos.piece_on(to_sq(m))] - - Value(type_of(pos.moved_piece(m))); + m.value = Value(int(pos.piece_on(to_sq(m)))); } template<> -- 2.39.2