mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-19 16:46:30 +08:00
Introduce 'follow up' moves
When we have a fail-high of a quiet move, store it in a Followupmoves table indexed by the previous move of the same color (instead of immediate previous move as is in countermoves case). Then use this table for quiet moves ordering in the same way we are already doing with countermoves. These followup moves will be tried just after countermoves and before remaining quiet moves. Passed both short TC LLR: 2.95 (-2.94,2.94) [-1.50,4.50] Total: 10350 W: 1998 L: 1866 D: 6486 And long TC LLR: 2.95 (-2.94,2.94) [0.00,6.00] Total: 14066 W: 2303 L: 2137 D: 9626 bench: 7205153
This commit is contained in:
committed by
unknown
parent
402a7ae151
commit
53ab32ef0b
@@ -71,13 +71,14 @@ namespace {
|
||||
/// ordering is at the current node.
|
||||
|
||||
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats& h,
|
||||
Move* cm, Search::Stack* s) : pos(p), history(h), depth(d) {
|
||||
Move* cm, Move* fm, Search::Stack* s) : pos(p), history(h), depth(d) {
|
||||
|
||||
assert(d > DEPTH_ZERO);
|
||||
|
||||
cur = end = moves;
|
||||
endBadCaptures = moves + MAX_MOVES - 1;
|
||||
countermoves = cm;
|
||||
followupmoves = fm;
|
||||
ss = s;
|
||||
|
||||
if (p.checkers())
|
||||
@@ -230,15 +231,28 @@ void MovePicker::generate_next() {
|
||||
killers[0].move = ss->killers[0];
|
||||
killers[1].move = ss->killers[1];
|
||||
killers[2].move = killers[3].move = MOVE_NONE;
|
||||
killers[4].move = killers[5].move = MOVE_NONE;
|
||||
|
||||
// Be sure countermoves are different from killers
|
||||
for (int i = 0; i < 2; ++i)
|
||||
if (countermoves[i] != cur->move && countermoves[i] != (cur+1)->move)
|
||||
if ( countermoves[i] != (cur+0)->move
|
||||
&& countermoves[i] != (cur+1)->move)
|
||||
(end++)->move = countermoves[i];
|
||||
|
||||
if (countermoves[1] && countermoves[1] == countermoves[0]) // Due to SMP races
|
||||
killers[3].move = MOVE_NONE;
|
||||
|
||||
// Be sure followupmoves are different from killers and countermoves
|
||||
for (int i = 0; i < 2; ++i)
|
||||
if ( followupmoves[i] != (cur+0)->move
|
||||
&& followupmoves[i] != (cur+1)->move
|
||||
&& followupmoves[i] != (cur+2)->move
|
||||
&& followupmoves[i] != (cur+3)->move)
|
||||
(end++)->move = followupmoves[i];
|
||||
|
||||
if (followupmoves[1] && followupmoves[1] == followupmoves[0]) // Due to SMP races
|
||||
(--end)->move = MOVE_NONE;
|
||||
|
||||
return;
|
||||
|
||||
case QUIETS_1_S1:
|
||||
@@ -330,7 +344,9 @@ Move MovePicker::next_move<false>() {
|
||||
&& move != killers[0].move
|
||||
&& move != killers[1].move
|
||||
&& move != killers[2].move
|
||||
&& move != killers[3].move)
|
||||
&& move != killers[3].move
|
||||
&& move != killers[4].move
|
||||
&& move != killers[5].move)
|
||||
return move;
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user