- Value evaluate(const Position& p) const { return (*evaluationFunction)(p); }
- ScaleFactor scale_factor(const Position& pos, Color c) const;
+ Value evaluate(const Position& pos) const { return (*evaluationFunction)(pos); }
+
+ // scale_factor takes a position and a color as input, and returns a scale factor
+ // for the given color. We have to provide the position in addition to the color,
+ // because the scale factor need not be a constant: It can also be a function
+ // which should be applied to the position. For instance, in KBP vs K endgames,
+ // a scaling function for draws with rook pawns and wrong-colored bishops.
+
+ ScaleFactor scale_factor(const Position& pos, Color c) const {
+
+ return !scalingFunction[c] || (*scalingFunction[c])(pos) == SCALE_FACTOR_NONE
+ ? ScaleFactor(factor[c]) : (*scalingFunction[c])(pos);
+ }