Source code for scm.glompo.opt_selectors.random

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)