in nevergrad/optimization/optimizerlib.py [0:0]
def _select_optimizer_cls(self) -> base.OptCls:
# pylint: disable=too-many-nested-blocks
assert self.budget is not None
if self.has_noise and self.has_discrete_not_softmax:
# noise and discrete: let us merge evolution and bandits.
cls: base.OptCls = DoubleFastGADiscreteOnePlusOne if self.dimension < 60 else CMA
else:
if self.has_noise and self.fully_continuous:
# This is the real of population control. FIXME: should we pair with a bandit ?
cls = TBPSA
else:
if (
self.has_discrete_not_softmax
or not self.parametrization.function.metrizable
or not self.fully_continuous
):
cls = DoubleFastGADiscreteOnePlusOne
else:
if self.num_workers > self.budget / 5:
if self.num_workers > self.budget / 2.0 or self.budget < self.dimension:
cls = MetaRecentering
else:
cls = NaiveTBPSA
else:
# Possibly a good idea to go memetic for large budget, but something goes wrong for the moment.
if (
self.num_workers == 1 and self.budget > 6000 and self.dimension > 7
): # Let us go memetic.
cls = ChainCMAPowell
else:
if self.num_workers == 1 and self.budget < self.dimension * 30:
# One plus one so good in large ratio "dimension / budget".
cls = OnePlusOne if self.dimension > 30 else Cobyla
else:
# DE is great in such a case (?).
cls = (
DE if self.dimension > 2000 else CMA if self.dimension > 1 else OnePlusOne
)
return cls