遗传算法是优化算法吗,遗传算法的应用实例python实现

  遗传算法是优化算法吗,遗传算法的应用实例python实现

  对于题目中的算法,相信你最喜欢,或者说最常见的是在优化领域。边肖见过很多大神用python的算法来优化一些项目,而在你对这个算法有了足够的了解之后,你也需要完成这个算法的优化,这样你才能真正掌握这个算法。你是怎么做到的?我们如何开始优化?让不知道的小伙伴们来看看吧!

  下面有一组例子教你~

  问题描述

  一个叫Robby的机器人生活在一个充满垃圾的二维网格世界里,周围有4面墙(如下图所示)。这个项目的目标是开发一种控制策略,让他可以有效地捡起垃圾,而不是撞墙。

  问题图片所示:

  

涉及方法

  

  

任何GA的优化步骤如下:

  

l生成问题初始随机解的“种群”

  

l个体的“拟合度”是根据它解决问题的程度来评估的

  

l最合适的解决方案进行“繁殖”并将“遗传”物质传递给下一代的后代

  

l重复第2步和第3步,直到我们得到一组优化的解决方案、

  

应用的遗传算法代码展示:

  

在下面的代码中,我们生成一个初始的机器人种群,让自然选择来运行它的过程。我应该提到的是,当然有更快的方法来实现这个算法(例如利用并行化)。

  

#初始种群

  pop=[Robot()forxinrange(pop_size)]

  results=[]

  

  #执行进化

  foriintqdm(range(num_gen)):

  scores=np.zeros(pop_size)

  

  #遍历所有机器人

  foridx,robinenumerate(pop):

  #运行垃圾收集模拟并计算拟合度

  score=rob.simulate(iter_per_sim,moves_per_iter)

  scores[idx]=score

  

  results.append([scores.mean(),scores.max()])#保存每一代的平均值和值

  

  best_robot=pop[scores.argmax()]#保存最好的机器人

  

  #限制那些能够交配的机器人的数量

  inds=np.argpartition(scores,-num_breeders)[-num_breeders:]#基于拟合度得到顶级机器人的索引

  subpop=[]

  foridxininds:

  subpop.append(pop[idx])

  scores=scores[inds]

  

  #平方并标准化

  norm_scores=(scores-scores.min())**2

  norm_scores=norm_scores/norm_scores.sum()

  

  #创造下一代机器人

  new_pop=[]

  forchildinrange(pop_size):

  #选择拟合度优秀的父母

  p1,p2=np.random.choice(subpop,p=norm_scores,size=2,replace=False)

  new_pop.append(Robot(p1.dna,p2.dna))

  

  pop=new_pop

  

  效果展示:

  

  

根据以上内容,大家也可以清晰看到,使用遗传算法去做优化的神奇内容,不仅是可以面对冰冷的代码组,还是以上偏生物的内容,使用遗传算法统统可以实现,大家如果感兴趣的话,不妨也试试哈~

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: