Skip to content

Commit

Permalink
Replace MVV/LVA by MVV for good captures
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Stefano80 authored and zamar committed Apr 28, 2015
1 parent b7063ef commit cc54a91
Showing 1 changed file with 3 additions and 11 deletions.
14 changes: 3 additions & 11 deletions src/movepick.cpp
Expand Up @@ -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<CAPTURES>() {
// 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
Expand All @@ -148,15 +148,7 @@ void MovePicker::score<CAPTURES>() {
// 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<>
Expand Down

2 comments on commit cc54a91

@DU-jdto
Copy link

@DU-jdto DU-jdto commented on cc54a91 May 2, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have to wonder if the main difference this makes is that it no longer handles enpassant and promotions. Moves are generated starting with the lowest value pieces and ending with the highest value pieces, so LVA may be implied by the stable sort implied by the use of std::max_element.

EDIT: Actually, never mind.

@DU-jdto
Copy link

@DU-jdto DU-jdto commented on cc54a91 May 8, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since it seems at least one person has been misled by my previous comment: I was wrong. The sorting is not stable.

Please sign in to comment.