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
InfillCriterionclass that inherits fromEvaluationImplementation InfillCriterionctor →InfillCriterion(krigingResult, optimalValue, isMinimization, hasNoise)- The class should allow to update both
optimalValueandKrigingResultviasetters - Implement current ones (
ExpectedImprovement,AugmentedExpectedImprovementthat inherit fromInfillCriterion) - Implement the ones identified from the benchmark
what do you think ?