mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Integrate gains table in History
This will be useful to use gains table in move ordering along with history table. No functional change and big code remove. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
54b3d44194
commit
f37741cc83
6 changed files with 26 additions and 122 deletions
|
@ -68,7 +68,7 @@ LDFLAGS = -lpthread
|
|||
OBJS = application.o bitboard.o pawns.o material.o endgame.o evaluate.o main.o \
|
||||
misc.o move.o movegen.o history.o movepick.o search.o piece.o \
|
||||
position.o direction.o tt.o value.o uci.o ucioption.o \
|
||||
maxgain.o mersenne.o book.o bitbase.o san.o benchmark.o
|
||||
mersenne.o book.o bitbase.o san.o benchmark.o
|
||||
|
||||
|
||||
### General rules. Do not change
|
||||
|
|
|
@ -42,6 +42,7 @@ History::History() { clear(); }
|
|||
|
||||
void History::clear() {
|
||||
memset(history, 0, 2 * 8 * 64 * sizeof(int));
|
||||
memset(maxStaticValueDelta, 0, 16 * 64 * 64 * sizeof(int));
|
||||
}
|
||||
|
||||
|
||||
|
@ -94,3 +95,21 @@ int History::move_ordering_score(Piece p, Square to) const {
|
|||
|
||||
return history[p][to];
|
||||
}
|
||||
|
||||
|
||||
/// History::set_gain() and History::gain() store and retrieve the
|
||||
/// gain of a move given the delta of the static position evaluations
|
||||
/// before and after the move.
|
||||
|
||||
void History::set_gain(Piece p, Square from, Square to, Value delta)
|
||||
{
|
||||
if (delta >= maxStaticValueDelta[p][from][to])
|
||||
maxStaticValueDelta[p][from][to] = delta;
|
||||
else
|
||||
maxStaticValueDelta[p][from][to]--;
|
||||
}
|
||||
|
||||
Value History::gain(Piece p, Square from, Square to) const
|
||||
{
|
||||
return Value(maxStaticValueDelta[p][from][to]);
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "depth.h"
|
||||
#include "move.h"
|
||||
#include "piece.h"
|
||||
#include "value.h"
|
||||
|
||||
|
||||
////
|
||||
|
@ -49,9 +50,12 @@ public:
|
|||
void success(Piece p, Square to, Depth d);
|
||||
void failure(Piece p, Square to, Depth d);
|
||||
int move_ordering_score(Piece p, Square to) const;
|
||||
void set_gain(Piece p, Square from, Square to, Value delta);
|
||||
Value gain(Piece p, Square from, Square to) const;
|
||||
|
||||
private:
|
||||
int history[16][64]; // [piece][square]
|
||||
int maxStaticValueDelta[16][64][64]; // [piece][from_square][to_square]
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
/*
|
||||
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
|
||||
Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
|
||||
Copyright (C) 2008-2009 Marco Costalba
|
||||
|
||||
Stockfish is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Stockfish is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
////
|
||||
//// Includes
|
||||
////
|
||||
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
||||
#include "maxgain.h"
|
||||
#include "value.h"
|
||||
|
||||
////
|
||||
//// Functions
|
||||
////
|
||||
|
||||
|
||||
/// Constructor
|
||||
|
||||
MaxGain::MaxGain() { clear(); }
|
||||
|
||||
|
||||
/// MaxGain::clear() clears the table
|
||||
|
||||
void MaxGain::clear() {
|
||||
memset(maxStaticValueDelta, 0, 16 * 64 * 64 * sizeof(int));
|
||||
}
|
||||
|
||||
|
||||
/// MaxGain::store
|
||||
|
||||
void MaxGain::store(Piece p, Square from, Square to, Value delta)
|
||||
{
|
||||
if (delta >= maxStaticValueDelta[p][from][to])
|
||||
maxStaticValueDelta[p][from][to] = delta;
|
||||
else
|
||||
maxStaticValueDelta[p][from][to]--;
|
||||
}
|
||||
|
||||
// MaxGain::retrieve
|
||||
|
||||
Value MaxGain::retrieve(Piece p, Square from, Square to)
|
||||
{
|
||||
return (Value) maxStaticValueDelta[p][from][to];
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
/*
|
||||
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
|
||||
Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
|
||||
Copyright (C) 2008-2009 Marco Costalba
|
||||
|
||||
Stockfish is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Stockfish is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(MAXGAIN_H_INCLUDED)
|
||||
#define MAXGAIN_H_INCLUDED
|
||||
|
||||
////
|
||||
//// Includes
|
||||
////
|
||||
|
||||
#include "move.h"
|
||||
#include "piece.h"
|
||||
#include "value.h"
|
||||
|
||||
|
||||
////
|
||||
//// Types
|
||||
////
|
||||
|
||||
class MaxGain {
|
||||
|
||||
public:
|
||||
MaxGain();
|
||||
void clear();
|
||||
void store(Piece p, Square from, Square to, Value delta);
|
||||
Value retrieve(Piece p, Square from, Square to);
|
||||
|
||||
private:
|
||||
int maxStaticValueDelta[16][64][64]; // [piece][from_square][to_square]
|
||||
};
|
||||
|
||||
|
||||
#endif // !defined(MAXGAIN_H_INCLUDED)
|
||||
|
|
@ -32,7 +32,6 @@
|
|||
#include "book.h"
|
||||
#include "evaluate.h"
|
||||
#include "history.h"
|
||||
#include "maxgain.h"
|
||||
#include "misc.h"
|
||||
#include "movegen.h"
|
||||
#include "movepick.h"
|
||||
|
@ -264,9 +263,6 @@ namespace {
|
|||
// History table
|
||||
History H;
|
||||
|
||||
// MaxGain table
|
||||
MaxGain MG;
|
||||
|
||||
/// Functions
|
||||
|
||||
Value id_loop(const Position& pos, Move searchMoves[]);
|
||||
|
@ -704,7 +700,6 @@ namespace {
|
|||
// Initialize
|
||||
TT.new_search();
|
||||
H.clear();
|
||||
MG.clear();
|
||||
init_ss_array(ss);
|
||||
IterationInfo[1] = IterationInfoType(rml.get_move_score(0), rml.get_move_score(0));
|
||||
Iteration = 1;
|
||||
|
@ -1592,7 +1587,7 @@ namespace {
|
|||
if (predictedDepth >= OnePly)
|
||||
preFutilityValueMargin = 112 * bitScanReverse32(int(predictedDepth) * int(predictedDepth) / 2);
|
||||
|
||||
preFutilityValueMargin += MG.retrieve(pos.piece_on(move_from(move)), move_from(move), move_to(move)) + 45;
|
||||
preFutilityValueMargin += H.gain(pos.piece_on(move_from(move)), move_from(move), move_to(move)) + 45;
|
||||
|
||||
futilityValueScaled = ss[ply].eval + preFutilityValueMargin - moveCount * IncrementalFutilityMargin;
|
||||
|
||||
|
@ -2646,7 +2641,7 @@ namespace {
|
|||
&& 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));
|
||||
H.set_gain(pos.piece_on(move_to(m)), move_from(m), move_to(m), -(before + after));
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue