Coverage for mlos_core/mlos_core/optimizers/__init__.py: 97%
29 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-21 01:50 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-21 01:50 +0000
1#
2# Copyright (c) Microsoft Corporation.
3# Licensed under the MIT License.
4#
5"""
6Initializer module for the mlos_core optimizers.
8Optimizers are the main component of the :py:mod:`mlos_core` package.
9They act as a wrapper around other OSS tuning libraries to provide a consistent API
10interface to allow experimenting with different autotuning algorithms.
12The :class:`~mlos_core.optimizers.optimizer.BaseOptimizer` class is the base class
13for all Optimizers and provides the core
14:py:meth:`~mlos_core.optimizers.optimizer.BaseOptimizer.suggest` and
15:py:meth:`~mlos_core.optimizers.optimizer.BaseOptimizer.register` methods.
17This module also provides a simple :py:class:`~.OptimizerFactory` class to
18:py:meth:`~.OptimizerFactory.create` an Optimizer.
20Examples
21--------
22TODO: Add example usage here.
24Notes
25-----
26See `mlos_core/optimizers/README.md
27<https://github.com/microsoft/MLOS/tree/main/mlos_core/mlos_core/optimizers/>`_
28for additional documentation and examples in the source tree.
29"""
31from enum import Enum
33import ConfigSpace
35from mlos_core.optimizers.bayesian_optimizers.smac_optimizer import SmacOptimizer
36from mlos_core.optimizers.flaml_optimizer import FlamlOptimizer
37from mlos_core.optimizers.optimizer import BaseOptimizer
38from mlos_core.optimizers.random_optimizer import RandomOptimizer
39from mlos_core.spaces.adapters import SpaceAdapterFactory, SpaceAdapterType
41__all__ = [
42 "OptimizerType",
43 "ConcreteOptimizer",
44 "SpaceAdapterType",
45 "OptimizerFactory",
46 "BaseOptimizer",
47 "RandomOptimizer",
48 "FlamlOptimizer",
49 "SmacOptimizer",
50]
53class OptimizerType(Enum):
54 """Enumerate supported mlos_core optimizers."""
56 RANDOM = RandomOptimizer
57 """An instance of :class:`~mlos_core.optimizers.random_optimizer.RandomOptimizer`
58 class will be used.
59 """
61 FLAML = FlamlOptimizer
62 """An instance of :class:`~mlos_core.optimizers.flaml_optimizer.FlamlOptimizer`
63 class will be used.
64 """
66 SMAC = SmacOptimizer
67 """An instance of
68 :class:`~mlos_core.optimizers.bayesian_optimizers.smac_optimizer.SmacOptimizer`
69 class will be used.
70 """
73ConcreteOptimizer = RandomOptimizer | FlamlOptimizer | SmacOptimizer
74"""
75Type alias for concrete optimizer classes.
77(e.g., :class:`~mlos_core.optimizers.bayesian_optimizers.smac_optimizer.SmacOptimizer`, etc.)
78"""
80DEFAULT_OPTIMIZER_TYPE = OptimizerType.FLAML
81"""Default optimizer type to use if none is specified."""
84class OptimizerFactory:
85 """Simple factory class for creating
86 :class:`~mlos_core.optimizers.optimizer.BaseOptimizer`-derived objects.
87 """
89 # pylint: disable=too-few-public-methods
91 @staticmethod
92 def create( # pylint: disable=too-many-arguments
93 *,
94 parameter_space: ConfigSpace.ConfigurationSpace,
95 optimization_targets: list[str],
96 optimizer_type: OptimizerType = DEFAULT_OPTIMIZER_TYPE,
97 optimizer_kwargs: dict | None = None,
98 space_adapter_type: SpaceAdapterType = SpaceAdapterType.IDENTITY,
99 space_adapter_kwargs: dict | None = None,
100 ) -> ConcreteOptimizer:
101 """
102 Create a new optimizer instance, given the parameter space, optimizer type, and
103 potential optimizer options.
105 Parameters
106 ----------
107 parameter_space : ConfigSpace.ConfigurationSpace
108 Input configuration space.
109 optimization_targets : list[str]
110 The names of the optimization targets to minimize.
111 optimizer_type : OptimizerType
112 Optimizer class as defined by Enum.
113 optimizer_kwargs : dict | None
114 Optional arguments passed in Optimizer class constructor.
115 space_adapter_type : SpaceAdapterType | None
116 Space adapter class to be used alongside the optimizer.
117 space_adapter_kwargs : dict | None
118 Optional arguments passed in SpaceAdapter class constructor.
120 Returns
121 -------
122 optimizer : ConcreteOptimizer
123 Instance of concrete optimizer class
124 (e.g., RandomOptimizer, FlamlOptimizer, SmacOptimizer, etc.).
125 """
126 if space_adapter_kwargs is None:
127 space_adapter_kwargs = {}
128 if optimizer_kwargs is None:
129 optimizer_kwargs = {}
131 space_adapter = SpaceAdapterFactory.create(
132 parameter_space=parameter_space,
133 space_adapter_type=space_adapter_type,
134 space_adapter_kwargs=space_adapter_kwargs,
135 )
137 optimizer: ConcreteOptimizer = optimizer_type.value(
138 parameter_space=parameter_space,
139 optimization_targets=optimization_targets,
140 space_adapter=space_adapter,
141 **optimizer_kwargs,
142 )
144 return optimizer