X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmovepick.cpp;h=4971b304ba0c12f550151564ba0fe5c038c5c61c;hp=3e90750343919224a273a4742a70f93f9d42b9c8;hb=ace8e951d70c2986a0af83effcc0d2b2312d29e3;hpb=969982406ce85e38b88d15768ae2d3ee31fe82bb diff --git a/src/movepick.cpp b/src/movepick.cpp index 3e907503..4971b304 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -142,16 +142,20 @@ template<> void MovePicker::score() { const HistoryStats& history = pos.this_thread()->history; + const FromToStats& fromTo = pos.this_thread()->fromTo; const CounterMoveStats* cm = (ss-1)->counterMoves; const CounterMoveStats* fm = (ss-2)->counterMoves; const CounterMoveStats* f2 = (ss-4)->counterMoves; + Color c = pos.side_to_move(); + for (auto& m : *this) m.value = history[pos.moved_piece(m)][to_sq(m)] + (cm ? (*cm)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO) + (fm ? (*fm)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO) - + (f2 ? (*f2)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO); + + (f2 ? (*f2)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO) + + fromTo.get(c, m); } template<> @@ -160,6 +164,8 @@ void MovePicker::score() { // by history value, then bad captures and quiet moves with a negative SEE ordered // by SEE value. const HistoryStats& history = pos.this_thread()->history; + const FromToStats& fromTo = pos.this_thread()->fromTo; + Color c = pos.side_to_move(); Value see; for (auto& m : *this) @@ -170,7 +176,7 @@ void MovePicker::score() { m.value = PieceValue[MG][pos.piece_on(to_sq(m))] - Value(type_of(pos.moved_piece(m))) + HistoryStats::Max; else - m.value = history[pos.moved_piece(m)][to_sq(m)]; + m.value = history[pos.moved_piece(m)][to_sq(m)] + fromTo.get(c, m); } @@ -237,6 +243,11 @@ void MovePicker::generate_next_stage() { } } +int MovePicker::see_sign() const +{ + return stage == GOOD_CAPTURES ? 1 + : stage == BAD_CAPTURES ? -1 : 0; +} /// next_move() is the most important method of the MovePicker class. It returns /// a new pseudo legal move every time it is called, until there are no more moves