Skip to content

Commit 5601022

Browse files
committed
v1
1 parent 7ec3aa5 commit 5601022

6 files changed

Lines changed: 68 additions & 9 deletions

File tree

modcma/c_maes/__init__.py

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from enum import Enum
2+
from dataclasses import dataclass
23

34
from .cmaescpp import (
45
constants,
@@ -20,6 +21,8 @@
2021

2122
from .cmaescpp.parameters import Settings, Modules # pyright: ignore[reportMissingModuleSource]
2223

24+
from ConfigSpace import ConfigurationSpace, Categorical, Integer, Float, NormalIntegerHyperparameter, NormalFloatHyperparameter
25+
2326

2427
def get_module_options(name: str) -> tuple:
2528
if not hasattr(Modules, name):
@@ -29,13 +32,13 @@ def get_module_options(name: str) -> tuple:
2932
if isinstance(default_value, bool):
3033
return (default_value, not default_value)
3134

32-
if issubclass(default_value.__class__, Enum):
35+
module_class = default_value.__class__
36+
if issubclass(module_class, Enum):
3337
other_values = [
34-
x for x in default_value.__members__.items()
38+
x for x in module_class.__members__.values()
3539
if x is not default_value
3640
]
3741
return tuple([default_value] + other_values)
38-
breakpoint()
3942
raise TypeError(f"{name} has a unparsable type {type(default_value)}")
4043

4144
def get_all_module_options() -> dict:
@@ -44,3 +47,41 @@ def get_all_module_options() -> dict:
4447
for name in dir(Modules)
4548
if not name.startswith("_")
4649
}
50+
51+
def make_numeric_parameter(name: str, dim: int, lb: float = 0, ub: float = float("inf")) -> NormalIntegerHyperparameter | NormalFloatHyperparameter:
52+
settings = Parameters(Settings(dim))
53+
default = getattr(settings.weights, name, None)
54+
print(name, default)
55+
56+
57+
58+
59+
def get_all_numeric_options(dim: int) -> dict[str, NormalIntegerHyperparameter | NormalFloatHyperparameter]:
60+
return {
61+
"sigma0": make_numeric_parameter("sigma0", dim),
62+
"lambda0": make_numeric_parameter("lambda0", dim, 4),
63+
"mu0": make_numeric_parameter("mu0", dim, 4),
64+
"cs": make_numeric_parameter("cs", dim, 0, 1.0),
65+
"cc": make_numeric_parameter("cc", dim, 0, 1.0),
66+
"cmu": make_numeric_parameter("cmu", dim, 0, 1.0),
67+
"c1": make_numeric_parameter("c1", dim, 0, 1.0),
68+
"damps": make_numeric_parameter("damps", dim, 0, 10.0),
69+
"acov": make_numeric_parameter("acov", dim, 0, 10.0),
70+
}
71+
72+
def get_configspace(dim: int = None, only_modules: bool = False) -> ConfigurationSpace:
73+
cspace = ConfigurationSpace()
74+
for name, options in get_all_module_options().items():
75+
cspace.add(Categorical(name, options, default=options[0]))
76+
77+
if only_modules:
78+
return cspace
79+
80+
if dim is None:
81+
print("warning")
82+
dim = 1
83+
84+
for name, options in get_all_numeric_options(dim).items():
85+
cspace.add()
86+
87+
return cspace

modcma/c_maes/cmaescpp/options.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class SampleTranformerType:
7575
class CenterPlacement:
7676
__members__: ClassVar[dict] = ... # read-only
7777
UNIFORM: ClassVar[CenterPlacement] = ...
78+
CENTER: ClassVar[CenterPlacement] = ...
7879
X0: ClassVar[CenterPlacement] = ...
7980
ZERO: ClassVar[CenterPlacement] = ...
8081
__entries: ClassVar[dict] = ...

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
[build-system]
22
requires = [
3-
"setuptools>=42",
4-
"wheel",
5-
"pybind11>=2.6.0",
3+
"configspace",
64
"ioh>=0.3.14",
75
"numpy>=1.18.5, <2.0.0",
86
"mypy",
97
"pybind11>=2.6.0",
8+
"setuptools>=42",
109
"scipy>=1.5.1",
10+
"wheel",
1111
]
1212

1313
build-backend = "setuptools.build_meta"

scripts/tuning/tuning_smac.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ def cc(lambda_, mu, weight_option):
9393

9494
if use_learning_rates:
9595
cs_param = NormalFloatHyperparameter(
96-
"cs", lower=0.0, upper=1.5, default_value=0.3, mu=0.3, sigma=0.2)
96+
"cs", lower=0.0, upper=1.5, default_value=0.3, mu=0.3, sigma=0.2
97+
)
9798

9899
# Define the conditional normal float hyperparameter
99100
c1_param = MultiConditionalNormalFloatHyperparameter("c1", ["lambda_", "mu", "weights_option"], c1, lambda lambda_, mu, weight_option: 0.1, lower=0.0001, upper=1.0, default_value=c1(default_lambda, default_lambda // 2, "default"))

src/interface.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,6 @@ void define_parameters(py::module &main)
627627
py::arg("acov") = std::nullopt,
628628
py::arg("verbose") = false,
629629
py::arg("always_compute_eigv") = false
630-
631630
)
632631
.def_readonly("dim", &Settings::dim)
633632
.def_readonly("modules", &Settings::modules)

tests/test_c_tuning.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,24 @@
44

55
class TestTuning(unittest.TestCase):
66
def test_module_options(self):
7-
self.assertIsInstance(c_maes.get_all_module_options(), dict)
7+
options = c_maes.get_all_module_options()
8+
self.assertIsInstance(options, dict)
9+
self.assertEqual(options, options | {"active": (False, True)})
10+
self.assertEqual(options, options | {"elitist": (False, True)})
11+
self.assertEqual(options, options | {"orthogonal": (False, True)})
12+
self.assertEqual(options, options | {"sequential_selection": (False, True)})
13+
self.assertEqual(options, options | {"threshold_convergence": (False, True)})
14+
self.assertEqual(options, options | {"sample_sigma": (False, True)})
15+
self.assertEqual(options, options | {"repelling_restart": (False, True)})
16+
17+
def test_numeric_options(self):
18+
options = c_maes.get_all_numeric_options()
19+
self.assertIsInstance(options, dict)
20+
21+
def test_configspace(self):
22+
cspace = c_maes.get_configspace()
23+
print(cspace)
24+
825

926
if __name__ == "__main__":
1027
unittest.main()

0 commit comments

Comments
 (0)