X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fevaluate.cpp;h=153e6eaeb987e5e77ba2f8dadd135b7413711ad9;hb=ddccb5355cabb7d1a9bf2c0fe3c51b3da0234260;hp=8416162d357aa0f0d5740ea9b05f41ee652adb14;hpb=91cc82aa2566e6b6fa60cf82298250d6e4e2dd46;p=stockfish diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 8416162d..153e6eae 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -1,7 +1,7 @@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2014 Marco Costalba, Joona Kiiski, Tord Romstad + Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -91,7 +91,7 @@ namespace { // Evaluation weights, indexed by evaluation term enum { Mobility, PawnStructure, PassedPawns, Space, KingSafety }; const struct Weight { int mg, eg; } Weights[] = { - {289, 344}, {233, 201}, {221, 273}, {46, 0}, {321, 0} + {289, 344}, {233, 201}, {221, 273}, {46, 0}, {322, 0} }; #define V(v) Value(v) @@ -186,19 +186,19 @@ namespace { // index to KingDanger[]. // // KingAttackWeights[PieceType] contains king attack weights by piece type - const int KingAttackWeights[] = { 0, 0, 6, 2, 5, 5 }; + const int KingAttackWeights[] = { 0, 0, 7, 5, 4, 1 }; // Bonuses for enemy's safe checks - const int QueenContactCheck = 92; - const int RookContactCheck = 68; + const int QueenContactCheck = 89; + const int RookContactCheck = 71; const int QueenCheck = 50; - const int RookCheck = 36; - const int BishopCheck = 7; + const int RookCheck = 37; + const int BishopCheck = 6; const int KnightCheck = 14; // KingDanger[attackUnits] contains the actual king danger weighted // scores, indexed by a calculated integer number. - Score KingDanger[128]; + Score KingDanger[512]; // apply_weight() weighs score 's' by weight 'w' trying to prevent overflow Score apply_weight(Score s, const Weight& w) { @@ -411,11 +411,11 @@ namespace { // number and types of the enemy's attacking pieces, the number of // attacked and undefended squares around our king and the quality of // the pawn shelter (current 'score' value). - attackUnits = std::min(77, ei.kingAttackersCount[Them] * ei.kingAttackersWeight[Them]) - + 10 * ei.kingAdjacentZoneAttacksCount[Them] - + 19 * popcount(undefended) - + 9 * (ei.pinnedPieces[Us] != 0) - - mg_value(score) * 63 / 512 + attackUnits = std::min(74, ei.kingAttackersCount[Them] * ei.kingAttackersWeight[Them]) + + 8 * ei.kingAdjacentZoneAttacksCount[Them] + + 25 * popcount(undefended) + + 11 * (ei.pinnedPieces[Us] != 0) + - mg_value(score) * 31 / 256 - !pos.count(Them) * 60; // Analyse the enemy's safe queen contact checks. Firstly, find the @@ -476,7 +476,7 @@ namespace { // Finally, extract the king danger score from the KingDanger[] // array and subtract the score from evaluation. - score -= KingDanger[std::max(std::min(attackUnits / 4, 99), 0)]; + score -= KingDanger[std::max(std::min(attackUnits, 399), 0)]; } if (Trace) @@ -534,7 +534,7 @@ namespace { b = weak & ~ei.attackedBy[Them][ALL_PIECES]; if (b) - score += more_than_one(b) ? Hanging * popcount(b) : Hanging; + score += Hanging * popcount(b); b = weak & ei.attackedBy[Us][KING]; if (b) @@ -891,13 +891,14 @@ namespace Eval { void init() { - const double MaxSlope = 30; + const double MaxSlope = 8.7; const double Peak = 1280; + double t = 0.0; - for (int t = 0, i = 1; i < 100; ++i) + for (int i = 1; i < 400; ++i) { - t = int(std::min(Peak, std::min(0.4 * i * i, t + MaxSlope))); - KingDanger[i] = apply_weight(make_score(t, 0), Weights[KingSafety]); + t = std::min(Peak, std::min(0.027 * i * i, t + MaxSlope)); + KingDanger[i] = apply_weight(make_score(int(t), 0), Weights[KingSafety]); } }