Retire "Pawn Structure" UCI option
authorMarco Costalba <mcostalba@gmail.com>
Mon, 2 May 2011 12:15:06 +0000 (14:15 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Mon, 2 May 2011 16:50:46 +0000 (17:50 +0100)
Almost useless for the user and now is in sync with
the material value that is already weighted.

A small speedup of 0,4% because we avoid an apply_weight()
call in a fast path.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
polyglot.ini
src/evaluate.cpp
src/pawns.cpp
src/ucioption.cpp

index d1f0ac8a265098d81af4a52f644ae15e0f1f5d86..4af11dd8b704055ec893f541aa5b24c192e32676 100644 (file)
@@ -24,8 +24,6 @@ Use Search Log = false
 Search Log Filename = SearchLog.txt
 Mobility (Middle Game) = 100
 Mobility (Endgame) = 100
-Pawn Structure (Middle Game) = 100
-Pawn Structure (Endgame) = 100
 Passed Pawns (Middle Game) = 100
 Passed Pawns (Endgame) = 100
 Space = 100
index 05c4c1119bb61eb0a6242c3072509a95cac9c14b..71335c1bf3e3a9c52492aca1d7db949a5378ec6e 100644 (file)
@@ -75,7 +75,7 @@ namespace {
   const int GrainSize = 8;
 
   // Evaluation weights, initialized from UCI options
-  enum { Mobility, PawnStructure, PassedPawns, Space, KingDangerUs, KingDangerThem };
+  enum { Mobility, PassedPawns, Space, KingDangerUs, KingDangerThem };
   Score Weights[6];
 
   typedef Value V;
@@ -88,7 +88,7 @@ namespace {
   //
   // Values modified by Joona Kiiski
   const Score WeightsInternal[] = {
-      S(248, 271), S(233, 201), S(252, 259), S(46, 0), S(247, 0), S(259, 0)
+      S(248, 271), S(252, 259), S(46, 0), S(247, 0), S(259, 0)
   };
 
   // MobilityBonus[PieceType][attacked] contains mobility bonuses for middle and
@@ -301,7 +301,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
 
   // Probe the pawn hash table
   ei.pi = Threads[pos.thread()].pawnTable.get_pawn_info(pos);
-  score += apply_weight(ei.pi->pawns_value(), Weights[PawnStructure]);
+  score += ei.pi->pawns_value();
 
   // Initialize attack and king safety bitboards
   init_eval_info<WHITE, HasPopCnt>(pos, ei);
@@ -371,7 +371,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
   {
       trace_add(PST, pos.value());
       trace_add(IMBALANCE, ei.mi->material_value());
-      trace_add(PAWN, apply_weight(ei.pi->pawns_value(), Weights[PawnStructure]));
+      trace_add(PAWN, ei.pi->pawns_value());
       trace_add(MOBILITY, apply_weight(mobilityWhite, Weights[Mobility]), apply_weight(mobilityBlack, Weights[Mobility]));
       trace_add(THREAT, evaluate_threats<WHITE>(pos, ei), evaluate_threats<BLACK>(pos, ei));
       trace_add(PASSED, evaluate_passed_pawns<WHITE>(pos, ei), evaluate_passed_pawns<BLACK>(pos, ei));
@@ -405,7 +405,6 @@ void read_evaluation_uci_options(Color us) {
   const int kingDangerThem = (us == WHITE ? KingDangerThem : KingDangerUs);
 
   Weights[Mobility]       = weight_option("Mobility (Middle Game)", "Mobility (Endgame)", WeightsInternal[Mobility]);
-  Weights[PawnStructure]  = weight_option("Pawn Structure (Middle Game)", "Pawn Structure (Endgame)", WeightsInternal[PawnStructure]);
   Weights[PassedPawns]    = weight_option("Passed Pawns (Middle Game)", "Passed Pawns (Endgame)", WeightsInternal[PassedPawns]);
   Weights[Space]          = weight_option("Space", "Space", WeightsInternal[Space]);
   Weights[kingDangerUs]   = weight_option("Cowardice", "Cowardice", WeightsInternal[KingDangerUs]);
@@ -1076,8 +1075,8 @@ namespace {
   // apply_weight() applies an evaluation weight to a value trying to prevent overflow
 
   inline Score apply_weight(Score v, Score w) {
-      return make_score((int(mg_value(v)) * mg_value(w)) / 0x100,
-                        (int(eg_value(v)) * eg_value(w)) / 0x100);
+    return make_score((int(mg_value(v)) * mg_value(w)) / 0x100,
+                      (int(eg_value(v)) * eg_value(w)) / 0x100);
   }
 
 
index 587c9b95509224a4f396ae27ec50cf2a3aac6f50..3ad88fb206aa011ece4fb6dca4c75acf17edb758 100644 (file)
@@ -61,7 +61,14 @@ namespace {
     S(34,68), S(83,166), S(0, 0), S( 0, 0)
   };
 
+  const Score PawnStructureWeight = S(233, 201);
+
   #undef S
+
+  inline Score apply_weight(Score v, Score w) {
+    return make_score((int(mg_value(v)) * mg_value(w)) / 0x100,
+                      (int(eg_value(v)) * eg_value(w)) / 0x100);
+  }
 }
 
 
@@ -95,9 +102,12 @@ PawnInfo* PawnInfoTable::get_pawn_info(const Position& pos) const {
   pi->pawnAttacks[WHITE] = ((wPawns << 9) & ~FileABB) | ((wPawns << 7) & ~FileHBB);
   pi->pawnAttacks[BLACK] = ((bPawns >> 7) & ~FileABB) | ((bPawns >> 9) & ~FileHBB);
 
-  // Evaluate pawns for both colors
+  // Evaluate pawns for both colors and weight the result
   pi->value =  evaluate_pawns<WHITE>(pos, wPawns, bPawns, pi)
              - evaluate_pawns<BLACK>(pos, bPawns, wPawns, pi);
+
+  pi->value = apply_weight(pi->value, PawnStructureWeight);
+
   return pi;
 }
 
index 4b7c3352f1926cd75d1eb52ef1d12957851289f0..eae549ad63f413b077ea9d6828cf6887ea86be54 100644 (file)
@@ -74,8 +74,6 @@ OptionsMap::OptionsMap() {
   o["Best Book Move"] = UCIOption(false);
   o["Mobility (Middle Game)"] = UCIOption(100, 0, 200);
   o["Mobility (Endgame)"] = UCIOption(100, 0, 200);
-  o["Pawn Structure (Middle Game)"] = UCIOption(100, 0, 200);
-  o["Pawn Structure (Endgame)"] = UCIOption(100, 0, 200);
   o["Passed Pawns (Middle Game)"] = UCIOption(100, 0, 200);
   o["Passed Pawns (Endgame)"] = UCIOption(100, 0, 200);
   o["Space"] = UCIOption(100, 0, 200);