From: Marco Costalba Date: Mon, 26 Apr 2010 12:43:03 +0000 (+0200) Subject: Another small material tweak X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=cb9399445f5ce6f9e209a7ae35ad00ce45dc9c0d Another small material tweak In this case we avoid to name the 'black' version of the endgame function but use a vector indexed by color instead. No functional change. Signed-off-by: Marco Costalba --- diff --git a/src/material.cpp b/src/material.cpp index d3483980..fc2f4b7c 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -55,18 +55,18 @@ namespace { { 41, 41, 41, 41, 41, 41 }, { 37, 41, 41, 41, 41, 41 }, { 10, 62, 41, 41, 41, 41 }, { 57, 64, 39, 41, 41, 41 }, { 50, 40, 23, -22, 41, 41 }, { 106, 101, 3, 151, 171, 41 } }; - // Named endgame evaluation and scaling functions, these - // are accessed direcly and not through the function maps. - EvaluationFunction EvaluateKmmKm(WHITE); - EvaluationFunction EvaluateKXK(WHITE), EvaluateKKX(BLACK); - ScalingFunction ScaleKBPsK(WHITE), ScaleKKBPs(BLACK); - ScalingFunction ScaleKQKRPs(WHITE), ScaleKRPsKQ(BLACK); - ScalingFunction ScaleKPsK(WHITE), ScaleKKPs(BLACK); - ScalingFunction ScaleKPKPw(WHITE), ScaleKPKPb(BLACK); - typedef EndgameEvaluationFunctionBase EF; typedef EndgameScalingFunctionBase SF; + // Endgame evaluation and scaling functions accessed direcly and not through + // the function maps because correspond to more then one material hash key. + EvaluationFunction EvaluateKmmKm[] = { EvaluationFunction(WHITE), EvaluationFunction(BLACK) }; + EvaluationFunction EvaluateKXK[] = { EvaluationFunction(WHITE), EvaluationFunction(BLACK) }; + ScalingFunction ScaleKBPsK[] = { ScalingFunction(WHITE), ScalingFunction(BLACK) }; + ScalingFunction ScaleKQKRPs[] = { ScalingFunction(WHITE), ScalingFunction(BLACK) }; + ScalingFunction ScaleKPsK[] = { ScalingFunction(WHITE), ScalingFunction(BLACK) }; + ScalingFunction ScaleKPKP[] = { ScalingFunction(WHITE), ScalingFunction(BLACK) }; + // Helper templates used to detect a given material distribution template bool is_KXK(const Position& pos) { const Color Them = (Us == WHITE ? BLACK : WHITE); @@ -206,7 +206,7 @@ MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) { else if (is_KXK(pos) || is_KXK(pos)) { - mi->evaluationFunction = is_KXK(pos) ? &EvaluateKXK : &EvaluateKKX; + mi->evaluationFunction = is_KXK(pos) ? &EvaluateKXK[WHITE] : &EvaluateKXK[BLACK]; return mi; } else if ( pos.pieces(PAWN) == EmptyBoardBB @@ -221,7 +221,7 @@ MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) { if ( pos.piece_count(WHITE, BISHOP) + pos.piece_count(WHITE, KNIGHT) <= 2 && pos.piece_count(BLACK, BISHOP) + pos.piece_count(BLACK, KNIGHT) <= 2) { - mi->evaluationFunction = &EvaluateKmmKm; + mi->evaluationFunction = &EvaluateKmmKm[WHITE]; return mi; } } @@ -245,35 +245,35 @@ MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) { // distribution. Should be probed after the specialized ones. // Note that these ones don't return after setting the function. if (is_KBPsK(pos)) - mi->scalingFunction[WHITE] = &ScaleKBPsK; + mi->scalingFunction[WHITE] = &ScaleKBPsK[WHITE]; if (is_KBPsK(pos)) - mi->scalingFunction[BLACK] = &ScaleKKBPs; + mi->scalingFunction[BLACK] = &ScaleKBPsK[BLACK]; if (is_KQKRPs(pos)) - mi->scalingFunction[WHITE] = &ScaleKQKRPs; + mi->scalingFunction[WHITE] = &ScaleKQKRPs[WHITE]; else if (is_KQKRPs(pos)) - mi->scalingFunction[BLACK] = &ScaleKRPsKQ; + mi->scalingFunction[BLACK] = &ScaleKQKRPs[BLACK]; if (pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK) == Value(0)) { if (pos.piece_count(BLACK, PAWN) == 0) { assert(pos.piece_count(WHITE, PAWN) >= 2); - mi->scalingFunction[WHITE] = &ScaleKPsK; + mi->scalingFunction[WHITE] = &ScaleKPsK[WHITE]; } else if (pos.piece_count(WHITE, PAWN) == 0) { assert(pos.piece_count(BLACK, PAWN) >= 2); - mi->scalingFunction[BLACK] = &ScaleKKPs; + mi->scalingFunction[BLACK] = &ScaleKPsK[BLACK]; } else if (pos.piece_count(WHITE, PAWN) == 1 && pos.piece_count(BLACK, PAWN) == 1) { // This is a special case because we set scaling functions // for both colors instead of only one. - mi->scalingFunction[WHITE] = &ScaleKPKPw; - mi->scalingFunction[BLACK] = &ScaleKPKPb; + mi->scalingFunction[WHITE] = &ScaleKPKP[WHITE]; + mi->scalingFunction[BLACK] = &ScaleKPKP[BLACK]; } }