|
1
|
|
|
import os |
|
2
|
|
|
from pathlib import Path |
|
3
|
|
|
|
|
4
|
|
|
# List of algorithm names and corresponding class names |
|
5
|
|
|
algo_info = [ |
|
6
|
|
|
("downhill_simplex", "DownhillSimplexOptimizer"), |
|
7
|
|
|
("simulated_annealing", "SimulatedAnnealingOptimizer"), |
|
8
|
|
|
("direct_algorithm", "DirectAlgorithm"), |
|
9
|
|
|
("lipschitz_optimization", "LipschitzOptimizer"), |
|
10
|
|
|
("pattern_search", "PatternSearch"), |
|
11
|
|
|
("random_restart_hill_climbing", "RandomRestartHillClimbingOptimizer"), |
|
12
|
|
|
("random_search", "RandomSearchOptimizer"), |
|
13
|
|
|
("powells_method", "PowellsMethod"), |
|
14
|
|
|
("differential_evolution", "DifferentialEvolutionOptimizer"), |
|
15
|
|
|
("evolution_strategy", "EvolutionStrategyOptimizer"), |
|
16
|
|
|
("genetic_algorithm", "GeneticAlgorithmOptimizer"), |
|
17
|
|
|
("parallel_tempering", "ParallelTemperingOptimizer"), |
|
18
|
|
|
("particle_swarm_optimization", "ParticleSwarmOptimizer"), |
|
19
|
|
|
("spiral_optimization", "SpiralOptimization"), |
|
20
|
|
|
("bayesian_optimization", "BayesianOptimizer"), |
|
21
|
|
|
("forest_optimizer", "ForestOptimizer"), |
|
22
|
|
|
("tree_structured_parzen_estimators", "TreeStructuredParzenEstimators"), |
|
23
|
|
|
] |
|
24
|
|
|
|
|
25
|
|
|
BASE_DIR = Path("generated_opt_algos") |
|
26
|
|
|
|
|
27
|
|
|
|
|
28
|
|
|
# Template for the Python class file |
|
29
|
|
|
def create_class_file_content(class_name: str) -> str: |
|
30
|
|
|
return f'''from hyperactive.opt._adapters._gfo import _BaseGFOadapter |
|
31
|
|
|
|
|
32
|
|
|
|
|
33
|
|
|
class {class_name}(_BaseGFOadapter): |
|
34
|
|
|
|
|
35
|
|
|
def _get_gfo_class(self): |
|
36
|
|
|
"""Get the GFO class to use. |
|
37
|
|
|
|
|
38
|
|
|
Returns |
|
39
|
|
|
------- |
|
40
|
|
|
class |
|
41
|
|
|
The GFO class to use. One of the concrete GFO classes |
|
42
|
|
|
""" |
|
43
|
|
|
from gradient_free_optimizers import {class_name} |
|
44
|
|
|
|
|
45
|
|
|
return {class_name} |
|
46
|
|
|
''' |
|
47
|
|
|
|
|
48
|
|
|
|
|
49
|
|
|
# Main generation loop |
|
50
|
|
|
for name, class_name in algo_info: |
|
51
|
|
|
algo_folder = BASE_DIR / name |
|
52
|
|
|
algo_folder.mkdir(parents=True, exist_ok=True) |
|
53
|
|
|
|
|
54
|
|
|
init_file = algo_folder / "__init__.py" |
|
55
|
|
|
class_file = algo_folder / f"_{name}.py" |
|
56
|
|
|
|
|
57
|
|
|
# Create __init__.py (empty) |
|
58
|
|
|
init_file.touch(exist_ok=True) |
|
59
|
|
|
|
|
60
|
|
|
# Write the optimizer class file |
|
61
|
|
|
class_file.write_text(create_class_file_content(class_name)) |
|
62
|
|
|
|
|
63
|
|
|
print(f"Generated {len(algo_info)} folders in {BASE_DIR.resolve()}") |
|
64
|
|
|
|