Skip to content

Commit

Permalink
separate solver code from test specific code
Browse files Browse the repository at this point in the history
  • Loading branch information
handcraftsman committed Jun 9, 2015
1 parent a1f9c6d commit 3690575
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 42 deletions.
66 changes: 24 additions & 42 deletions genetic.py
@@ -1,49 +1,31 @@
#!/usr/bin/python import random


import random def mutate(parent, geneSet):
import datetime geneIndex = random.randint(0, len(geneSet) -1);

index = random.randint(0, len(parent) - 1)
def getFitness(candidate, target): genes = list(parent)
fitness = 0 genes[index] = geneSet[geneIndex]
for i in range(0, len(candidate)):
if target[i] == candidate[i]:
fitness += 1
return(fitness)

def mutate(candidate):
geneIndex = random.randint(0, len(geneset) -1);
index = random.randint(0, len(candidate) - 1)
genes = list(candidate)
genes[index] = geneset[geneIndex]
return(''.join(genes)) return(''.join(genes))


def generateParent(length): def generateParent(length, geneSet):
genes = list("") genes = list("")
for i in range(0,length): for i in range(0,length):
geneIndex = random.randint(0, len(geneset) -1); geneIndex = random.randint(0, len(geneSet) -1);
genes.append(geneset[geneIndex]) genes.append(geneSet[geneIndex])
return(''.join(genes)) return(''.join(genes))


def display(candidate, startTime): def getBest(get_fitness, display, targetLen, geneSet):
timeDiff = datetime.datetime.now() - startTime random.seed()
fitness = getFitness(candidate, target) bestParent = generateParent(targetLen, geneSet)
print ("%s\t%i\t%s" % (candidate, fitness, str(timeDiff))) bestFitness = get_fitness(bestParent)

display(bestParent)


geneset = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!." while bestFitness < len(bestParent):
target = "Not all those who wander are lost." child = mutate(bestParent, geneSet)

childFitness = get_fitness(child)
random.seed()
startTime = datetime.datetime.now() if childFitness > bestFitness:
bestParent = generateParent(len(target)) bestFitness = childFitness
bestFitness = getFitness(bestParent, target) bestParent = child
display(bestParent, startTime) display(bestParent)

return bestParent
while bestFitness < len(bestParent):
child = mutate(bestParent)
childFitness = getFitness(child, target)

if childFitness > bestFitness:
bestFitness = childFitness
bestParent = child
display(bestParent, startTime)
25 changes: 25 additions & 0 deletions stringDuplicationTests.py
@@ -0,0 +1,25 @@
import datetime
import genetic

def getFitness(candidate, target):
fitness = 0
for i in range(0, len(candidate)):
if target[i] == candidate[i]:
fitness += 1
return(fitness)

def display(candidate, target, startTime):
timeDiff = datetime.datetime.now() - startTime
fitness = getFitness(candidate, target)
print ("%s\t%i\t%s" % (candidate, fitness, str(timeDiff)))

def test_string_duplication():
geneset = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!."
startTime = datetime.datetime.now()
target = "Not all those who wander are lost."
fnDisplay = lambda candidate: display(candidate, target, startTime)
fnGetFitness = lambda candidate: getFitness(candidate, target)
best = genetic.getBest(fnGetFitness, fnDisplay, len(target), geneset)

if __name__ == '__main__':
test_string_duplication()

0 comments on commit 3690575

Please sign in to comment.