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
void History::clear() {
memset(history, 0, 2 * 8 * 64 * sizeof(int));
+ memset(maxStaticValueDelta, 0, 16 * 64 * 64 * sizeof(int));
}
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]);
+}
#include "depth.h"
#include "move.h"
#include "piece.h"
+#include "value.h"
////
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]
};
+++ /dev/null
-/*
- 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];
-}
+++ /dev/null
-/*
- 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)
-
#include "book.h"
#include "evaluate.h"
#include "history.h"
-#include "maxgain.h"
#include "misc.h"
#include "movegen.h"
#include "movepick.h"
// History table
History H;
- // MaxGain table
- MaxGain MG;
-
/// Functions
Value id_loop(const Position& pos, Move searchMoves[]);
// 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;
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;
&& 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));
}