Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

shawfei/genetics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

33 Commits

Repository files navigation

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

About

A python library for genetic algorithms

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

  • Python 100.0%

AltStyle によって変換されたページ (->オリジナル) /