Source code for gaggle.ga.ga_factory

from typing import Callable
from gaggle.arguments import GAArgs, SysArgs, OutdirArgs, IndividualArgs, ProblemArgs
from gaggle.ga import GA, SimpleGA
from gaggle.operators import Selection, Mutation, Crossover
from gaggle.population import PopulationManager
from gaggle.problem import Problem


[docs]class GAFactory: r"""Factory that generates pre-existing available GA algorithms. GAFactory.gas stores said GAs as a dictionary with their name as key and the uninitialized GA object as value. """ gas = { "simple": SimpleGA, }
[docs] @classmethod def update(cls, key, ga): r"""Add a new GA to the dictionary of GAs that can be created. It is added to GAFactory.gas Args: key: dataset name that will be used as the dictionary lookup key ga: GA class object, it needs to not be already initialized """ assert isinstance(ga, Callable) cls.gas[key] = ga
[docs] @classmethod def from_ga_args(cls, population_manager: PopulationManager = None, ga_args: GAArgs = None, selection: Selection = None, crossover: Crossover = None, mutation: Mutation = None, problem_args: ProblemArgs = None, sys_args: SysArgs = None, outdir_args: OutdirArgs = None, individual_args: IndividualArgs = None, problem: Problem = None) -> GA: r"""Initializes the requested GA from the dictionary of available GAs. This is done by using the attribute ga_args.ga_name as the lookup key to GAFactory.gas. Args: population_manager: ga_args: selection: crossover: mutation: problem_args: sys_args: outdir_args: individual_args: problem: Returns: An initialized GA class object. """ ga_args = ga_args if ga_args is not None else GAArgs() ga = cls.gas.get(ga_args.ga_name, None) if ga is None: raise ValueError(ga_args.ga_name) return ga(population_manager=population_manager, ga_args=ga_args, outdir_args=outdir_args, sys_args=sys_args, individual_args=individual_args, problem_args=problem_args, selection=selection, mutation=mutation, crossover=crossover, problem=problem)