1
|
|
|
# Author: Simon Blanke |
2
|
|
|
# Email: [email protected] |
3
|
|
|
# License: MIT License |
4
|
|
|
|
5
|
|
|
from .util import merge_dicts |
6
|
|
|
from numpy.random import normal |
7
|
|
|
|
8
|
|
|
from .optimizers.sequence_model.surrogate_models import ( |
9
|
|
|
RandomForestRegressor, |
10
|
|
|
ExtraTreesRegressor, |
11
|
|
|
GPR, |
12
|
|
|
) |
13
|
|
|
|
14
|
|
|
tree_regressor = { |
15
|
|
|
"random_forst": RandomForestRegressor(), |
16
|
|
|
"extra_tree": ExtraTreesRegressor(), |
17
|
|
|
} |
18
|
|
|
|
19
|
|
|
|
20
|
|
|
class Arguments: |
21
|
|
|
def __init__(self, *args, **kwargs): |
22
|
|
|
kwargs_opt = { |
23
|
|
|
# HillClimbingOptimizer |
24
|
|
|
"epsilon": 0.05, |
25
|
|
|
"climb_dist": normal, |
26
|
|
|
"n_neighbours": 1, |
27
|
|
|
# StochasticHillClimbingOptimizer |
28
|
|
|
"p_down": 0.3, |
29
|
|
|
# TabuOptimizer |
30
|
|
|
"tabu_memory": 3, |
31
|
|
|
# RandomRestartHillClimbingOptimizer |
32
|
|
|
"n_restarts": 10, |
33
|
|
|
# RandomAnnealingOptimizer |
34
|
|
|
"epsilon_mod": 10, |
35
|
|
|
"annealing_rate": 0.99, |
36
|
|
|
# SimulatedAnnealingOptimizer |
37
|
|
|
"start_temp": 1, |
38
|
|
|
"norm_factor": "adaptive", |
39
|
|
|
# StochasticTunnelingOptimizer |
40
|
|
|
"gamma": 0.5, |
41
|
|
|
# ParallelTemperingOptimizer |
42
|
|
|
"system_temperatures": [0.1, 1, 10, 100], |
43
|
|
|
"n_swaps": 10, |
44
|
|
|
# ParticleSwarmOptimizer |
45
|
|
|
"n_particles": 10, |
46
|
|
|
"inertia": 0.5, |
47
|
|
|
"cognitive_weight": 0.5, |
48
|
|
|
"social_weight": 0.5, |
49
|
|
|
# EvolutionStrategyOptimizer |
50
|
|
|
"individuals": 10, |
51
|
|
|
"mutation_rate": 0.7, |
52
|
|
|
"crossover_rate": 0.3, |
53
|
|
|
# BayesianOptimizer |
54
|
|
|
"warm_start_smbo": False, |
55
|
|
|
"xi": 0.01, |
56
|
|
|
"gpr": GPR(), |
57
|
|
|
# TreeStructuredParzenEstimators |
58
|
|
|
"start_up_evals": 10, |
59
|
|
|
"gamma_tpe": 0.3, |
60
|
|
|
"tree_regressor": "random_forst", |
61
|
|
|
} |
62
|
|
|
|
63
|
|
|
self.kwargs_opt = merge_dicts(kwargs_opt, kwargs) |
64
|
|
|
|
65
|
|
|
def set_opt_args(self, n_iter): |
66
|
|
|
self.epsilon = self.kwargs_opt["epsilon"] |
67
|
|
|
self.climb_dist = self.kwargs_opt["climb_dist"] |
68
|
|
|
self.n_neighbours = self.kwargs_opt["n_neighbours"] |
69
|
|
|
|
70
|
|
|
self.p_down = self.kwargs_opt["p_down"] |
71
|
|
|
|
72
|
|
|
self.tabu_memory = self.kwargs_opt["tabu_memory"] |
73
|
|
|
|
74
|
|
|
self.n_restarts = self.kwargs_opt["n_restarts"] |
75
|
|
|
self.n_iter_restart = int(n_iter / self.n_restarts) |
76
|
|
|
|
77
|
|
|
self.epsilon_mod = self.kwargs_opt["epsilon_mod"] |
78
|
|
|
self.annealing_rate = self.kwargs_opt["annealing_rate"] |
79
|
|
|
self.start_temp = self.kwargs_opt["start_temp"] |
80
|
|
|
self.norm_factor = self.kwargs_opt["norm_factor"] |
81
|
|
|
self.gamma = self.kwargs_opt["gamma"] |
82
|
|
|
|
83
|
|
|
self.system_temperatures = self.kwargs_opt["system_temperatures"] |
84
|
|
|
self.n_swaps = self.kwargs_opt["n_swaps"] |
85
|
|
|
self.n_iter_swap = int(n_iter / self.n_swaps) |
86
|
|
|
|
87
|
|
|
self.n_particles = self.kwargs_opt["n_particles"] |
88
|
|
|
self.inertia = self.kwargs_opt["inertia"] |
89
|
|
|
self.cognitive_weight = self.kwargs_opt["cognitive_weight"] |
90
|
|
|
self.social_weight = self.kwargs_opt["social_weight"] |
91
|
|
|
|
92
|
|
|
self.individuals = self.kwargs_opt["individuals"] |
93
|
|
|
self.mutation_rate = self.kwargs_opt["mutation_rate"] |
94
|
|
|
self.crossover_rate = self.kwargs_opt["crossover_rate"] |
95
|
|
|
|
96
|
|
|
self.warm_start_smbo = self.kwargs_opt["warm_start_smbo"] |
97
|
|
|
self.xi = self.kwargs_opt["xi"] |
98
|
|
|
self.gpr = self.kwargs_opt["gpr"] |
99
|
|
|
|
100
|
|
|
self.start_up_evals = self.kwargs_opt["start_up_evals"] |
101
|
|
|
self.gamma_tpe = self.kwargs_opt["gamma_tpe"] |
102
|
|
|
self.tree_regressor = tree_regressor[self.kwargs_opt["tree_regressor"]] |
103
|
|
|
|