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)
  • 相关阅读:
    strcspn()函数
    makfile通用版本
    C实现简单的xml格式文件
    shell编程题(七)
    C语言实现五子棋
    打字软件(最终版本)
    TypeWriting
    KMP 串的模式匹配 (25分)
    C链表操作
    Ubuntu终端字体
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5254052.html
Copyright © 2011-2022 走看看