php专区

 首页 > php专区 > PHP进阶 > 算法 > 一个Python实现的精简版遗传算法

一个Python实现的精简版遗传算法

分享到:
【字体:
导读:
         摘要:本文使用Python实现的精简版遗传算法,算法中仅采用变异算子而没有使用交叉算子,但是进化依然很有效,具体源代码如下...

一个Python实现的精简版遗传算法

本文使用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)


一个Python实现的精简版遗传算法
分享到:
PHP SPL标准库之数据结构栈(SplStack)
PHP SPL标准库之数据结构栈(SplStack) 栈(Stack)是一种特殊的线性表,因为它只能在线性表的一端进行插入或删除元素(即进栈和出栈) SplStack就是继承双链表(SplDoublyLinkedList)实现栈。 类摘要如下:  简单使用如下: //把栈想象成一个颠倒的数组 $stack = new SplStack(); /** * 可...
趣味算法之猴子吃桃问题
趣味算法之猴子吃桃问题 猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 C 程序: #include int main() { int sum...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……