mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 00:33: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
|
||||
|
||||
/// 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
|
||||
|
||||
void init_eval(int threads) {
|
||||
|
|
|
@ -104,7 +104,6 @@ struct EvalInfo {
|
|||
////
|
||||
|
||||
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 quit_eval();
|
||||
extern void read_weights(Color sideToMove);
|
||||
|
|
|
@ -1098,7 +1098,6 @@ namespace {
|
|||
assert(threadID >= 0 && threadID < ActiveThreads);
|
||||
|
||||
Move movesSearched[256];
|
||||
EvalInfo ei;
|
||||
StateInfo st;
|
||||
const TTEntry* tte;
|
||||
Move ttMove, move;
|
||||
|
@ -1119,12 +1118,9 @@ namespace {
|
|||
if (AbortSearch || thread_should_stop(threadID))
|
||||
return Value(0);
|
||||
|
||||
if (pos.is_draw())
|
||||
if (pos.is_draw() || ply >= PLY_MAX - 1)
|
||||
return VALUE_DRAW;
|
||||
|
||||
if (ply >= PLY_MAX - 1)
|
||||
return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
|
||||
|
||||
// Mate distance pruning
|
||||
oldAlpha = alpha;
|
||||
alpha = Max(value_mated_in(ply), alpha);
|
||||
|
@ -1349,12 +1345,9 @@ namespace {
|
|||
if (AbortSearch || thread_should_stop(threadID))
|
||||
return Value(0);
|
||||
|
||||
if (pos.is_draw())
|
||||
if (pos.is_draw() || ply >= PLY_MAX - 1)
|
||||
return VALUE_DRAW;
|
||||
|
||||
if (ply >= PLY_MAX - 1)
|
||||
return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
|
||||
|
||||
// Mate distance pruning
|
||||
if (value_mated_in(ply) >= beta)
|
||||
return beta;
|
||||
|
@ -1379,22 +1372,24 @@ namespace {
|
|||
isCheck = pos.is_check();
|
||||
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
|
||||
const int FutilityMoveCountMargin = 3 + (1 << (3 * int(depth) / 8));
|
||||
const int FutilityValueMargin = 112 * bitScanReverse32(int(depth) * int(depth) / 2);
|
||||
|
||||
// Enhance score accuracy with TT value if possible
|
||||
// Evaluate the position statically
|
||||
if (isCheck)
|
||||
ss[ply].eval = VALUE_NONE;
|
||||
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);
|
||||
staticValue = refine_eval(tte, staticValue, ply); // Enhance accuracy with TT value if possible
|
||||
}
|
||||
|
||||
// Null move search
|
||||
if ( allowNullmove
|
||||
|
@ -1660,12 +1655,9 @@ namespace {
|
|||
if (AbortSearch || thread_should_stop(threadID))
|
||||
return Value(0);
|
||||
|
||||
if (pos.is_draw())
|
||||
if (pos.is_draw() || ply >= PLY_MAX - 1)
|
||||
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
|
||||
// pruning, but only for move ordering.
|
||||
tte = TT.retrieve(pos.get_key());
|
||||
|
|
Loading…
Add table
Reference in a new issue