Optimizer using Grid Search¶
GridSearchOptimizer¶
-
class
l2l.optimizers.gridsearch.optimizer.
GridSearchOptimizer
(traj, optimizee_create_individual, optimizee_fitness_weights, parameters, optimizee_bounding_func=None)[source]¶ Bases:
l2l.optimizers.optimizer.Optimizer
This class implements a basic grid search optimizer. It runs the optimizee on a given grid of parameter values and returns the best fitness found. moreover, this can also simply be used to run a grid search and process the results stored in the traj in any manner desired.
Notes regarding what it does -
- This algorithm does not do any kind of adaptive searching and thus the concept of generations does not apply
per se. That said, it is currently implemented as a series of runs in a single generation. All of these runs
are declared in the constructor itself. The
Optimizer.post_process()
function simply prints the individual with the maximal fitness. - This algorithm doesnt make use of self.eval_pop and
Optimizer._expand_trajectory()
simply because the cartesian product can be used more efficiently directly. (Imagine having to split a dict of 10000 parameter combinations into 10000 small Individual-Dict`s and storing into eval_pop only to join them and call `traj.f_expand() inOptimizer._expand_trajectory()
)
Parameters: - traj (Trajectory) – Use this trajectory to store the parameters of the specific runs. The parameters should be initialized based on the values in parameters
- optimizee_create_individual – A function which when called returns one instance of parameter (or “individual”)
- optimizee_fitness_weights – The weights which should be multiplied with the fitness returned from the
Optimizee
– one for each element of the fitness (fitness can be multi-dimensional). If some element is negative, the Optimizer minimizes that element of fitness instead of maximizing. By default, the Optimizer maximizes all fitness dimensions. - parameters – An instance of
GridSearchParameters
-
g
= None¶ The current generation number
-
eval_pop
= None¶ The population (i.e. list of individuals) to be evaluated at the next iteration
- This algorithm does not do any kind of adaptive searching and thus the concept of generations does not apply
per se. That said, it is currently implemented as a series of runs in a single generation. All of these runs
are declared in the constructor itself. The
GridSearchParameters¶
-
class
l2l.optimizers.gridsearch.optimizer.
GridSearchParameters
¶ Bases:
tuple
Parameters: param_grid (dict) – This is the data structure specifying the grid over which to search. This should be a dictionary as follows:
optimizee_param_grid['param_name'] = (lower_bound, higher_bound, n_steps)
Where the interval [lower_bound, upper_bound] is divided into n_steps intervals thereby providing n_steps + 1 points for the grid.
Note that there must be as many keys as there are in the Individual-Dict returned by the function
Optimizee.create_individual()
. Also, if any of the parameters of the individuals is an array, then the above grid specification applies to each element of the array.-
param_grid
¶
-