Implement MaxGain table
authorJoona Kiiski <joona.kiiski@gmail.com>
Thu, 21 Jan 2010 14:50:23 +0000 (16:50 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Wed, 27 Jan 2010 08:57:14 +0000 (09:57 +0100)
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/Makefile
src/maxgain.cpp [new file with mode: 0644]
src/maxgain.h [new file with mode: 0644]
src/position.cpp
src/position.h
src/search.cpp

index dafea2ddba2c649d4d8248d5fd6a34ec6223cbf3..aa7d97f870f3abbb020a534181b89975b6502a42 100644 (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 \
 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
 
 
 ### General rules. Do not change
diff --git a/src/maxgain.cpp b/src/maxgain.cpp
new file mode 100644 (file)
index 0000000..8c1ff48
--- /dev/null
@@ -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 <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 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 (file)
index 0000000..6bdc5b8
--- /dev/null
@@ -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 <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 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)
+
index a389e9c05a6e77d3892ae240b644a3ee730062e7..2508db669dfb2241ed0e4c322fbfb6fbd8d0cfe0 100644 (file)
@@ -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
 /// 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
index c4dbfcf6bef163aac51ab3b6a40bce43decb261d..591107e4b2ddd6e2d1d310680ce7ee199261d6db 100644 (file)
@@ -241,6 +241,9 @@ public:
   void do_null_move(StateInfo& st);
   void undo_null_move();
 
   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;
   // Static exchange evaluation
   int see(Square from, Square to) const;
   int see(Move m) const;
index e44dd85481e5a83dab4849a5741087abd92eb160..6232f0cbf3ab8477ff5bc10f5973a3b1a134341b 100644 (file)
@@ -32,6 +32,7 @@
 #include "book.h"
 #include "evaluate.h"
 #include "history.h"
 #include "book.h"
 #include "evaluate.h"
 #include "history.h"
+#include "maxgain.h"
 #include "misc.h"
 #include "movegen.h"
 #include "movepick.h"
 #include "misc.h"
 #include "movegen.h"
 #include "movepick.h"
@@ -263,6 +264,8 @@ namespace {
   // History table
   History H;
 
   // History table
   History H;
 
+  // MaxGain table
+  MaxGain MG;
 
   /// Functions
 
 
   /// Functions