mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Retire quick_evaluate()
No change in functionality signature The only functional change is that when we reach PLY_MAX, we now return VALUE_DRAW instead of evaluating position. But we reach PLY_MAX only when position is dead drawn and transposition table is filled with draw scores, so this shouldn't matter at all. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
d457594197
commit
000a975eaf
3 changed files with 17 additions and 41 deletions
|
@ -436,21 +436,6 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) {
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
/// quick_evaluate() does a very approximate evaluation of the current position.
|
|
||||||
/// It currently considers only material and piece square table scores. Perhaps
|
|
||||||
/// we should add scores from the pawn and material hash tables?
|
|
||||||
|
|
||||||
Value quick_evaluate(const Position &pos) {
|
|
||||||
|
|
||||||
assert(pos.is_ok());
|
|
||||||
|
|
||||||
static const ScaleFactor sf[2] = {SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL};
|
|
||||||
|
|
||||||
Value v = scale_by_game_phase(pos.value(), MaterialInfoTable::game_phase(pos), sf);
|
|
||||||
return (pos.side_to_move() == WHITE ? v : -v);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// init_eval() initializes various tables used by the evaluation function
|
/// init_eval() initializes various tables used by the evaluation function
|
||||||
|
|
||||||
void init_eval(int threads) {
|
void init_eval(int threads) {
|
||||||
|
|
|
@ -104,7 +104,6 @@ struct EvalInfo {
|
||||||
////
|
////
|
||||||
|
|
||||||
extern Value evaluate(const Position& pos, EvalInfo& ei, int threadID);
|
extern Value evaluate(const Position& pos, EvalInfo& ei, int threadID);
|
||||||
extern Value quick_evaluate(const Position& pos);
|
|
||||||
extern void init_eval(int threads);
|
extern void init_eval(int threads);
|
||||||
extern void quit_eval();
|
extern void quit_eval();
|
||||||
extern void read_weights(Color sideToMove);
|
extern void read_weights(Color sideToMove);
|
||||||
|
|
|
@ -1098,7 +1098,6 @@ namespace {
|
||||||
assert(threadID >= 0 && threadID < ActiveThreads);
|
assert(threadID >= 0 && threadID < ActiveThreads);
|
||||||
|
|
||||||
Move movesSearched[256];
|
Move movesSearched[256];
|
||||||
EvalInfo ei;
|
|
||||||
StateInfo st;
|
StateInfo st;
|
||||||
const TTEntry* tte;
|
const TTEntry* tte;
|
||||||
Move ttMove, move;
|
Move ttMove, move;
|
||||||
|
@ -1119,12 +1118,9 @@ namespace {
|
||||||
if (AbortSearch || thread_should_stop(threadID))
|
if (AbortSearch || thread_should_stop(threadID))
|
||||||
return Value(0);
|
return Value(0);
|
||||||
|
|
||||||
if (pos.is_draw())
|
if (pos.is_draw() || ply >= PLY_MAX - 1)
|
||||||
return VALUE_DRAW;
|
return VALUE_DRAW;
|
||||||
|
|
||||||
if (ply >= PLY_MAX - 1)
|
|
||||||
return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
|
|
||||||
|
|
||||||
// Mate distance pruning
|
// Mate distance pruning
|
||||||
oldAlpha = alpha;
|
oldAlpha = alpha;
|
||||||
alpha = Max(value_mated_in(ply), alpha);
|
alpha = Max(value_mated_in(ply), alpha);
|
||||||
|
@ -1349,12 +1345,9 @@ namespace {
|
||||||
if (AbortSearch || thread_should_stop(threadID))
|
if (AbortSearch || thread_should_stop(threadID))
|
||||||
return Value(0);
|
return Value(0);
|
||||||
|
|
||||||
if (pos.is_draw())
|
if (pos.is_draw() || ply >= PLY_MAX - 1)
|
||||||
return VALUE_DRAW;
|
return VALUE_DRAW;
|
||||||
|
|
||||||
if (ply >= PLY_MAX - 1)
|
|
||||||
return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
|
|
||||||
|
|
||||||
// Mate distance pruning
|
// Mate distance pruning
|
||||||
if (value_mated_in(ply) >= beta)
|
if (value_mated_in(ply) >= beta)
|
||||||
return beta;
|
return beta;
|
||||||
|
@ -1379,22 +1372,24 @@ namespace {
|
||||||
isCheck = pos.is_check();
|
isCheck = pos.is_check();
|
||||||
ei.futilityMargin = Value(0); // Manually initialize futilityMargin
|
ei.futilityMargin = Value(0); // Manually initialize futilityMargin
|
||||||
|
|
||||||
// Evaluate the position statically
|
|
||||||
if (isCheck)
|
|
||||||
staticValue = quick_evaluate(pos);
|
|
||||||
else if (tte && (tte->type() & VALUE_TYPE_EVAL))
|
|
||||||
staticValue = value_from_tt(tte->value(), ply);
|
|
||||||
else
|
|
||||||
staticValue = evaluate(pos, ei, threadID);
|
|
||||||
|
|
||||||
// Calculate depth dependant futility pruning parameters
|
// Calculate depth dependant futility pruning parameters
|
||||||
const int FutilityMoveCountMargin = 3 + (1 << (3 * int(depth) / 8));
|
const int FutilityMoveCountMargin = 3 + (1 << (3 * int(depth) / 8));
|
||||||
const int FutilityValueMargin = 112 * bitScanReverse32(int(depth) * int(depth) / 2);
|
const int FutilityValueMargin = 112 * bitScanReverse32(int(depth) * int(depth) / 2);
|
||||||
|
|
||||||
// Enhance score accuracy with TT value if possible
|
// Evaluate the position statically
|
||||||
ss[ply].eval = staticValue;
|
if (isCheck)
|
||||||
futilityValue = staticValue + FutilityValueMargin;
|
ss[ply].eval = VALUE_NONE;
|
||||||
staticValue = refine_eval(tte, staticValue, ply);
|
else
|
||||||
|
{
|
||||||
|
if (tte && (tte->type() & VALUE_TYPE_EVAL))
|
||||||
|
staticValue = value_from_tt(tte->value(), ply);
|
||||||
|
else
|
||||||
|
staticValue = evaluate(pos, ei, threadID);
|
||||||
|
|
||||||
|
ss[ply].eval = staticValue;
|
||||||
|
futilityValue = staticValue + FutilityValueMargin;
|
||||||
|
staticValue = refine_eval(tte, staticValue, ply); // Enhance accuracy with TT value if possible
|
||||||
|
}
|
||||||
|
|
||||||
// Null move search
|
// Null move search
|
||||||
if ( allowNullmove
|
if ( allowNullmove
|
||||||
|
@ -1660,12 +1655,9 @@ namespace {
|
||||||
if (AbortSearch || thread_should_stop(threadID))
|
if (AbortSearch || thread_should_stop(threadID))
|
||||||
return Value(0);
|
return Value(0);
|
||||||
|
|
||||||
if (pos.is_draw())
|
if (pos.is_draw() || ply >= PLY_MAX - 1)
|
||||||
return VALUE_DRAW;
|
return VALUE_DRAW;
|
||||||
|
|
||||||
if (ply >= PLY_MAX - 1)
|
|
||||||
return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
|
|
||||||
|
|
||||||
// Transposition table lookup. At PV nodes, we don't use the TT for
|
// Transposition table lookup. At PV nodes, we don't use the TT for
|
||||||
// pruning, but only for move ordering.
|
// pruning, but only for move ordering.
|
||||||
tte = TT.retrieve(pos.get_key());
|
tte = TT.retrieve(pos.get_key());
|
||||||
|
|
Loading…
Add table
Reference in a new issue