Source code for discrete_optimization.generic_tools.ea.ga_tools

#  Copyright (c) 2022 AIRBUS and its affiliates.
#  This source code is licensed under the MIT license found in the
#  LICENSE file in the root directory of this source tree.

from typing import Union

from discrete_optimization.generic_tools.do_mutation import Mutation
from discrete_optimization.generic_tools.ea.ga import (
    DeapCrossover,
    DeapMutation,
    DeapSelection,
    ObjectiveHandling,
)


[docs] class ParametersGa: def __init__( self, mutation: Union[Mutation, DeapMutation], crossover: DeapCrossover, selection: DeapSelection, encoding: str, objective_handling: ObjectiveHandling, objectives: Union[str, list[str]], objective_weights: list[float], pop_size: int, max_evals: int, mut_rate: float, crossover_rate: float, tournament_size: float, deap_verbose: bool, ): self.mutation = mutation self.crossover = crossover self.selection = selection self.encoding = encoding self.objective_handling = objective_handling self.objectives = objectives self.objective_weights = objective_weights self.pop_size = pop_size self.max_evals = max_evals self.mut_rate = mut_rate self.crossover_rate = crossover_rate self.tournament_size = tournament_size self.deap_verbose = deap_verbose
[docs] @staticmethod def default_rcpsp() -> "ParametersGa": return ParametersGa( mutation=DeapMutation.MUT_SHUFFLE_INDEXES, crossover=DeapCrossover.CX_UNIFORM_PARTIALY_MATCHED, selection=DeapSelection.SEL_TOURNAMENT, encoding="rcpsp_permutation", objective_handling=ObjectiveHandling.AGGREGATE, objectives=["makespan"], objective_weights=[-1], pop_size=100, max_evals=10000, mut_rate=0.1, crossover_rate=0.9, tournament_size=0.2, deap_verbose=True, )
[docs] class ParametersAltGa: def __init__( self, mutations: list[Union[Mutation, DeapMutation]], crossovers: list[DeapCrossover], selections: list[DeapSelection], encodings: list[str], objective_handling: ObjectiveHandling, objectives: Union[str, list[str]], objective_weights: list[float], pop_size: int, max_evals: int, mut_rate: float, crossover_rate: float, tournament_size: float, deap_verbose: bool, sub_evals: list[int], ): self.mutations = mutations self.crossovers = crossovers self.selections = selections self.encodings = encodings self.objective_handling = objective_handling self.objectives = objectives self.objective_weights = objective_weights self.pop_size = pop_size self.max_evals = max_evals self.mut_rate = mut_rate self.crossover_rate = crossover_rate self.tournament_size = tournament_size self.deap_verbose = deap_verbose self.sub_evals = sub_evals
[docs] @staticmethod def default_mrcpsp() -> "ParametersAltGa": return ParametersAltGa( mutations=[DeapMutation.MUT_UNIFORM_INT, DeapMutation.MUT_SHUFFLE_INDEXES], crossovers=[ DeapCrossover.CX_ONE_POINT, DeapCrossover.CX_UNIFORM_PARTIALY_MATCHED, ], selections=[DeapSelection.SEL_TOURNAMENT, DeapSelection.SEL_TOURNAMENT], encodings=["rcpsp_modes_arity_fix", "rcpsp_permutation"], objective_handling=ObjectiveHandling.AGGREGATE, objectives=["makespan"], objective_weights=[-1], pop_size=100, max_evals=10000, mut_rate=0.1, crossover_rate=0.9, tournament_size=0.2, deap_verbose=True, sub_evals=[1000, 1000], )
[docs] @staticmethod def default_msrcpsp() -> "ParametersAltGa": return ParametersAltGa( mutations=[ DeapMutation.MUT_UNIFORM_INT, DeapMutation.MUT_SHUFFLE_INDEXES, DeapMutation.MUT_SHUFFLE_INDEXES, ], crossovers=[ DeapCrossover.CX_ONE_POINT, DeapCrossover.CX_UNIFORM_PARTIALY_MATCHED, DeapCrossover.CX_UNIFORM_PARTIALY_MATCHED, ], selections=[ DeapSelection.SEL_TOURNAMENT, DeapSelection.SEL_TOURNAMENT, DeapSelection.SEL_TOURNAMENT, ], encodings=[ "modes_arity_fix_from_0", "priority_list_task", "priority_worker_per_task_perm", ], objective_handling=ObjectiveHandling.AGGREGATE, objectives=["makespan"], objective_weights=[-1], pop_size=100, max_evals=10000, mut_rate=0.1, crossover_rate=0.9, tournament_size=0.2, deap_verbose=True, sub_evals=[500, 500, 500], )