本系列文章代码取材于书籍《Genetic Algorithms with Python》,本人是在校电气专业的研究生,立志从事于Python相关的代码工作,具体什么方向还有待深究。

众所周知,算法一类的相关工作在市场上工资不菲,对于跨专业想从事算法工作的同学,算法入门是很难的一件事,一者没有好的代码基础,二者算法书晦涩难懂,让人没有读下去的欲望。我从研究生入学到现在,已经有半年的时间了,期间一直摸索算法入门,但都没有坚持下来,但一直在学习Python的基础语法,几个月之前导师在群里推了这本书,还是英文,一开始没抱着什么期望,结果前几天偶尔得空,看了一下,发现这本书真的写的很用心,(这里不得不吐槽一下国内市面上的书本,大都没有用心写,都是这里抄抄那里抄抄),也挺符合我兴趣的,今天花了大半天攻克了Hello World 初级版(一是英语不好,二是学习的基础都遗忘了),这里先放代码,如果想听我自己的理解,有时间可以给大家录个视频。

  1. import random
  2. import datetime
  3. geneSet=' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!.'
  4. target='Hello World!'
  5. def generate_parent(lenth):
  6. genes=[]
  7. while len(genes) < lenth:
  8. sampleSize = min(lenth-len(genes),len(geneSet))
  9. genes.extend(random.sample(geneSet,sampleSize))
  10. return ''.join((genes))
  11. def get_fitness(guess):
  12. return sum(1 for expected ,actual in zip(target,guess) if expected==guess)
  13. def mutate(parent):
  14. index=random.randrange(0,len(parent))
  15. childGenes= list(parent)
  16. newGene,alternate = random.sample(geneSet,2)
  17. childGenes[index]=alternate \
  18. if newGene == childGenes[index] \
  19. else newGene
  20. return ''.join(childGenes)
  21. random.seed()
  22. startTime=datetime.datetime.now()
  23. def display(guess):
  24. timeDiff = datetime.datetime.now()-startTime
  25. fitness=get_fitness(guess)
  26. print('{0}\t{1}\t{2}'.format(guess,fitness,str(timeDiff)))
  27. bestParent=generate_parent(len(target))
  28. bestFitness=get_fitness(bestParent)
  29. display(bestParent)
  30. while True:
  31. child =mutate(bestParent)
  32. childFitness=get_fitness(child)
  33. if bestFitness>=childFitness:
  34. continue
  35. display(child)
  36. if childFitness>=len(bestParent):
  37. break
  38. bestFitness=childFitness
  39. bestParent=child

下次更新不知道什么时候,随缘(PS:我自己再跑,时间挺长的,没有书本上那么快)。

版权声明:本文为python2原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/python2/p/11995996.html