import random
from typing import Any, Dict, Tuple, Type, Union
from .baseselector import BaseSelector
from ..core.optimizerlogger import BaseLogger
from ..optimizers.baseoptimizer import BaseOptimizer
from ...plams.core.settings import Settings
[docs]class RandomSelector(BaseSelector):
"""Randomly selects an optimizer from the available options."""
def __amssettings__(self, s: Settings) -> Settings:
s = self._spawnersettings(s)
s.input.ams.OptimizerSelector.Type = "Random"
return s
def select_optimizer(
self, manager: "GloMPOManager", slots_available: int
) -> Union[Tuple[Type[BaseOptimizer], Dict[str, Any], Dict[str, Any]], None, bool]:
if not all((spawner(manager) for spawner in self.allow_spawn)):
return False
viable = []
for opt in self.avail_opts:
if opt[1]["_workers"] <= slots_available:
viable.append(opt)
if len(viable) == 0:
return None
return random.choice(viable)