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
|
||||
|
||||
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])
|
||||
maxStaticValueDelta[p][from][to] = delta;
|
||||
else
|
||||
|
|
|
@ -39,7 +39,7 @@ class MaxGain {
|
|||
public:
|
||||
MaxGain();
|
||||
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);
|
||||
|
||||
private:
|
||||
|
|
|
@ -289,6 +289,7 @@ namespace {
|
|||
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_killers(Move m, SearchStack& ss);
|
||||
void update_gains(const Position& pos, Move move, Value before, Value after);
|
||||
|
||||
bool fail_high_ply_1();
|
||||
int current_search_time();
|
||||
|
@ -1165,21 +1166,14 @@ namespace {
|
|||
tte = TT.retrieve(pos.get_key());
|
||||
}
|
||||
|
||||
// Evaluate the position statically
|
||||
isCheck = pos.is_check();
|
||||
EvalInfo ei;
|
||||
if (!isCheck)
|
||||
{
|
||||
// Update gain statistics of the previous move that lead
|
||||
// us in this position.
|
||||
EvalInfo ei;
|
||||
ss[ply].eval = evaluate(pos, ei, threadID);
|
||||
|
||||
// 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);
|
||||
|
||||
update_gains(pos, ss[ply - 1].currentMove, ss[ply - 1].eval, ss[ply].eval);
|
||||
}
|
||||
|
||||
// Initialize a MovePicker object for the current position, and prepare
|
||||
|
@ -1419,14 +1413,7 @@ namespace {
|
|||
ss[ply].eval = staticValue;
|
||||
futilityValue = staticValue + PostFutilityValueMargin; //FIXME: Remove me, only for split
|
||||
staticValue = refine_eval(tte, staticValue, ply); // Enhance accuracy with TT value if possible
|
||||
|
||||
// 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);
|
||||
update_gains(pos, ss[ply - 1].currentMove, ss[ply - 1].eval, ss[ply].eval);
|
||||
}
|
||||
|
||||
// Post futility pruning
|
||||
|
@ -1764,16 +1751,9 @@ namespace {
|
|||
if (!isCheck)
|
||||
{
|
||||
ss[ply].eval = staticValue;
|
||||
// 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);
|
||||
update_gains(pos, ss[ply - 1].currentMove, ss[ply - 1].eval, ss[ply].eval);
|
||||
}
|
||||
|
||||
|
||||
// Initialize "stand pat score", and return it immediately if it is
|
||||
// at least beta.
|
||||
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
|
||||
// high at ply 1 at the node below the first root node. This information
|
||||
// is used for time management.
|
||||
|
|
Loading…
Add table
Reference in a new issue