Skip to content

Commit

Permalink
Add followup moves history for move ordering
Browse files Browse the repository at this point in the history
STC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 7955 W: 1538 L: 1378 D: 5039

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 5323 W: 778 L: 642 D: 3903

Bench: 8261839

Resolves #599
  • Loading branch information
locutus2 authored and zamar committed Mar 10, 2016
1 parent e1a7d13 commit a273b6e
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
11 changes: 6 additions & 5 deletions src/movepick.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ namespace {
/// ordering is at the current node.

MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats& h,
const CounterMoveStats& cmh, Move cm, Search::Stack* s)
: pos(p), history(h), counterMoveHistory(&cmh), ss(s), countermove(cm), depth(d) {
const CounterMoveStats& cmh, const CounterMoveStats& fmh, Move cm, Search::Stack* s)
: pos(p), history(h), counterMoveHistory(&cmh), followupMoveHistory(&fmh), ss(s), countermove(cm), depth(d) {

assert(d > DEPTH_ZERO);

Expand All @@ -80,7 +80,7 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats&

MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
const HistoryStats& h, Square s)
: pos(p), history(h), counterMoveHistory(nullptr) {
: pos(p), history(h), counterMoveHistory(nullptr), followupMoveHistory(nullptr) {

assert(d <= DEPTH_ZERO);

Expand All @@ -105,7 +105,7 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
}

MovePicker::MovePicker(const Position& p, Move ttm, const HistoryStats& h, Value th)
: pos(p), history(h), counterMoveHistory(nullptr), threshold(th) {
: pos(p), history(h), counterMoveHistory(nullptr), followupMoveHistory(nullptr), threshold(th) {

assert(!pos.checkers());

Expand Down Expand Up @@ -142,7 +142,8 @@ void MovePicker::score<QUIETS>() {

for (auto& m : *this)
m.value = history[pos.moved_piece(m)][to_sq(m)]
+ (*counterMoveHistory)[pos.moved_piece(m)][to_sq(m)];
+ (*counterMoveHistory)[pos.moved_piece(m)][to_sq(m)]
+ (*followupMoveHistory)[pos.moved_piece(m)][to_sq(m)];
}

template<>
Expand Down
3 changes: 2 additions & 1 deletion src/movepick.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ class MovePicker {

MovePicker(const Position&, Move, Depth, const HistoryStats&, Square);
MovePicker(const Position&, Move, const HistoryStats&, Value);
MovePicker(const Position&, Move, Depth, const HistoryStats&, const CounterMoveStats&, Move, Search::Stack*);
MovePicker(const Position&, Move, Depth, const HistoryStats&, const CounterMoveStats&, const CounterMoveStats&, Move, Search::Stack*);

Move next_move();

Expand All @@ -98,6 +98,7 @@ class MovePicker {
const Position& pos;
const HistoryStats& history;
const CounterMoveStats* counterMoveHistory;
const CounterMoveStats* followupMoveHistory;
Search::Stack* ss;
Move countermove;
Depth depth;
Expand Down
12 changes: 11 additions & 1 deletion src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -870,10 +870,12 @@ namespace {
moves_loop: // When in check search starts from here

Square prevSq = to_sq((ss-1)->currentMove);
Square ownPrevSq = to_sq((ss-2)->currentMove);
Move cm = thisThread->counterMoves[pos.piece_on(prevSq)][prevSq];
const CounterMoveStats& cmh = CounterMoveHistory[pos.piece_on(prevSq)][prevSq];
const CounterMoveStats& fmh = CounterMoveHistory[pos.piece_on(ownPrevSq)][ownPrevSq];

MovePicker mp(pos, ttMove, depth, thisThread->history, cmh, cm, ss);
MovePicker mp(pos, ttMove, depth, thisThread->history, cmh, fmh, cm, ss);
CheckInfo ci(pos);
value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc
improving = ss->staticEval >= (ss-2)->staticEval
Expand Down Expand Up @@ -1442,7 +1444,9 @@ namespace {
Value bonus = Value((depth / ONE_PLY) * (depth / ONE_PLY) + depth / ONE_PLY - 1);

Square prevSq = to_sq((ss-1)->currentMove);
Square ownPrevSq = to_sq((ss-2)->currentMove);
CounterMoveStats& cmh = CounterMoveHistory[pos.piece_on(prevSq)][prevSq];
CounterMoveStats& fmh = CounterMoveHistory[pos.piece_on(ownPrevSq)][ownPrevSq];
Thread* thisThread = pos.this_thread();

thisThread->history.update(pos.moved_piece(move), to_sq(move), bonus);
Expand All @@ -1453,13 +1457,19 @@ namespace {
cmh.update(pos.moved_piece(move), to_sq(move), bonus);
}

if (is_ok((ss-2)->currentMove))
fmh.update(pos.moved_piece(move), to_sq(move), bonus);

// Decrease all the other played quiet moves
for (int i = 0; i < quietsCnt; ++i)
{
thisThread->history.update(pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);

if (is_ok((ss-1)->currentMove))
cmh.update(pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);

if (is_ok((ss-2)->currentMove))
fmh.update(pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);
}

// Extra penalty for a quiet TT move in previous ply when it gets refuted
Expand Down

0 comments on commit a273b6e

Please sign in to comment.