History gravity
authorJoona Kiiski <joona.kiiski@gmail.com>
Tue, 25 Aug 2015 19:52:44 +0000 (20:52 +0100)
committerJoona Kiiski <joona.kiiski@gmail.com>
Sat, 29 Aug 2015 14:09:00 +0000 (15:09 +0100)
Instead of using hard coded Min and Max values for history,
always adjust the old value slightly downwards before adding a new value.

The adjustment acts like gravity that prevents the value escaping too
far from zero.

Bench: 8020484

Resolves #407

src/movepick.h

index b281bd42afcfb559a65fb7e5725fbb803168c713..412c08e2861ab1bac41868a20b8b6c7639db986c 100644 (file)
@@ -39,7 +39,7 @@
 template<typename T>
 struct Stats {
 
-  static const Value Max = Value(250);
+  static const Value Max = Value(1<<28);
 
   const T* operator[](Piece pc) const { return table[pc]; }
   T* operator[](Piece pc) { return table[pc]; }
@@ -53,8 +53,8 @@ struct Stats {
 
   void update(Piece pc, Square to, Value v) {
 
-    if (abs(table[pc][to] + v) < Max)
-        table[pc][to] += v;
+    table[pc][to] -= table[pc][to] * std::min(abs(int(v)), 512) / 512;
+    table[pc][to] += int(v) * 64;
   }
 
 private: