精简版遗传算法,算法中仅采用变异算子而没有使用交叉算子,但是进化依然很有效
from string import ascii_lowercasefrom random import choice, random'''精简版遗传算法,算法中仅采用变异算子而没有使用交叉算子,但是进化依然很有效'''target = 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)
本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5254052.html,如需转载请自行联系原作者