1
0
Fork 0
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:
Marco Costalba 2010-01-27 10:55:19 +01:00
parent ea53006a9d
commit 54b3d44194
3 changed files with 24 additions and 33 deletions

View file

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

View file

@ -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:

View file

@ -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.