Hi all,
Sometimes ago, we had a presentation from @l-brevault and @m-balesdent on benchmarking various infill criteria for bayesian optimization. This rich benchmark made a comparison between 6
criteria that are defined hereafter
– Expected Improvement (EI) [J. Močkus 1975, D. Jones et al. 1998] → the one used currently
– Lower Confidence Bound (LCB) [Cox et al 1992]
– Probability of Improvement (PI) [H. Kushner, 1964]
– Watson and Barnes 2nd (WB2) [A. Watson et al. 1995]
– Scaled Watson and Barnes 2nd (WB2S) [Bartoli et al. 2019]
– Thompson sampling [W. Thompson, 1933]
– Max-value Entropy Search (MES) [Wang et al. 2017]
The benchmark has been done on different use-cases of various complexity, with different dimension and computations budget.
– Ackley : 2D
– Branin : 2D
– Three Hump Camel : 2D
– Colville : 4D
– Trid : 5D
– Styblinski-Tang : 6D
– Schwefell : 10D
Today the expeced improvement
is hard-coded in the API
. Thus the suggestion is to allow having more infill criteria
and potentially having a user-defined one!
What should be an infill criterion ?
An infill criterion (today) is a specific evaluation
that has the () operator
But we should pay attention that the infill
is updated during the optimization process
Suggestion
- Implement an
InfillCriterion
class that inherits fromEvaluationImplementation
InfillCriterion
ctor →InfillCriterion(krigingResult, optimalValue, isMinimization, hasNoise)
- The class should allow to update both
optimalValue
andKrigingResult
viasetters
- Implement current ones (
ExpectedImprovement
,AugmentedExpectedImprovement
that inherit fromInfillCriterion
) - Implement the ones identified from the benchmark
what do you think ?