geneticoptimizer
Optimization using Genetic Algorithms (GA)
The geneticoptimizer module provides optimizers and wrappers for GA.
As for now, I didn’t try a convincing Genetic Algorithm library. This is why it is built-in here. Feel free to propose a copyleft library on GitHub!
Created on Thu Jun 10 21:20:47 2021.
@author: HugoFara
- class leggedsnake.geneticoptimizer.GeneticOptimization(dna, fitness, prob=0.07, **kwargs)
Bases:
object
- __init__(dna, fitness, prob=0.07, **kwargs) None
- Parameters:
dna (list) –
fitness (callable) –
prob (float or tuple[float]) –
kwargs (dict) –
Other useful parameters for the optimization.
- max_popint, default=11
Maximum number of individuals. The default is 11.
- max_genetic_distfloat, default=.7
Maximum genetic distance, before individuals cannot reproduce (separated species). The default is .7.
- startnstopbool, default=False
Ability to close program without loosing population. If True, we verify at initialization the existence of a data file. Population is saved every int(250 / max_pop) iterations. The default is False.
- fitness_argstuple
Keyword arguments to send to the fitness function. The default is None (no argument sent).
- verboseint
Level of verbosity. 0: no verbose, do not print anything. 1: show a progress bar. 2: complete report for each turn. The default is 1.
- birth(par1, par2)
Return a new individual with par1 and par2 as parents (two sequences).
Child are generated by a uniform crossover followed by a random “resetting” mutation of each gene. The resetting is a normal law.
Initial positions come from one of the two parents randomly.
- Parameters:
par1 (list[float, tuple of float, tuple of tuple of float]) – Dna of first parent.
par2 (list[float, tuple of float, tuple of tuple of float]) – Dna of second parent.
- Returns:
child – Dna of the child.
- Return type:
list[float, tuple of float, tuple of tuple of float]
- evaluate_individual(dna, fitness_args)
Simple evaluation for a single individual.
- Parameters:
dna (list[float, tuple of float, tuple of tuple of float]) – List of the individuals’ DNAs
fitness_args (tuple) – Additional arguments to pass to the fitness function. Usually the initial positions of the joints.
- Returns:
Score then initial coordinates.
- Return type:
tuple
See also
evaluate_population
counterpart for an entire population.
- evaluate_population(fitness_args, verbose=True, processes=1)
Evaluate the whole population, attribute scores.
- Parameters:
fitness_args (tuple) – Additional arguments to pass to the fitness function. Usually the initial positions of the joints.
verbose (bool, default=True) – To display information about population evaluation.
processes (int, default=1) – Number of processes involved for a multiprocessor evaluation.
See also
evaluate_individual
same function but on a single DNA.
- make_children(parents, max_genetic_dist=inf)
- reduce_population()
Reduce the population down to max_pop.
- Returns:
new_population – At most self.max_pop individuals, sorted by score.
- Return type:
list of dna
- run(iters, processes=1)
Optimization by genetic algorithm (GA).
- Parameters:
iters (int) – Number of iterations.
processes (int, default=1) – Number of processes that will evaluate the linkages.
- Returns:
List of 3-tuples: best score, best dimensions and initial positions. The list is sorted by score order.
- Return type:
list[float, tuple[float], tuple[tuple[float]]]
- select_parents(verbose=True)
Selection 1/4 of the population as parents.
- leggedsnake.geneticoptimizer.kwargs_switcher(arg_name, kwargs, default=None)
Simple function to return the good element from a kwargs dict.
- leggedsnake.geneticoptimizer.load_population(file_path)
Return a population from a given file.
- leggedsnake.geneticoptimizer.save_population(file_path, population, verbose=False, data_descriptors=None)
Save the population to a json file.
- Parameters:
file_path (str) – Path of the file to write to.
population (list) – Sequence of dna
verbose (bool) – Enable or not verbosity (outputs success).
data_descriptors (dict) – Any additional value you want to save for the current generation.