From: Joona Kiiski Date: Thu, 21 Jan 2010 14:50:23 +0000 (+0200) Subject: Implement MaxGain table X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=cfe59de27ddc42ac555187ae68879f2bc7bd7936;ds=inline Implement MaxGain table Signed-off-by: Marco Costalba --- diff --git a/src/Makefile b/src/Makefile index dafea2dd..aa7d97f8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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 \ - mersenne.o book.o bitbase.o san.o benchmark.o + maxgain.o mersenne.o book.o bitbase.o san.o benchmark.o ### General rules. Do not change diff --git a/src/maxgain.cpp b/src/maxgain.cpp new file mode 100644 index 00000000..8c1ff48a --- /dev/null +++ b/src/maxgain.cpp @@ -0,0 +1,67 @@ +/* + 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 . +*/ + + +//// +//// Includes +//// + +#include +#include + +#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 prev, Value curr) +{ + if (prev == VALUE_NONE || curr == VALUE_NONE) + return; + + Value delta = curr - prev; + 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]; +} diff --git a/src/maxgain.h b/src/maxgain.h new file mode 100644 index 00000000..6bdc5b87 --- /dev/null +++ b/src/maxgain.h @@ -0,0 +1,51 @@ +/* + 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 . +*/ + + +#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 prev, Value curr); + Value retrieve(Piece p, Square from, Square to); + +private: + int maxStaticValueDelta[16][64][64]; // [piece][from_square][to_square] +}; + + +#endif // !defined(MAXGAIN_H_INCLUDED) + diff --git a/src/position.cpp b/src/position.cpp index a389e9c0..2508db66 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1301,6 +1301,11 @@ void Position::undo_null_move() { } +/// +PieceType Position::captured_piece() const { + return st->capture; +} + /// Position::see() is a static exchange evaluator: It tries to estimate the /// material gain or loss resulting from a move. There are three versions of /// this function: One which takes a destination square as input, one takes a diff --git a/src/position.h b/src/position.h index c4dbfcf6..591107e4 100644 --- a/src/position.h +++ b/src/position.h @@ -241,6 +241,9 @@ public: void do_null_move(StateInfo& st); void undo_null_move(); + // Past + PieceType captured_piece() const; + // Static exchange evaluation int see(Square from, Square to) const; int see(Move m) const; diff --git a/src/search.cpp b/src/search.cpp index e44dd854..6232f0cb 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -32,6 +32,7 @@ #include "book.h" #include "evaluate.h" #include "history.h" +#include "maxgain.h" #include "misc.h" #include "movegen.h" #include "movepick.h" @@ -263,6 +264,8 @@ namespace { // History table History H; + // MaxGain table + MaxGain MG; /// Functions