1
0
Fork 0
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:
Joona Kiiski 2010-01-17 13:55:10 +02:00 committed by Marco Costalba
parent d457594197
commit 000a975eaf
3 changed files with 17 additions and 41 deletions

View file

@ -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) {

View file

@ -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);

View file

@ -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());