mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 17:19:36 +00:00
Add followup moves history for move ordering
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
This commit is contained in:
parent
e1a7d135b2
commit
a273b6ef8c
3 changed files with 19 additions and 7 deletions
|
@ -68,8 +68,8 @@ namespace {
|
||||||
/// ordering is at the current node.
|
/// ordering is at the current node.
|
||||||
|
|
||||||
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats& h,
|
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats& h,
|
||||||
const CounterMoveStats& cmh, Move cm, Search::Stack* s)
|
const CounterMoveStats& cmh, const CounterMoveStats& fmh, Move cm, Search::Stack* s)
|
||||||
: pos(p), history(h), counterMoveHistory(&cmh), ss(s), countermove(cm), depth(d) {
|
: pos(p), history(h), counterMoveHistory(&cmh), followupMoveHistory(&fmh), ss(s), countermove(cm), depth(d) {
|
||||||
|
|
||||||
assert(d > DEPTH_ZERO);
|
assert(d > DEPTH_ZERO);
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats&
|
||||||
|
|
||||||
MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
|
MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
|
||||||
const HistoryStats& h, Square s)
|
const HistoryStats& h, Square s)
|
||||||
: pos(p), history(h), counterMoveHistory(nullptr) {
|
: pos(p), history(h), counterMoveHistory(nullptr), followupMoveHistory(nullptr) {
|
||||||
|
|
||||||
assert(d <= DEPTH_ZERO);
|
assert(d <= DEPTH_ZERO);
|
||||||
|
|
||||||
|
@ -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)
|
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());
|
assert(!pos.checkers());
|
||||||
|
|
||||||
|
@ -142,7 +142,8 @@ void MovePicker::score<QUIETS>() {
|
||||||
|
|
||||||
for (auto& m : *this)
|
for (auto& m : *this)
|
||||||
m.value = history[pos.moved_piece(m)][to_sq(m)]
|
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<>
|
template<>
|
||||||
|
|
|
@ -85,7 +85,7 @@ public:
|
||||||
|
|
||||||
MovePicker(const Position&, Move, Depth, const HistoryStats&, Square);
|
MovePicker(const Position&, Move, Depth, const HistoryStats&, Square);
|
||||||
MovePicker(const Position&, Move, const HistoryStats&, Value);
|
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();
|
Move next_move();
|
||||||
|
|
||||||
|
@ -98,6 +98,7 @@ private:
|
||||||
const Position& pos;
|
const Position& pos;
|
||||||
const HistoryStats& history;
|
const HistoryStats& history;
|
||||||
const CounterMoveStats* counterMoveHistory;
|
const CounterMoveStats* counterMoveHistory;
|
||||||
|
const CounterMoveStats* followupMoveHistory;
|
||||||
Search::Stack* ss;
|
Search::Stack* ss;
|
||||||
Move countermove;
|
Move countermove;
|
||||||
Depth depth;
|
Depth depth;
|
||||||
|
|
|
@ -870,10 +870,12 @@ namespace {
|
||||||
moves_loop: // When in check search starts from here
|
moves_loop: // When in check search starts from here
|
||||||
|
|
||||||
Square prevSq = to_sq((ss-1)->currentMove);
|
Square prevSq = to_sq((ss-1)->currentMove);
|
||||||
|
Square ownPrevSq = to_sq((ss-2)->currentMove);
|
||||||
Move cm = thisThread->counterMoves[pos.piece_on(prevSq)][prevSq];
|
Move cm = thisThread->counterMoves[pos.piece_on(prevSq)][prevSq];
|
||||||
const CounterMoveStats& cmh = CounterMoveHistory[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);
|
CheckInfo ci(pos);
|
||||||
value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc
|
value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc
|
||||||
improving = ss->staticEval >= (ss-2)->staticEval
|
improving = ss->staticEval >= (ss-2)->staticEval
|
||||||
|
@ -1442,7 +1444,9 @@ moves_loop: // When in check search starts from here
|
||||||
Value bonus = Value((depth / ONE_PLY) * (depth / ONE_PLY) + depth / ONE_PLY - 1);
|
Value bonus = Value((depth / ONE_PLY) * (depth / ONE_PLY) + depth / ONE_PLY - 1);
|
||||||
|
|
||||||
Square prevSq = to_sq((ss-1)->currentMove);
|
Square prevSq = to_sq((ss-1)->currentMove);
|
||||||
|
Square ownPrevSq = to_sq((ss-2)->currentMove);
|
||||||
CounterMoveStats& cmh = CounterMoveHistory[pos.piece_on(prevSq)][prevSq];
|
CounterMoveStats& cmh = CounterMoveHistory[pos.piece_on(prevSq)][prevSq];
|
||||||
|
CounterMoveStats& fmh = CounterMoveHistory[pos.piece_on(ownPrevSq)][ownPrevSq];
|
||||||
Thread* thisThread = pos.this_thread();
|
Thread* thisThread = pos.this_thread();
|
||||||
|
|
||||||
thisThread->history.update(pos.moved_piece(move), to_sq(move), bonus);
|
thisThread->history.update(pos.moved_piece(move), to_sq(move), bonus);
|
||||||
|
@ -1453,6 +1457,9 @@ moves_loop: // When in check search starts from here
|
||||||
cmh.update(pos.moved_piece(move), to_sq(move), bonus);
|
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
|
// Decrease all the other played quiet moves
|
||||||
for (int i = 0; i < quietsCnt; ++i)
|
for (int i = 0; i < quietsCnt; ++i)
|
||||||
{
|
{
|
||||||
|
@ -1460,6 +1467,9 @@ moves_loop: // When in check search starts from here
|
||||||
|
|
||||||
if (is_ok((ss-1)->currentMove))
|
if (is_ok((ss-1)->currentMove))
|
||||||
cmh.update(pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);
|
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
|
// Extra penalty for a quiet TT move in previous ply when it gets refuted
|
||||||
|
|
Loading…
Add table
Reference in a new issue