In this article, we use the simplified genetic algorithm implemented by Python. the algorithm only uses mutation operators but does not use crossover operators, but the evolution is still very effective. the specific source code is as follows:
In this article, we use the simplified genetic algorithm implemented by Python. the algorithm only uses mutation operators instead of crossover operators, but the evolution is still very effective. the specific source code is as follows:
from string import ascii_lowercasefrom random import choice, randomtarget = list("welcome to http://www.cnhup.com")charset = ascii_lowercase + ' .:/'parent = [choice(charset) for _ in range(len(target))]minmutaterate = .09C = range(100)perfectfitness = len(target)def fitness(trial): return sum(t==h for t,h in zip(trial, target))def mutaterate(parent): return 1.0-(1.0*(perfectfitness - fitness(parent)) / perfectfitness * (1.0 - minmutaterate))def mutate(parent, rate): return [(ch if random() <= rate else choice(charset)) for ch in parent]def log(iterations,rate,parent): print ("#%-4i, rate: %4.3f, fitness: %4.1f%%, '%s'" % (iterations, rate, fitness(parent)*100./perfectfitness, ''.join(parent)))iterations = 0while parent != target: rate = mutaterate(parent) iterations += 1 if iterations % 10 == 0: log(iterations,rate,parent) copies = [ mutate(parent, rate) for _ in C ] + [parent] parent = max(copies, key=fitness)print ()log(iterations,rate,parent)