Source code for smt_optim.benchmarks.registry

import inspect
import warnings

from smt_optim.benchmarks.base import BenchmarkProblem

from .misc import original
from .misc import gano
# from .misc import avt
# from .misc import modified_avt
# from .misc import edge_cases
from .sfu import many_local_minima, bowl_shaped
from .gotestproblems import constrained
from .avt311 import avt311
from .misc import mixvar_branin

available = {}

def _register_from_module(module):
    for name, obj in inspect.getmembers(module, inspect.isclass):
        if issubclass(obj, BenchmarkProblem) and obj is not BenchmarkProblem:
            available[obj.__name__] = obj()

_register_from_module(original)
_register_from_module(gano)
# _register_from_module(avt)
# _register_from_module(modified_avt)
# _register_from_module(edge_cases)

_register_from_module(many_local_minima)
_register_from_module(bowl_shaped)
_register_from_module(constrained)
_register_from_module(avt311)
_register_from_module(mixvar_branin)


# def list_problems(**criteria):
#
#     results = []
#
#     for prob in available.values():
#         if all(getattr(prob, k) == v for k, v in criteria.items()):
#             results.append(prob)
#
#     return results

[docs] def list_problems(n: list[int] = None, num_obj: list[int] = [1, 1], num_dim: list[int] = None, num_cstr: list[int] = None, num_fidelity: list[int] = None, tags: list[str] = None) -> list[BenchmarkProblem]: """ Retrieves all benchmark problems matching the specified filtering criteria. Parameters ---------- n : list[int], optional Deprecated alias for ``num_dim``. A two-element list ``[min_num_dim, max_num_dim]`` specifying the inclusive range for the number of design variables. .. warning:: ``n`` is deprecated and will be removed in a future release. Use ``num_dim`` instead. num_obj : list[int], optional A two-element list ``[min_num_obj, max_num_obj]`` specifying the inclusive range for the number of objectives. If ``None``, no filtering is applied on the number of objectives. num_dim : list[int], optional A two-element list ``[min_num_dim, max_num_dim]`` specifying the inclusive range for the number of design variables. If ``None``, no filtering is applied on the number of dimensions. num_cstr : list[int], optional A two-element list ``[min_num_cstr, max_num_cstr]`` specifying the inclusive range for the number of constraints. If ``None``, no filtering is applied on the number of constraints. num_fidelity : list[int], optional A two-element list ``[min_num_fidelity, max_num_fidelity]`` specifying the inclusive range for the number of fidelity levels. If ``None``, no filtering is applied on the number of fidelities. tags : list[str], optional A list of tags used to filter benchmark problems. A problem is returned if it contains all specified tags. If ``None``, no tag filtering is applied. Returns ------- list[BenchmarkProblem] A list of benchmark problem instances matching the specified filtering criteria. Examples -------- Retrieve all single-objective, mono-fidelity problems, with no constraints: >>> problems = list_problems(num_obj=[1, 1], num_cstr=[0, 0], num_fidelity=[1, 1]) Retrieve all single-objective, multi-fidelity problems: >>> problems = list_problems(num_fidelity=[2, np.inf]) Retrieve all dimension variable benchmark problems: >>> problems = list_problems(tags=["n_variable"]) """ results = [] if n is not None: warnings.deprecated("`n` is deprecated and will be removed in a future release. Use `num_dim` instead.") num_dim = n for prob in available.values(): try: if num_dim is not None: if prob.num_dim < num_dim[0] or prob.num_dim > num_dim[1]: continue if num_cstr is not None: if prob.num_cstr < num_cstr[0] or prob.num_cstr > num_cstr[1]: continue if num_obj is not None: if prob.num_obj < num_obj[0] or prob.num_obj > num_obj[1]: continue if num_fidelity is not None: if prob.num_fidelity < num_fidelity[0] or prob.num_fidelity > num_fidelity[1]: continue if tags is not None: if not set(tags).issubset(set(prob.tags)): continue results.append(prob) except: continue return results
[docs] def get_problem(name: str) -> BenchmarkProblem: """ Retrieves a single BenchmarkProblem object by its unique name. Parameters ---------- name : str The name of the problem to retrieve. Returns ------- result : BenchmarkProblem or None The retrieved BenchmarkProblem object, or None if no matching problem is found. """ return available.get(name)