zoukankan      html  css  js  c++  java
  • python 遗传算法精简版

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

    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)
  • 相关阅读:
    设计模式学习笔记之命令模式
    JavaEE复习三
    ubuntu下安装UltraEdit
    转载:Ubuntu下deb包的安装方法
    查看linux系统版本是32位还是64位
    手动编译生成apk
    android service文章转载
    @+android:id的一些记录
    android Tweened Animations
    ubuntu下打开chm文件
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5254052.html
Copyright © 2011-2022 走看看