Created
April 30, 2018 18:58
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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