import random
target = 'methinks it is a weasle'
offsprings = 10
pop_size = 100
mutation_rate = 100
def turn_str(l):
s=''
for c in l:
s+=c
return s
def abiogenesis():
return [[' ' for n in range(len(target))] for m in range(pop_size)]
# mutates an individual's string
# [string] -> [string]
def mutate_string(individual):
l=list(individual)
gene_position=0
while gene_position < len(target):
if random.randint(1,mutation_rate)==1:
l[gene_position] = random.choice([chr(c+ord('a')) for c in range(26)] + [' '])
gene_position+=1
return turn_str(l)
def fitness(individual):
fitness_amount = 0
fitness_amount = sum([individual[n] == target[n] for n in range(len(target))])
return fitness_amount
def best_fit(population):
fittest_score = [fitness(population[0]) for n in range(offsprings)]
fittest_individuals = [population[0] for n in range(offsprings)]
i = 1
while i < pop_size:
individual_fitness = fitness(population[i])
if sum([individual_fitness > n for n in fittest_score]):
fittest_score.pop()
fittest_score.insert(0,individual_fitness)
fittest_individuals.pop()
fittest_individuals.insert(0, population[i])
i+=1
return fittest_individuals
def procreate(fittest_individuals):
new_population = []
for m in fittest_individuals:
for n in range(pop_size/offsprings):
new_population.append(m)
return new_population
def teh_main():
generation=1
stay_in = True
population = abiogenesis()
while stay_in:
population=map(mutate_string, population)
fittest=best_fit(population)
population=procreate(fittest)
generation+=1
for n in range(len(fittest)):
print('fittest: ', fittest[n], 'fitness: ', fitness(fittest[n]))
if sum([n == target for n in fittest]):
print generation
stay_in=False
def try_fitness():
print(fitness("methinks it is a weasla"))
print(fitness(" "))
def try_best_fit():
population=abiogenesis()
print(best_fit(population))
def try_procreate():
l=procreate(['abc','def','ghi'])
print l
teh_main()
pop_size = 3
mutation_rate = 3
#try_fitness()
#try_best_fit()
#try_procreate()