1
0
Fork 0
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:
Marco Costalba 2010-01-27 11:19:56 +01:00
parent 54b3d44194
commit f37741cc83
6 changed files with 26 additions and 122 deletions

View file

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

View file

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

View file

@ -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]
};

View file

@ -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];
}

View file

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

View file

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