python 遗传算法精简版

本文介绍了一种只使用变异算子的精简版遗传算法,并通过实例演示了该算法的有效性。目标字符串为“welcometohttp://www.cnhup.com”,算法通过不断变异直至完全匹配目标。

精简版遗传算法,算法中仅采用变异算子而没有使用交叉算子,但是进化依然很有效

 

 

复制代码
from string import ascii_lowercase
from random import choice, random

'''精简版遗传算法,算法中仅采用变异算子而没有使用交叉算子,但是进化依然很有效'''

target  = list("welcome to http://www.cnhup.com")
charset = ascii_lowercase + ' .:/'
parent  = [choice(charset) for _ in range(len(target))]
minmutaterate  = .09
C = 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 = 0
while 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,如需转载请自行联系原作者

标签:  python遗传算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值