mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Introduce update_gains() and refactor some code
No functional change Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
ea53006a9d
commit
54b3d44194
3 changed files with 24 additions and 33 deletions
|
@ -47,12 +47,8 @@ void MaxGain::clear() {
|
||||||
|
|
||||||
/// MaxGain::store
|
/// MaxGain::store
|
||||||
|
|
||||||
void MaxGain::store(Piece p, Square from, Square to, Value prev, Value curr)
|
void MaxGain::store(Piece p, Square from, Square to, Value delta)
|
||||||
{
|
{
|
||||||
if (prev == VALUE_NONE || curr == VALUE_NONE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Value delta = curr - prev;
|
|
||||||
if (delta >= maxStaticValueDelta[p][from][to])
|
if (delta >= maxStaticValueDelta[p][from][to])
|
||||||
maxStaticValueDelta[p][from][to] = delta;
|
maxStaticValueDelta[p][from][to] = delta;
|
||||||
else
|
else
|
||||||
|
|
|
@ -39,7 +39,7 @@ class MaxGain {
|
||||||
public:
|
public:
|
||||||
MaxGain();
|
MaxGain();
|
||||||
void clear();
|
void clear();
|
||||||
void store(Piece p, Square from, Square to, Value prev, Value curr);
|
void store(Piece p, Square from, Square to, Value delta);
|
||||||
Value retrieve(Piece p, Square from, Square to);
|
Value retrieve(Piece p, Square from, Square to);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -289,6 +289,7 @@ namespace {
|
||||||
Value refine_eval(const TTEntry* tte, Value defaultEval, int ply);
|
Value refine_eval(const TTEntry* tte, Value defaultEval, int ply);
|
||||||
void update_history(const Position& pos, Move move, Depth depth, Move movesSearched[], int moveCount);
|
void update_history(const Position& pos, Move move, Depth depth, Move movesSearched[], int moveCount);
|
||||||
void update_killers(Move m, SearchStack& ss);
|
void update_killers(Move m, SearchStack& ss);
|
||||||
|
void update_gains(const Position& pos, Move move, Value before, Value after);
|
||||||
|
|
||||||
bool fail_high_ply_1();
|
bool fail_high_ply_1();
|
||||||
int current_search_time();
|
int current_search_time();
|
||||||
|
@ -1165,21 +1166,14 @@ namespace {
|
||||||
tte = TT.retrieve(pos.get_key());
|
tte = TT.retrieve(pos.get_key());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Evaluate the position statically
|
|
||||||
isCheck = pos.is_check();
|
isCheck = pos.is_check();
|
||||||
EvalInfo ei;
|
|
||||||
if (!isCheck)
|
if (!isCheck)
|
||||||
{
|
{
|
||||||
|
// Update gain statistics of the previous move that lead
|
||||||
|
// us in this position.
|
||||||
|
EvalInfo ei;
|
||||||
ss[ply].eval = evaluate(pos, ei, threadID);
|
ss[ply].eval = evaluate(pos, ei, threadID);
|
||||||
|
update_gains(pos, ss[ply - 1].currentMove, ss[ply - 1].eval, ss[ply].eval);
|
||||||
// Store gain statistics
|
|
||||||
Move m = ss[ply - 1].currentMove;
|
|
||||||
if ( m != MOVE_NULL
|
|
||||||
&& pos.captured_piece() == NO_PIECE_TYPE
|
|
||||||
&& !move_is_castle(m)
|
|
||||||
&& !move_is_promotion(m))
|
|
||||||
MG.store(pos.piece_on(move_to(m)), move_from(m), move_to(m), ss[ply - 1].eval, -ss[ply].eval);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize a MovePicker object for the current position, and prepare
|
// Initialize a MovePicker object for the current position, and prepare
|
||||||
|
@ -1419,14 +1413,7 @@ namespace {
|
||||||
ss[ply].eval = staticValue;
|
ss[ply].eval = staticValue;
|
||||||
futilityValue = staticValue + PostFutilityValueMargin; //FIXME: Remove me, only for split
|
futilityValue = staticValue + PostFutilityValueMargin; //FIXME: Remove me, only for split
|
||||||
staticValue = refine_eval(tte, staticValue, ply); // Enhance accuracy with TT value if possible
|
staticValue = refine_eval(tte, staticValue, ply); // Enhance accuracy with TT value if possible
|
||||||
|
update_gains(pos, ss[ply - 1].currentMove, ss[ply - 1].eval, ss[ply].eval);
|
||||||
// Store gain statistics
|
|
||||||
Move m = ss[ply - 1].currentMove;
|
|
||||||
if ( m != MOVE_NULL
|
|
||||||
&& pos.captured_piece() == NO_PIECE_TYPE
|
|
||||||
&& !move_is_castle(m)
|
|
||||||
&& !move_is_promotion(m))
|
|
||||||
MG.store(pos.piece_on(move_to(m)), move_from(m), move_to(m), ss[ply - 1].eval, -ss[ply].eval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Post futility pruning
|
// Post futility pruning
|
||||||
|
@ -1764,16 +1751,9 @@ namespace {
|
||||||
if (!isCheck)
|
if (!isCheck)
|
||||||
{
|
{
|
||||||
ss[ply].eval = staticValue;
|
ss[ply].eval = staticValue;
|
||||||
// Store gain statistics
|
update_gains(pos, ss[ply - 1].currentMove, ss[ply - 1].eval, ss[ply].eval);
|
||||||
Move m = ss[ply - 1].currentMove;
|
|
||||||
if ( m != MOVE_NULL
|
|
||||||
&& pos.captured_piece() == NO_PIECE_TYPE
|
|
||||||
&& !move_is_castle(m)
|
|
||||||
&& !move_is_promotion(m))
|
|
||||||
MG.store(pos.piece_on(move_to(m)), move_from(m), move_to(m), ss[ply - 1].eval, -ss[ply].eval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Initialize "stand pat score", and return it immediately if it is
|
// Initialize "stand pat score", and return it immediately if it is
|
||||||
// at least beta.
|
// at least beta.
|
||||||
bestValue = staticValue;
|
bestValue = staticValue;
|
||||||
|
@ -2655,6 +2635,21 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// update_gains() updates the gains table of a non-capture move given
|
||||||
|
// the static position evaluation before and after the move.
|
||||||
|
|
||||||
|
void update_gains(const Position& pos, Move m, Value before, Value after) {
|
||||||
|
|
||||||
|
if ( m != MOVE_NULL
|
||||||
|
&& before != VALUE_NONE
|
||||||
|
&& after != VALUE_NONE
|
||||||
|
&& pos.captured_piece() == NO_PIECE_TYPE
|
||||||
|
&& !move_is_castle(m)
|
||||||
|
&& !move_is_promotion(m))
|
||||||
|
MG.store(pos.piece_on(move_to(m)), move_from(m), move_to(m), -(before + after));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// fail_high_ply_1() checks if some thread is currently resolving a fail
|
// fail_high_ply_1() checks if some thread is currently resolving a fail
|
||||||
// high at ply 1 at the node below the first root node. This information
|
// high at ply 1 at the node below the first root node. This information
|
||||||
// is used for time management.
|
// is used for time management.
|
||||||
|
|
Loading…
Add table
Reference in a new issue