Skip to content

Instantly share code, notes, and snippets.

@jonmoshier
Created April 30, 2018 18:58
Show Gist options
  • Save jonmoshier/60c0d1d2dd37a4b72712e524dde06c3e to your computer and use it in GitHub Desktop.
Save jonmoshier/60c0d1d2dd37a4b72712e524dde06c3e to your computer and use it in GitHub Desktop.
Another found on the hard drive gist, sticking it here for later, not sure that it works.
from random import random, randint
letters="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def individual(len):
return [letters[int(round(random()*100)%26)] for x in xrange(len)]
def population(size, len):
return [individual(len) for x in xrange(size)]
def fitness(source, target):
count=0
for i in xrange(len(source)):
if target[i]==source[i]:
count = count+1
return count
def grade(pop, target):
grades=[]
for p in pop:
grades.append(fitness(p, target))
return sum(grades)/float(len(grades))
def avg(grades):
return sum(grades)/float(len(grades))
def evolve(pop, target, retain=0.2, random_select=0.05, mutate=0.01):
grades = [(fitness(x, target),x) for x in pop]
grades = [x[1] for x in sorted(grades)]
length = int(len(grades) * retain)
parents= grades[:length]
print "Parents - ", parents
return parents
if __name__ == "__main__":
target = ['H','E','L','L','O']
indsize = len(target)
popsize = 100
pop = population(popsize, indsize)
print "Population: ", pop
fitness_history = [grade(pop, target),]
for i in xrange(100):
pop = evolve(pop, target)
fitness_history.append(grade(pop,target))
print fitness_history
#for datum in fitness_history:
#print datum, pop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment