culebra.trainer.ea.NSGA
class¶
- class NSGA(solution_cls: Type[Individual], species: Species, fitness_function: FitnessFunction, max_num_iters: int | None = None, custom_termination_func: Callable[[NSGA], bool] | None = None, pop_size: int | None = None, crossover_func: Callable[[Individual, Individual], Tuple[Individual, Individual]] | None = None, mutation_func: Callable[[Individual, float], Tuple[Individual]] | None = None, selection_func: Callable[[List[Individual], int, Any], List[Individual]] | None = None, crossover_prob: float | None = None, mutation_prob: float | None = None, gene_ind_mutation_prob: float | None = None, selection_func_params: Dict[str, Any] | None = None, nsga3_reference_points_p: int | None = None, nsga3_reference_points_scaling: float | None = None, checkpoint_enable: bool | None = None, checkpoint_freq: int | None = None, checkpoint_filename: str | None = None, verbose: bool | None = None, random_seed: int | None = None)¶
Create a new trainer.
- Parameters:
solution_cls (An
Individual
subclass) – The individual classspecies (
Species
) – The species for all the individualsfitness_function (
FitnessFunction
) – The training fitness functionmax_num_iters (
int
, optional) – Maximum number of iterations. If set toNone
,DEFAULT_MAX_NUM_ITERS
will be used. Defaults toNone
custom_termination_func (
Callable
, optional) – Custom termination criterion. If set toNone
, the default termination criterion is used. Defaults toNone
pop_size (
int
, greater than zero, optional) – The population size. If set toNone
,DEFAULT_POP_SIZE
is used for NSGA-II or the number of reference points is chosen for NSGA-III. Defaults toNone
crossover_func (
Callable
, optional) – The crossover function. If set toNone
, the solution_clscrossover()
method will be used. Defaults toNone
mutation_func (
Callable
, optional) – The mutation function. If set toNone
, the solution_clsmutate()
method will be used. Defaults toNone
selection_func (
Callable
, optional) – The selection function. If set toNone
,DEFAULT_NSGA_SELECTION_FUNC
will be used. Defaults toNone
crossover_prob (
float
in (0, 1), optional) – The crossover probability. If set toNone
,DEFAULT_CROSSOVER_PROB
will be used. Defaults toNone
mutation_prob (
float
in (0, 1), optional) – The mutation probability. If set toNone
,DEFAULT_MUTATION_PROB
will be used. Defaults toNone
gene_ind_mutation_prob (
float
in (0, 1), optional) – The gene independent mutation probability. If set toNone
,DEFAULT_GENE_IND_MUTATION_PROB
will be used. Defaults toNone
selection_func_params (
dict
, optional) – The parameters for the selection function. If set toNone
,DEFAULT_NSGA_SELECTION_FUNC_PARAMS
will be used. Defaults toNone
nsga3_reference_points_p (
int
, optional) – Number of divisions along each objective to obtain the reference points of NSGA-III. If set toNone
,DEFAULT_NSGA3_REFERENCE_POINTS_P
will be used. Defaults toNone
nsga3_reference_points_scaling (
float
, optional) – Scaling factor for the reference points of NSGA-III. Defaults toNone
checkpoint_enable (
bool
, optional) – Enable/disable checkpoining. If set toNone
,DEFAULT_CHECKPOINT_ENABLE
will be used. Defaults toNone
checkpoint_freq (
int
, optional) – The checkpoint frequency. If set toNone
,DEFAULT_CHECKPOINT_FREQ
will be used. Defaults toNone
checkpoint_filename (
str
, optional) – The checkpoint file path. If set toNone
,DEFAULT_CHECKPOINT_FILENAME
will be used. Defaults toNone
verbose (
bool
, optional) – The verbosity. If set toNone
,__debug__
will be used. Defaults toNone
- Raises:
TypeError – If any argument is not of the appropriate type
ValueError – If any argument has an incorrect value
Class attributes¶
- NSGA.stats_names = ('Iter', 'NEvals')¶
Statistics calculated each iteration.
- NSGA.objective_stats = {'Avg': <function mean>, 'Max': <function max>, 'Min': <function min>, 'Std': <function std>}¶
Statistics calculated for each objective.
Class methods¶
- classmethod NSGA.load_pickle(filename: str) Base ¶
Load a pickled object from 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
PICKLE_FILE_EXTENSION
Properties¶
- property NSGA.solution_cls: Type[Individual]¶
Get and set the individual class.
- Getter:
Return the individual class
- Setter:
Set a new individual class
- Type:
An
Individual
subclass- Raises:
TypeError – If set to a value which is not an
Individual
subclass
- property NSGA.fitness_function: FitnessFunction¶
Get and set the training fitness function.
- Getter:
Return the fitness function
- Setter:
Set a new fitness function
- Type:
- Raises:
TypeError – If set to a value which is not a fitness function
- property NSGA.max_num_iters: int¶
Get and set the maximum number of iterations.
- Getter:
Return the current maximum number of iterations
- Setter:
Set a new value for the maximum number of iterations. If set to
None
, the default maximum number of iterations,DEFAULT_MAX_NUM_ITERS
, is chosen- Type:
- Raises:
TypeError – If set to a value which is not an integer
ValueError – If set to a value which is not a positive number
- property NSGA.custom_termination_func: Callable[[Trainer], bool]¶
Get and set the custom termination criterion.
The custom termination criterion must be a function which receives the trainer as its unique argument and returns a boolean value,
True
if the search should terminate orFalse
otherwise.If more than one arguments are needed to define the termniation 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 NSGA.pop_size: int¶
Get and set the population size.
- Getter:
Return the current population size
- Setter:
Set a new value for the population size. If set to
None
,DEFAULT_POP_SIZE
is used for NSGA-II or the number of reference points is chosen for NSGA-III- Type:
- Raises:
ValueError – If set to a value which is not greater than zero
- property NSGA.crossover_func: Callable[[Individual, Individual], Tuple[Individual, Individual]]¶
Get and set the crossover function.
- Getter:
Return the current crossover function
- Setter:
Set a new crossover function. If set to
None
, thecrossover()
method of the individual class evolved by the trainer is chosen- Type:
- Raises:
TypeError – If set to a value which is not callable
- property NSGA.mutation_func: Callable[[Individual, float], Tuple[Individual]]¶
Get and set the mutation function.
- property NSGA.selection_func: Callable[[List[Individual], int, Any], List[Individual]]¶
Get and set the selection function.
- Getter:
Return the current selection function
- Setter:
Set the new selection function. If set to
None
,DEFAULT_NSGA_SELECTION_FUNC
is chosen- Type:
- Raises:
TypeError – If set to a value which is not callable
- property NSGA.crossover_prob: float¶
Get and set the crossover probability.
- Getter:
Return the current crossover probability
- Setter:
Set the new crossover probability. If set to
None
,DEFAULT_CROSSOVER_PROB
is chosen- Type:
float
in (0, 1)- Raises:
TypeError – If set to a value which is not a real number
ValueError – If set to a value which is not in (0, 1)
- property NSGA.mutation_prob: float¶
Get and set the mutation probability.
- Getter:
Return the current mutation probability
- Setter:
Set the new mutation probability. If set to
None
,DEFAULT_MUTATION_PROB
is chosen- Type:
float
in (0, 1)- Raises:
TypeError – If set to a value which is not a real number
ValueError – If set to a value which is not in (0, 1)
- property NSGA.gene_ind_mutation_prob: float¶
Get and set the gene independent mutation probability.
- Getter:
Return the current gene independent mutation probability
- Setter:
Set the new gene independent mutation probability. If set to
None
,DEFAULT_GENE_IND_MUTATION_PROB
is chosen- Type:
float
in (0, 1)- Raises:
TypeError – If set to a value which is not a real number
ValueError – If set to a value which is not in (0, 1)
- property NSGA.selection_func_params: Dict[str, Any]¶
Get and set the parameters of the selection function.
- Getter:
Return the current parameters for the selection function
- Setter:
Set new parameters. If set to
None
,DEFAULT_NSGA_SELECTION_FUNC_PARAMS
is chosen- Type:
A
dict
- Raises:
- property NSGA.nsga3_reference_points_p: int¶
Get and set the p parameter for NSGA-III.
The p parameter indicates the number of divisions to be made along each objective to obtain the reference points of NSGA-III.
- Getter:
Return the number of divisions
- Setter:
Set a new number of divisions. If set to
None
,DEFAULT_NSGA3_REFERENCE_POINTS_P
is chosen- Type:
- Raises:
TypeError – If set to a value which is not an integer
ValueError – If set to a value lower than 1
- property NSGA.nsga3_reference_points_scaling: float | None¶
Get and set the scaling factor for the reference points of NSGA-III.
- property NSGA.checkpoint_freq: int¶
Get and set the checkpoint frequency.
- Getter:
Return the checkpoint frequency
- Setter:
Set a value for the checkpoint frequency. If set to
None
,DEFAULT_CHECKPOINT_FREQ
is chosen- Type:
- Raises:
TypeError – If set to a value which is not an integer
ValueError – If set to a value which is not a positive number
- property NSGA.checkpoint_filename: str¶
Get and set the checkpoint file path.
- Getter:
Return the checkpoint file path
- Setter:
Set a new value for the checkpoint file path. If set to
None
,DEFAULT_CHECKPOINT_FILENAME
is chosen- Type:
- Raises:
TypeError – If set to a value which is not a a valid file name
ValueError – If set to a value whose extension is not
PICKLE_FILE_EXTENSION
- property NSGA.random_seed: int¶
Get and set the initial random seed used by this trainer.
- Getter:
Return the seed
- Setter:
Set a new value for the random seed
- Type:
- property NSGA.logbook: Logbook | None¶
Get the training logbook.
Return a logbook with the statistics of the search or
None
if the search has not been done yet.- Type:
- property NSGA.num_evals: int | None¶
Get the number of evaluations performed while training.
Return the number of evaluations or
None
if the search has not been done yet.- Type:
- property NSGA.runtime: float | None¶
Get the training runtime.
Return the training runtime or
None
if the search has not been done yet.- Type:
- property NSGA.index: int¶
Get and set the trainer index.
The trainer index is only used by distributed trainers. For the rest of trainers
DEFAULT_INDEX
is used.- Getter:
Return the trainer index
- Setter:
Set a new value for trainer index. If set to
None
,DEFAULT_INDEX
is chosen- Type:
- Raises:
TypeError – If set to a value which is not an integer
ValueError – If set to a value which is a negative number
- property NSGA.container: Trainer | None¶
Get and set the container of this trainer.
The trainer container is only used by distributed trainers. For the rest of trainers defaults to
None
.
Methods¶
- NSGA.save_pickle(filename: str) None ¶
Pickle 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
PICKLE_FILE_EXTENSION
- NSGA.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.
- NSGA.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 solutionfitness_func (
FitnessFunction
, optional) – The fitness function. If omitted, the default training fitness function (fitness_function
) is usedindex (
int
, optional) – Index where sol should be inserted in the representatives sequence to form a complete solution for the problem. If omitted,index
is usedrepresentatives (
Sequence
ofSequence
ofSolution
orNone
, optional) – Sequence of representatives of other species orNone
(if no representatives are needed to evaluate sol). If omitted, the current value ofrepresentatives
is used
- NSGA.best_solutions() Sequence[HallOfFame] ¶
Get the best solutions found for each species.
Return the best single solution found for each species
- Returns:
A list containing
HallOfFame
of solutions. One hof for each species- Return type:
list
ofHallOfFame
- NSGA.best_representatives() List[List[Solution]] | None ¶
Return a list of representatives from each species.
Only used for cooperative trainers.
- NSGA.train(state_proxy: DictProxy | None = None) None ¶
Perform the training process.
- Parameters:
state_proxy (
DictProxy
, optional) – Dictionary proxy to copy the output state of the trainer procedure. Only used if train is executed within amultiprocessing.Process
. Defaults toNone
- NSGA.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
ofHallOfFame
) – The best solutions found for each species. OneHallOfFame
for each speciesfitness_func (
FitnessFunction
, optional) – Fitness function used to evaluate the final solutions. If ommited, the default training fitness function (fitness_function
) will be usedrepresentatives (
Sequence
ofSequence
ofSolution
) – Sequence of representatives of other species orNone
(if no representatives are needed). If omitted, the current value ofrepresentatives
is used
- Raises:
TypeError – If any parameter has a wrong type
ValueError – If any parameter has an invalid value.
Private methods¶
- NSGA._get_state() Dict[str, Any] ¶
Return the state of this trainer.
Overridden to add the current population to the trainer’s state.
- Getter:
Return the state
- Setter:
Set a new state
- Type:
- NSGA._set_state(state: Dict[str, Any]) None ¶
Set the state of this trainer.
Overridden to add the current population to the trainer’s state.
- Parameters:
state (
dict
) – The last loaded state
- NSGA._save_state() None ¶
Save the state at a new checkpoint.
- Raises:
Exception – If the checkpoint file can’t be written
- NSGA._load_state() None ¶
Load the state of the last checkpoint.
- Raises:
Exception – If the checkpoint file can’t be loaded
- NSGA._new_state() None ¶
Generate a new trainer state.
Overridden to fill the population with evaluated random individuals.
- NSGA._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.
- NSGA._init_internals() None ¶
Set up the trainer internal data structures to start searching.
Overridden to support the NSGA-III reference points.
- NSGA._reset_internals() None ¶
Reset the internal structures of the trainer.
Overridden to reset the NSGA-III reference points.
- NSGA._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.
- NSGA._search() None ¶
Apply the search algorithm.
Execute the trainer until the termination condition is met. Each iteration is composed by the following steps:
- NSGA._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.
- NSGA._start_iteration() None ¶
Start an iteration.
Prepare the iteration metrics (number of evaluations, execution time) before each iteration is run.
- NSGA._preprocess_iteration() None ¶
Preprocess before doing the iteration.
Subclasses should override this method to make any preprocessment before performing an iteration.
- NSGA._do_iteration() None ¶
Implement an iteration of the search process.
In this case, a generation of NSGA is implemented.
- NSGA._postprocess_iteration() None ¶
Postprocess after doing the iteration.
Subclasses should override this method to make any postprocessment after performing an iteration.
- NSGA._finish_iteration() None ¶
Finish an iteration.
Finish the iteration metrics (number of evaluations, execution time) after each iteration is run.
- NSGA._default_termination_func() bool ¶
Set the default termination criterion.
Return
True
ifmax_num_iters
iterations have been run.
- NSGA._termination_criterion() bool ¶
Return true if the search should terminate.
Returns
True
if 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_func
method.
- NSGA._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
Trainer
class should override this method to get the representatives of the other species initialized.
- NSGA._generate_initial_pop() None ¶
Generate the initial population.
The population is filled with random generated individuals.
- NSGA._evaluate_pop(pop: List[Individual]) None ¶
Evaluate the individuals of pop that have an invalid fitness.
- Parameters:
pop (
list
ofIndividual
) – A population