1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

No extra stage for QS recaptures.

remove the QRECAPTURES and QSEARCH_RECAPTURES stages as they can be
incoorporated in QCAPTURES stage with a simple condition on depth.

passed STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 214964 W: 46188 L: 46443 D: 122333
http://tests.stockfishchess.org/tests/view/5a98544b0ebc590297cc8e35

passed LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 14552 W: 2404 L: 2274 D: 9874
http://tests.stockfishchess.org/tests/view/5a9947b20ebc590297cc8e93

Bench: 6361582
This commit is contained in:
Joost VandeVondele 2018-02-27 20:31:13 +01:00 committed by Stéphane Nicolet
parent b87308692a
commit cad300cfab

View file

@ -28,7 +28,7 @@ namespace {
MAIN_SEARCH, CAPTURES_INIT, GOOD_CAPTURES, KILLER0, KILLER1, COUNTERMOVE, QUIET_INIT, QUIET, BAD_CAPTURES, MAIN_SEARCH, CAPTURES_INIT, GOOD_CAPTURES, KILLER0, KILLER1, COUNTERMOVE, QUIET_INIT, QUIET, BAD_CAPTURES,
EVASION, EVASIONS_INIT, ALL_EVASIONS, EVASION, EVASIONS_INIT, ALL_EVASIONS,
PROBCUT, PROBCUT_CAPTURES_INIT, PROBCUT_CAPTURES, PROBCUT, PROBCUT_CAPTURES_INIT, PROBCUT_CAPTURES,
QSEARCH, QCAPTURES_INIT, QCAPTURES, QCHECKS, QSEARCH_RECAPTURES, QRECAPTURES QSEARCH, QCAPTURES_INIT, QCAPTURES, QCHECKS
}; };
// partial_insertion_sort() sorts moves in descending order up to and including // partial_insertion_sort() sorts moves in descending order up to and including
@ -79,24 +79,14 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHist
/// MovePicker constructor for quiescence search /// MovePicker constructor for quiescence search
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHistory* mh, const CapturePieceToHistory* cph, Square s) MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHistory* mh, const CapturePieceToHistory* cph, Square s)
: pos(p), mainHistory(mh), captureHistory(cph), depth(d) { : pos(p), mainHistory(mh), captureHistory(cph), recaptureSquare(s), depth(d) {
assert(d <= DEPTH_ZERO); assert(d <= DEPTH_ZERO);
if (pos.checkers()) stage = pos.checkers() ? EVASION : QSEARCH;
stage = EVASION; ttMove = ttm
&& pos.pseudo_legal(ttm)
else if (d > DEPTH_QS_RECAPTURES) && (depth > DEPTH_QS_RECAPTURES || to_sq(ttm) == recaptureSquare) ? ttm : MOVE_NONE;
stage = QSEARCH;
else
{
stage = QSEARCH_RECAPTURES;
recaptureSquare = s;
return;
}
ttMove = ttm && pos.pseudo_legal(ttm) ? ttm : MOVE_NONE;
stage += (ttMove == MOVE_NONE); stage += (ttMove == MOVE_NONE);
} }
@ -112,7 +102,6 @@ MovePicker::MovePicker(const Position& p, Move ttm, Value th, const CapturePiece
&& pos.pseudo_legal(ttm) && pos.pseudo_legal(ttm)
&& pos.capture(ttm) && pos.capture(ttm)
&& pos.see_ge(ttm, threshold) ? ttm : MOVE_NONE; && pos.see_ge(ttm, threshold) ? ttm : MOVE_NONE;
stage += (ttMove == MOVE_NONE); stage += (ttMove == MOVE_NONE);
} }
@ -163,7 +152,6 @@ Move MovePicker::next_move(bool skipQuiets) {
case CAPTURES_INIT: case CAPTURES_INIT:
case PROBCUT_CAPTURES_INIT: case PROBCUT_CAPTURES_INIT:
case QCAPTURES_INIT: case QCAPTURES_INIT:
case QSEARCH_RECAPTURES:
endBadCaptures = cur = moves; endBadCaptures = cur = moves;
endMoves = generate<CAPTURES>(pos, cur); endMoves = generate<CAPTURES>(pos, cur);
score<CAPTURES>(); score<CAPTURES>();
@ -226,7 +214,6 @@ Move MovePicker::next_move(bool skipQuiets) {
while (cur < endMoves) while (cur < endMoves)
{ {
move = *cur++; move = *cur++;
if ( move != ttMove if ( move != ttMove
&& move != killers[0] && move != killers[0]
&& move != killers[1] && move != killers[1]
@ -272,7 +259,8 @@ Move MovePicker::next_move(bool skipQuiets) {
while (cur < endMoves) while (cur < endMoves)
{ {
move = pick_best(cur++, endMoves); move = pick_best(cur++, endMoves);
if (move != ttMove) if ( move != ttMove
&& (depth > DEPTH_QS_RECAPTURES || to_sq(move) == recaptureSquare))
return move; return move;
} }
if (depth <= DEPTH_QS_NO_CHECKS) if (depth <= DEPTH_QS_NO_CHECKS)
@ -283,19 +271,10 @@ Move MovePicker::next_move(bool skipQuiets) {
/* fallthrough */ /* fallthrough */
case QCHECKS: case QCHECKS:
while (cur < endMoves)
{
move = cur++->move;
if (move != ttMove)
return move;
}
break;
case QRECAPTURES:
while (cur < endMoves) while (cur < endMoves)
{ {
move = *cur++; move = *cur++;
if (to_sq(move) == recaptureSquare) if (move != ttMove)
return move; return move;
} }
break; break;