Genetic Algorithm Library
Project description
Holland
Genetic Algorithm Library for Python
Computer programs that "evolve" in ways that resemble natural selection can solve complex problems even their creators do not fully understand
Description
Holland is a simple, flexible package for implementing the Genetic Algorithm in Python. The program is designed to act on an arbitrary evaluation function with arbitrary encoding of individuals within a population, both of which are provided by the user.
Installing
Holland is available via the Python Package Index (PyPI) and can be installed with:
pip install holland
Usage
Hello World!
from holland import Evolver from holland.library import get_uniform_crossover_function from holland.utils import bound_value import random # Define a fitness function def fitness_function(genome): message = genome["message"] target = "Hello World!" score = 0 for i in range(len(message)): score += abs(ord(target[i]) - ord(message[i])) return score def mutation_function(value): mutated_value = ord(value) * random.random() * 2 return chr(bound_value(mutated_value, minimum=32, maximum=126, to_int=True)) # Define genome parameters for individuals genome_params = { "message": { "type": "[str]", "size": len("Hello World!"), "initial_distribution": lambda: chr(random.randint(32, 126)), "crossover_function": get_uniform_crossover_function(), "mutation_function": mutation_function, "mutation_rate": 0.15 } } # Define how to select individuals for reproduction selection_strategy = {"pool": {"top": 10}} # Run Evolution evolver = Evolver( fitness_function, genome_params, selection_strategy, should_maximize_fitness=False ) final_population = evolver.evolve(stop_conditions={"target_fitness": 0})
With sample run:
Generation: 0; Top Score: 201: N~flx.JGcu-*
Generation: 1; Top Score: 98: Xljlw);mj]f
Generation: 2; Top Score: 64: =c}kk SmsYf
Generation: 3; Top Score: 37: Kcjlk$Vms]f
Generation: 4; Top Score: 24: Cdjkn Smshf
Generation: 5; Top Score: 16: Idjln Vmshf
Generation: 6; Top Score: 14: Idjln Voshf
Generation: 7; Top Score: 11: Hdjln Vmslf
Generation: 8; Top Score: 9: Hdjln Voslf
Generation: 9; Top Score: 8: Hdjln Vosle
Generation: 10; Top Score: 7: Hdmln Vosle
Generation: 11; Top Score: 6: Hdlln Vosle
Generation: 12; Top Score: 5: Hdllo Vosle
Generation: 13; Top Score: 4: Hdllo Vosle!
Generation: 14; Top Score: 3: Hello Vosle!
Generation: 15; Top Score: 2: Hello Wosle!
Generation: 16; Top Score: 2: Hello Wosle!
Generation: 17; Top Score: 1: Hello Worle!
Generation: 18; Top Score: 1: Hello Worle!
Generation: 19; Top Score: 1: Hello Worle!
Generation: 20; Top Score: 0: Hello World!
Best Genome:
{ 'message': ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'] }
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.