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

Use extendable instead of depth extension

We can have depth(0) also in problematic cases
according to how extensions are tweaked by the user.

In any case we don't want to prune these moves.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2008-11-24 17:50:54 +01:00
parent 8a0dd93c56
commit ee9f650242

View file

@ -245,7 +245,7 @@ namespace {
void sp_update_pv(SearchStack *pss, SearchStack ss[], int ply);
bool connected_moves(const Position &pos, Move m1, Move m2);
bool move_is_killer(Move m, const SearchStack& ss);
Depth extension(const Position &pos, Move m, bool pvNode, bool check, bool singleReply, bool mateThreat);
Depth extension(const Position &pos, Move m, bool pvNode, bool check, bool singleReply, bool mateThreat, bool* extendable);
bool ok_to_do_nullmove(const Position &pos);
bool ok_to_prune(const Position &pos, Move m, Move threat, Depth d);
bool ok_to_use_TT(const TTEntry* tte, Depth depth, Value beta, int ply);
@ -778,7 +778,8 @@ namespace {
<< " currmovenumber " << i + 1 << std::endl;
// Decide search depth for this move
ext = extension(pos, move, true, pos.move_is_check(move), false, false);
bool dummy;
ext = extension(pos, move, true, pos.move_is_check(move), false, false, &dummy);
newDepth = (Iteration - 2) * OnePly + ext + InitialDepth;
// Make the move, and search it
@ -978,7 +979,8 @@ namespace {
ss[ply].currentMoveCaptureValue = Value(0);
// Decide the new search depth
Depth ext = extension(pos, move, true, moveIsCheck, singleReply, mateThreat);
bool extendable;
Depth ext = extension(pos, move, true, moveIsCheck, singleReply, mateThreat, &extendable);
Depth newDepth = depth - OnePly + ext;
// Make and search the move
@ -992,7 +994,7 @@ namespace {
// Try to reduce non-pv search depth by one ply if move seems not problematic,
// if the move fails high will be re-searched at full depth.
if ( depth >= 2*OnePly
&& ext == Depth(0)
&& !extendable
&& moveCount >= LMRPVMoves
&& !moveIsCapture
&& !move_promotion(move)
@ -1225,12 +1227,13 @@ namespace {
movesSearched[moveCount++] = ss[ply].currentMove = move;
// Decide the new search depth
Depth ext = extension(pos, move, false, moveIsCheck, singleReply, mateThreat);
bool extendable;
Depth ext = extension(pos, move, false, moveIsCheck, singleReply, mateThreat, &extendable);
Depth newDepth = depth - OnePly + ext;
// Futility pruning
if ( useFutilityPruning
&& ext == Depth(0)
&& !extendable
&& !moveIsCapture
&& !moveIsPassedPawnPush
&& !move_promotion(move))
@ -1261,7 +1264,7 @@ namespace {
// Try to reduce non-pv search depth by one ply if move seems not problematic,
// if the move fails high will be re-searched at full depth.
if ( depth >= 2*OnePly
&& ext == Depth(0)
&& !extendable
&& moveCount >= LMRNonPVMoves
&& !moveIsCapture
&& !move_promotion(move)
@ -1515,12 +1518,13 @@ namespace {
ss[sp->ply].currentMove = move;
// Decide the new search depth.
Depth ext = extension(pos, move, false, moveIsCheck, false, false);
bool extendable;
Depth ext = extension(pos, move, false, moveIsCheck, false, false, &extendable);
Depth newDepth = sp->depth - OnePly + ext;
// Prune?
if ( useFutilityPruning
&& ext == Depth(0)
&& !extendable
&& !moveIsCapture
&& !moveIsPassedPawnPush
&& !move_promotion(move)
@ -1534,7 +1538,7 @@ namespace {
// Try to reduce non-pv search depth by one ply if move seems not problematic,
// if the move fails high will be re-searched at full depth.
if ( ext == Depth(0)
if ( !extendable
&& moveCount >= LMRNonPVMoves
&& !moveIsCapture
&& !moveIsPassedPawnPush
@ -1632,7 +1636,8 @@ namespace {
ss[sp->ply].currentMove = move;
// Decide the new search depth.
Depth ext = extension(pos, move, true, moveIsCheck, false, false);
bool extendable;
Depth ext = extension(pos, move, true, moveIsCheck, false, false, &extendable);
Depth newDepth = sp->depth - OnePly + ext;
// Make and search the move.
@ -1641,7 +1646,7 @@ namespace {
// Try to reduce non-pv search depth by one ply if move seems not problematic,
// if the move fails high will be re-searched at full depth.
if ( ext == Depth(0)
if ( !extendable
&& moveCount >= LMRPVMoves
&& !moveIsCapture
&& !moveIsPassedPawnPush
@ -1923,7 +1928,6 @@ namespace {
NodesSincePoll = 0;
}
}
ss[ply].pv[ply] = ss[ply].pv[ply+1] = ss[ply].currentMove = MOVE_NONE;
ss[ply+2].mateKiller = MOVE_NONE;
ss[ply].threatMove = MOVE_NONE;
@ -2052,9 +2056,10 @@ namespace {
// particular) are searched with bigger depth than ordinary moves.
Depth extension(const Position &pos, Move m, bool pvNode,
bool check, bool singleReply, bool mateThreat) {
bool check, bool singleReply, bool mateThreat, bool* extendable) {
Depth result = Depth(0);
*extendable = check || singleReply || mateThreat;
if (check)
result += CheckExtension[pvNode];
@ -2062,26 +2067,37 @@ namespace {
if (singleReply)
result += SingleReplyExtension[pvNode];
if (pos.move_is_pawn_push_to_7th(m))
result += PawnPushTo7thExtension[pvNode];
if (pos.move_is_passed_pawn_push(m))
result += PassedPawnExtension[pvNode];
if (mateThreat)
result += MateThreatExtension[pvNode];
if (pos.move_is_pawn_push_to_7th(m))
{
result += PawnPushTo7thExtension[pvNode];
*extendable = true;
}
if (pos.move_is_passed_pawn_push(m))
{
result += PassedPawnExtension[pvNode];
*extendable = true;
}
if ( pos.midgame_value_of_piece_on(move_to(m)) >= RookValueMidgame
&& ( pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK)
- pos.midgame_value_of_piece_on(move_to(m)) == Value(0))
&& !move_promotion(m))
{
result += PawnEndgameExtension[pvNode];
*extendable = true;
}
if ( pvNode
&& pos.move_is_capture(m)
&& pos.type_of_piece_on(move_to(m)) != PAWN
&& pos.see(m) >= 0)
{
result += OnePly/2;
*extendable = true;
}
return Min(result, OnePly);
}