@@ -14,13 +14,15 @@ class BaseExperiment(BaseObject):
1414 "property:randomness" : "random" , # random or deterministic
1515 # if deterministic, two calls of score will result in the same value
1616 # random = two calls may result in different values; same as "stochastic"
17+ "property:higher_or_lower_is_better" : "higher" , # "higher", "lower", "mixed"
18+ # whether higher or lower scores are better
1719 }
1820
1921 def __init__ (self ):
2022 super ().__init__ ()
2123
2224 def __call__ (self , ** kwargs ):
23- """Score parameters, with kwargs call."""
25+ """Score parameters, with kwargs call. Same as score call. """
2426 score , _ = self .score (kwargs )
2527 return score
2628
@@ -48,30 +50,55 @@ def _paramnames(self):
4850 """
4951 raise NotImplementedError
5052
51- def score (self , params ):
52- """Score the parameters.
53+ def evaluate (self , params ):
54+ """Evaluate the parameters.
5355
5456 Parameters
5557 ----------
5658 params : dict with string keys
57- Parameters to score .
59+ Parameters to evaluate .
5860
5961 Returns
6062 -------
6163 float
62- The score of the parameters.
64+ The value of the parameters as per evaluation .
6365 dict
6466 Additional metadata about the search.
6567 """
6668 paramnames = self .paramnames ()
6769 if not set (params .keys ()) <= set (paramnames ):
6870 raise ValueError ("Parameters do not match." )
69- res , metadata = self ._score (params )
71+ res , metadata = self ._evaluate (params )
7072 res = np .float64 (res )
7173 return res , metadata
7274
73- def _score (self , params ):
74- """Score the parameters.
75+ def _evaluate (self , params ):
76+ """Evaluate the parameters.
77+
78+ Parameters
79+ ----------
80+ params : dict with string keys
81+ Parameters to evaluate.
82+
83+ Returns
84+ -------
85+ float
86+ The value of the parameters as per evaluation.
87+ dict
88+ Additional metadata about the search.
89+ """
90+ raise NotImplementedError
91+
92+ def score (self , params ):
93+ """Score the parameters - with sign such that higher is always better.
94+
95+ Same as ``evaluate`` call except for the sign chosen so that higher is better.
96+
97+ If the tag ``property:higher_or_lower_is_better`` is set to
98+ ``"lower"``, the result is ``-self.evaluate(params)``.
99+
100+ If the tag is set to ``"higher"``, the result is
101+ identical to ``self.evaluate(params)``.
75102
76103 Parameters
77104 ----------
@@ -85,4 +112,14 @@ def _score(self, params):
85112 dict
86113 Additional metadata about the search.
87114 """
88- raise NotImplementedError
115+ hib = self .get_tag ("property:higher_or_lower_is_better" , "lower" )
116+ if hib == "higher" :
117+ sign = 1
118+ elif hib == "lower" :
119+ sign = - 1
120+
121+ eval_res = self .evaluate (params )
122+ value = eval_res [0 ]
123+ metadata = eval_res [1 ]
124+
125+ return sign * value , metadata
0 commit comments