对于题目中的算法,相信大家最喜欢,或者最常见的就是在优化领域吧,小编就看到很多大神,利用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
效果展示:
根据以上内容,大家也可以清晰看到,使用遗传算法去做优化的神奇内容,不仅是可以面对冰冷的代码组,还是以上偏生物的内容,使用遗传算法统统可以实现,大家如果感兴趣的话,不妨也试试哈~