culebra.trainer.ea.abc.MultiPopEA class¶
- class MultiPopEA(fitness_function: FitnessFunction, subtrainer_cls: type[SingleSpeciesTrainer], max_num_iters: int | None = None, custom_termination_func: Callable[[SingleSpeciesTrainer], bool] | None = None, num_subtrainers: int | None = None, representation_size: int | None = None, representation_freq: int | None = None, representation_topology_func: Callable[[int, int, Any], list[int]] | None = None, representation_topology_func_params: dict[str, Any] | None = None, representation_selection_func: Callable[[list[Solution], Any], Solution] | None = None, representation_selection_func_params: dict[str, Any] | None = None, checkpoint_activation: bool | None = None, checkpoint_freq: int | None = None, checkpoint_filename: str | None = None, verbosity: bool | None = None, random_seed: int | None = None, **subtrainer_params: Any)¶
Bases:
DistributedTrainerCreate a new trainer.
- Parameters:
fitness_function (FitnessFunction) – The training fitness function
subtrainer_cls (type[SingleSpeciesTrainer]) – Single-species trainer class to handle the subtrainers.
max_num_iters (int) – Maximum number of iterations. If omitted,
_default_max_num_iterswill be used. Defaults toNonecustom_termination_func (Callable) – Custom termination criterion. If omitted,
_default_termination_func()is used. Defaults toNonenum_subtrainers (int) – The number of subtrainers. If omitted,
_default_num_subtrainerswill be used. Defaults toNonerepresentation_size (int) – Number of representative solutions that will be sent to the other subtrainers. If omitted,
_default_representation_sizewill be used. Defaults toNonerepresentation_freq (int) – Number of iterations between representatives sendings. If omitted,
_default_representation_freqwill be used. Defaults toNonerepresentation_topology_func (Callable) – Topology function for representatives sending. If omitted,
_default_representation_topology_funcwill be used. Defaults toNonerepresentation_topology_func_params (dict) – Parameters to obtain the destinations with the topology function. If omitted,
_default_representation_topology_func_paramswill be used. Defaults toNonerepresentation_selection_func (Callable) – Policy function to choose the representatives from each subtrainer. If omitted,
_default_representation_selection_funcwill be used. Defaults toNonerepresentation_selection_func_params (dict) – Parameters to obtain the representatives with the selection policy function. If omitted,
_default_representation_selection_func_paramswill be used. Defaults toNonecheckpoint_activation (bool) – Checkpoining activation. If omitted,
_default_checkpoint_activationwill be used. Defaults toNonecheckpoint_freq (int) – The checkpoint frequency. If omitted,
_default_checkpoint_freqwill be used. Defaults toNonecheckpoint_filename (str) – The checkpoint file path. If omitted,
_default_checkpoint_filenamewill be used. Defaults toNoneverbosity (bool) – The verbosity. If omitted,
_default_verbositywill be used. Defaults toNonesubtrainer_params (dict) – Custom parameters for the subtrainers trainer
- Raises:
TypeError – If any argument is not of the appropriate type
ValueError – If any argument has an incorrect value
Class attributes¶
- MultiPopEA.objective_stats = {'Avg': <function mean>, 'Max': <function max>, 'Min': <function min>, 'Std': <function std>}¶
Statistics calculated for each objective.
- MultiPopEA.stats_names = ('Iter', 'Pop', 'NEvals')¶
Statistics calculated each iteration.
Class methods¶
- classmethod MultiPopEA.load(filename: str) Base¶
Load a serialized object from a file.
- Parameters:
filename (str) – The file name.
- Returns:
The loaded object
- Raises:
TypeError – If filename is not a valid file name
ValueError – If the filename extension is not
SERIALIZED_FILE_EXTENSION
Properties¶
- property MultiPopEA.checkpoint_filename: str¶
Checkpoint file path.
- Return type:
- Setter:
Modify the checkpoint file path
- Parameters:
value (str) – New value for the checkpoint file path. If set to
None,_default_checkpoint_filenameis chosen- Raises:
TypeError – If value is not a valid file name
ValueError – If the value extension is not
SERIALIZED_FILE_EXTENSION
- property MultiPopEA.checkpoint_freq: int¶
Checkpoint frequency.
- Return type:
- Setter:
Modify the checkpoint frequency
- Parameters:
value (int) – New value for the checkpoint frequency. If set to
None,_default_checkpoint_freqis chosen- Raises:
TypeError – If value is not an integer
ValueError – If value is not a positive number
- property MultiPopEA.container: Trainer | None¶
Container of this trainer.
The trainer container is only used by distributed trainers. For the rest of trainers defaults to
None.
- property MultiPopEA.custom_termination_func: Callable[[Trainer], bool] | None¶
Custom termination criterion.
Although the trainer will always stop when the
max_num_itersare reached, a custom termination criterion can be set to detect convergente and stop the trainer earlier. This custom termination criterion must be a function which receives the trainer as its unique argument and returns a boolean value,Trueif the search should terminate orFalseotherwise.If more than one arguments are needed to define the termination condition,
functools.partial()can be used:from functools import partial def my_crit(trainer, max_iters): if trainer.current_iter < max_iters: return False return True trainer.custom_termination_func = partial(my_crit, max_iters=10)
- property MultiPopEA.fitness_function: FitnessFunction¶
Training fitness function.
- Return type:
- Setter:
Set a new fitness function
- Parameters:
func (FitnessFunction) – The new training fitness function
- Raises:
TypeError – If func is not a valid fitness function
- property MultiPopEA.index: int¶
Trainer index.
The trainer index is only used by distributed trainers. For the rest of trainers
_default_indexis used.- Return type:
- Setter:
Set a new value for trainer index.
- Parameters:
value (int) – New value for the trainer index. If set to
None,_default_indexis chosen- Raises:
TypeError – If value is not an integer
ValueError – If value is a negative number
- property MultiPopEA.max_num_iters: int¶
Maximum number of iterations.
- Return type:
- Setter:
Set a new value for the maximum number of iterations
- Parameters:
value (int) – The new maximum number of iterations. If set to
None, the default maximum number of iterations,_default_max_num_iters, is chosen- Raises:
TypeError – If value is not an integer
ValueError – If value is not a positive number
- property MultiPopEA.num_subtrainers: int¶
Number of subtrainers.
- Return type:
- Setter:
Set a new value for the number of subtrainers
- Parameters:
value (int) – The new number of subtrainers. If set to
None,_default_num_subtrainersis chosen- Raises:
TypeError – If value is not an integer
ValueError – If value is not a positive number
- property MultiPopEA.representation_freq: int¶
Number of iterations between representatives sendings.
- Return type:
- Setter:
Set a new value for the frequency
- Parameters:
value (int) – The new frequency. If set to
None,_default_representation_freqis chosen- Raises:
TypeError – If value is not an integer
ValueError – If value is not a positive number
- property MultiPopEA.representation_selection_func: Callable[[list[Solution], Any], Solution]¶
Representation selection policy function.
- Returns:
A function that chooses which solutions are selected as representatives of each subtrainer
- Return type:
- Setter:
Set new representation selection policy function.
- Parameters:
func (Callable) – The new function. If set to
None,_default_representation_selection_funcis chosen- Raises:
TypeError – If func is not callable
- property MultiPopEA.representation_selection_func_params: dict[str, Any]¶
Parameters of the representation selection function.
- property MultiPopEA.representation_size: int¶
Representation size.
- Returns:
The number of representatives sent to the other subtrainers
- Return type:
- Setter:
Set a new representation size
- Parameters:
size (int) – The new size. If set to
None,_default_representation_sizeis chosen- Raises:
TypeError – If size is not an integer number
ValueError – If size is not positive
- property MultiPopEA.representation_topology_func: Callable[[int, int, Any], list[int]]¶
Representation topology function.
- Return type:
- Setter:
Set new representation topology function
- Parameters:
func (Callable) – The new function. If set to
None,_default_representation_topology_funcis chosen- Raises:
TypeError – If func is not callable
- property MultiPopEA.representation_topology_func_params: dict[str, Any]¶
Parameters of the representation topology function.
- property MultiPopEA.representatives: list[list[Solution | None]] | None¶
Representatives of the other species.
Only used by cooperative trainers. If the trainer does not use representatives,
Noneis returned.
- property MultiPopEA.subtrainer_checkpoint_filenames: Generator[str, None, None]¶
Checkpoint file name for all the subtrainers.
- property MultiPopEA.subtrainer_cls: type[SingleSpeciesTrainer]¶
Trainer class to handle the subtrainers.
Each subtrainer will be handled by a single-species trainer.
- Return type:
- Setter:
Set a new trainer class to handle the subtrainers
- Parameters:
cls (type[SingleSpeciesTrainer]) – The new class
- Raises:
TypeError – If cls is not a valid trainer class
- property MultiPopEA.subtrainers: list[SingleSpeciesTrainer] | None¶
Subtrainers.
One single-species trainer for each subtrainer.
- Return type:
Private properties¶
- property MultiPopEA._default_checkpoint_activation: bool¶
Default checkpointing activation.
- Returns:
- Return type:
- property MultiPopEA._default_checkpoint_filename: str¶
Default checkpointing file name.
- Returns:
- Return type:
- property MultiPopEA._default_checkpoint_freq: int¶
Default checkpointing frequency.
- Returns:
- Return type:
- property MultiPopEA._default_max_num_iters: int¶
Default maximum number of iterations.
- Returns:
- Return type:
- property MultiPopEA._default_num_subtrainers: int¶
Default number of subtrainers.
- Returns:
- Return type:
- property MultiPopEA._default_representation_freq: int¶
Default number of iterations between representatives sending.
- Returns:
- Return type:
- property MultiPopEA._default_representation_selection_func: Callable[[list[Solution], Any], Solution]¶
Default selection policy function to choose the representatives.
- Returns:
- Return type:
- property MultiPopEA._default_representation_selection_func_params: dict[str, Any]¶
Default parameters for the representatives selection policy function.
- Returns:
- Return type:
- property MultiPopEA._default_representation_size: int¶
Default number of representatives sent to the other subtrainers.
- Returns:
- Return type:
- property MultiPopEA._default_representation_topology_func: Callable[[int, int, Any], list[int]]¶
Default topology function.
This property must be overridden by subclasses to return a correct value.
- Return type:
- Raises:
NotImplementedError – If has not been overridden
- property MultiPopEA._default_representation_topology_func_params: dict[str, Any]¶
Default parameters for the default topology function.
This property must be overridden by subclasses to return a correct value.
- Return type:
- Raises:
NotImplementedError – If has not been overridden
Static methods¶
- abstract static MultiPopEA.receive_representatives(subtrainer: SingleSpeciesTrainer) None¶
Receive representative solutions.
This method must be overridden by subclasses.
- Parameters:
subtrainer (SingleSpeciesTrainer) – The subtrainer receiving representatives
- Raises:
NotImplementedError – If has not been overridden
- abstract static MultiPopEA.send_representatives(subtrainer: SingleSpeciesTrainer) None¶
Send representatives.
This method must be overridden by subclasses.
- Parameters:
subtrainer (SingleSpeciesTrainer) – The sender subtrainer
- Raises:
NotImplementedError – If has not been overridden
Methods¶
- MultiPopEA.best_representatives() list[list[Solution]] | None¶
Return a list of representatives from each species.
Only used for cooperative trainers.
- abstract MultiPopEA.best_solutions() tuple[HallOfFame]¶
Get the best solutions found for each species.
This method must be overridden by subclasses to return a correct value.
- Returns:
One Hall of Fame for each species
- Return type:
- Raises:
NotImplementedError – If has not been overridden
- MultiPopEA.dump(filename: str) None¶
Serialize this object and save it to a file.
- Parameters:
filename (str) – The file name.
- Raises:
TypeError – If filename is not a valid file name
ValueError – If the filename extension is not
SERIALIZED_FILE_EXTENSION
- MultiPopEA.evaluate(sol: Solution, fitness_func: FitnessFunction | None = None, index: int | None = None, representatives: Sequence[Sequence[Solution | None]] | None = None) None¶
Evaluate one solution.
Its fitness will be modified according with the fitness function results. Besides, if called during training, the number of evaluations will be also updated.
- Parameters:
sol (Solution) – The solution
fitness_func (FitnessFunction) – The fitness function. If omitted, the default training fitness function (
fitness_function) is usedindex (int) – Index where sol should be inserted in the representatives sequence to form a complete solution for the problem. If omitted,
indexis usedrepresentatives (Sequence[Sequence[Solution]]) – Sequence of representatives of other species or
None(if no representatives are needed to evaluate sol). If omitted, the current value ofrepresentativesis used
- MultiPopEA.reset() None¶
Reset the trainer.
Delete the state of the trainer (with
_reset_state()) and also all the internal data structures needed to perform the search (with_reset_internals()).This method should be invoqued each time a hyper parameter is modified.
- MultiPopEA.test(best_found: Sequence[HallOfFame], fitness_func: FitnessFunction | None = None, representatives: Sequence[Sequence[Solution]] | None = None) None¶
Apply the test fitness function to the solutions found.
Update the solutions in best_found with their test fitness.
- Parameters:
best_found (Sequence[HallOfFame]) – The best solutions found for each species. One
HallOfFamefor each speciesfitness_func (FitnessFunction) – Fitness function used to evaluate the final solutions. If ommited, the default training fitness function (
fitness_function) will be usedrepresentatives (Sequence[Sequence[Solution]]) – Sequence of representatives of other species or
None(if no representatives are needed). If omitted, the current value ofrepresentativesis used
- Raises:
TypeError – If any parameter has a wrong type
ValueError – If any parameter has an invalid value.
- MultiPopEA.train(state_proxy: DictProxy | None = None) None¶
Perform the training process.
- Parameters:
state_proxy (DictProxy) – dictionary proxy to copy the output state of the trainer procedure. Only used if train is executed within a
multiprocess.Process. Defaults toNone
Private methods¶
- MultiPopEA._default_termination_func() bool¶
Default termination criterion.
- Returns:
Trueifmax_num_itersiterations have been run- Return type:
- abstract MultiPopEA._do_iteration() None¶
Implement an iteration of the search process.
This abstract method should be implemented by subclasses in order to implement the desired behavior.
- MultiPopEA._do_iteration_stats() None¶
Perform the iteration stats.
This method should be implemented by subclasses in order to perform the adequate stats.
- MultiPopEA._finish_iteration() None¶
Finish an iteration.
Finish the iteration metrics (number of evaluations, execution time) after each iteration is run.
- MultiPopEA._finish_search() None¶
Finish the search process.
This method is called after the search has finished. It can be overridden to perform any treatment of the solutions found.
- abstract MultiPopEA._generate_subtrainers() None¶
Generate the subtrainers.
Also assign an
indexand acontainerto eachSingleSpeciesTrainersubtrainer, and change the subtrainers’checkpoint_filenameaccording to the container checkpointing file name and each subtrainer index.Finally, the
_preprocess_iteration()and_postprocess_iteration()methods of thesubtrainer_clsclass are dynamically overridden, in order to allow solutions exchange between subtrainers, if necessary.This method must be overridden by subclasses.
- Raises:
NotImplementedError – If has not been overridden
- MultiPopEA._get_state() dict[str, Any]¶
Return the state of this trainer.
Default state is a dictionary composed of the values of the
logbook,num_evals,runtime,current_iter, andrepresentativestrainer properties, along with a private boolean attribute that informs if the search has finished and also the states of therandomandnumpy.randommodules.If subclasses use any more properties to keep their state, the
_get_state()and_set_state()methods must be overridden to take into account such properties.- Return type:
- MultiPopEA._init_internals() None¶
Set up the trainer internal data structures to start searching.
Overridden to create the subtrainers and communication queues.
- MultiPopEA._init_representatives() None¶
Init the representatives of the other species.
Only used for cooperative approaches, which need representatives of all the species to form a complete solution for the problem. Cooperative subclasses of the
Trainerclass should override this method to get the representatives of the other species initialized.
- MultiPopEA._init_search() None¶
Init the search process.
Initialize the state of the trainer (with
_init_state()) and all the internal data structures needed (with_init_internals()) to perform the search.
- MultiPopEA._init_state() None¶
Init the trainer state.
If there is any checkpoint file, the state is initialized from it with the
_load_state()method. Otherwise a new initial state is generated with the_new_state()method.
- MultiPopEA._load_state() None¶
Load the state of the last checkpoint.
- Raises:
Exception – If the checkpoint file can’t be loaded
- MultiPopEA._new_state() None¶
Generate a new trainer state.
Overridden to set the logbook to
None, since the final logbook will be generated from the subtrainers’ logbook, once the trainer has finished.
- MultiPopEA._postprocess_iteration() None¶
Postprocess after doing the iteration.
Subclasses should override this method to make any postprocessment after performing an iteration.
- MultiPopEA._preprocess_iteration() None¶
Preprocess before doing the iteration.
Subclasses should override this method to make any preprocessment before performing an iteration.
- MultiPopEA._reset_internals() None¶
Reset the internal structures of the trainer.
Overridden to reset the subtrainers and communication queues.
- MultiPopEA._reset_state() None¶
Reset the trainer state.
If subclasses overwrite the
_new_state()method to add any new property to keep their state, this method should also be overridden to reset the full state of the trainer.
- MultiPopEA._save_state() None¶
Save the state at a new checkpoint.
- Raises:
Exception – If the checkpoint file can’t be written
- MultiPopEA._search() None¶
Apply the search algorithm.
Execute the trainer until the termination condition is met. Each iteration is composed by the following steps:
- MultiPopEA._set_cooperative_fitness(sol: Solution, fitness_trials_values: [Sequence[tuple[float]]]) None¶
Estimate a solution fitness from multiple evaluation trials.
Applies an average of the fitness trials values. Trainers requiring another estimation should override this method.
- MultiPopEA._set_state(state: dict[str, Any]) None¶
Set the state of this trainer.
If subclasses use any more properties to keep their state, the
_get_state()and_set_state()methods must be overridden to take into account such properties.- Parameters:
state (dict) – The last loaded state
- MultiPopEA._start_iteration() None¶
Start an iteration.
Prepare the iteration metrics (number of evaluations, execution time) before each iteration is run.
- MultiPopEA._termination_criterion() bool¶
Control the search termination.
- Returns:
Trueif either the default termination criterion or a custom termination criterion is met. The default termination criterion is implemented by the_default_termination_func()method. Another custom termination criterion can be set withcustom_termination_funcmethod.- Return type:

