A python library for genetic algorithms
Switch branches/tags
Nothing to show
Clone or download
Lucretiel Update README.md
Now indicates that this is a python3 library
Latest commit f28983e Jun 26, 2016
Permalink
Failed to load latest commit information.
genetics Docstring update Dec 11, 2014
test Massive code runthrough. Fixes, improvements, and more! Jun 11, 2014
.gitignore Initial commit Aug 4, 2013
LICENSE Initial commit Aug 4, 2013
README.md Update README.md Jun 26, 2016

README.md

genetics

A python 3 library for genetic algorithms

Example

Finding Hello World

import string
import random

import genetics

letters = string.ascii_uppercase + string.ascii_lowercase + string.punctuation + ' '
solution = 'Hello World!'

class LetterComponent(genetics.DNAComponent):
    def mutate_value(self):
        return random.choice(letters)

class WordDNA(genetics.arrayed_segment(len(solution), LetterComponent)):
    def score(self):
        return sum(comp.value == letter for comp, letter in zip(self, solution))

    def __str__(self):
        return ''.join(comp.value for comp in self)

sim = genetics.DiscreteSimulation(
    population_size=100,
    mutation_mask=genetics.mutation_rate(0.05),  # Mutate at a 5% rate
    crossover_mask=genetics.two_point_crossover,
    selection_function=genetics.tournament(2),
    elite_size=2,
    initial_generator=WordDNA,
    fitness_function=WordDNA.score)


def dna_stats(population):
    '''Best DNA, best score, average score'''
    best_dna = max(population)
    best_score = best_dna.score
    average_score = sum(member.score for member in population) / len(population)

    return best_dna, best_score, average_score


population = sim.initial_population()

while True:
    best, best_score, average_score = dna_stats(population)

    print('{} | Average score: {}'.format(str(best), average_score))

    if str(best) == solution:
        break

    population = sim.step(population)

Sample Output:

&~$lo,{j'"wi | Average score: 0.148
&~$lo,{j'"wi | Average score: 0.292
H)Xl] ?lDf{@ | Average score: 0.506
H)Xlo {lZ!&@ | Average score: 0.816
H)Xlo {lZ!&@ | Average score: 1.154
HSlldpWjr`z> | Average score: 1.574
HeXyoKWqrl&K | Average score: 2.136
uello*c,rl"! | Average score: 2.722
uello*c,rl"! | Average score: 3.338
Heslo LKrlk! | Average score: 3.814
Heslo LKrlk! | Average score: 4.492
H(llooWIrld! | Average score: 5.258
Hello W,rl]! | Average score: 5.934
HeDlo World! | Average score: 6.628
HeDlo World! | Average score: 7.362
Hello World! | Average score: 8.004

TODO / Working on

Short term

  • Real documentation, not just examples
  • PyPI deployment

Medium term

  • Rebuilding to be better, faster, stronger, easier.
    • Taking advantage of the opportunities provided by the functional design

Long term

  • Comprehensive test coverage
  • New simulation types.
    • Fluid simulation removes discrete generations, allowing agents to combine and die randomly