遗传算法-智能鸟群

举报
TiAmoZhang 发表于 2023/03/18 15:21:53 2023/03/18
【摘要】 遗传算法-智能鸟群

1、遗传算法概论

遗传算法借用了达尔文自然选择的思想,即在一个群体中,适应性更高的个体,会更有可能将自己的基因(特性)遗传下去。下面是自然选择中的一些关键概念:


群体

群体为自然选择提供了丰富的基因库,保证了个体的多样性,群体越大越容易产生更具适应性的个体。


基因型和表现型

我们看到的个体的外貌和行为等外在表现是由内部的基因决定的。基因型即为决定个体表现的内部数据,表现型为个体的外观和行为。比如数字125,即可以表示个体的颜色,也可以表示个体的高度。数字125即为个体的基因型,颜色、高度等为个体的表现型。 在设计遗传算法时,要着重设计个体的基因型和表现型。


遗传、突变和选择

遗传、突变和选择是达尔文进化论中的3个基本法则。遗传保证了子代能够继承父代的特性。突变保证了个体的多样性,如果没有突变子代和父代会永远保持一致,新的特性就永远不会出现,种群也不会进化。选择保证了群体向更具适应性的方向进化,使群体中某些个体能够繁殖而另一些个体却没有机会或有很少的机会繁殖。这就是通常说的“适者生存”。在遗传算法中,在每一代都会计算个体的适应性,适应性高的个体的基因会在下一代遗传下去,适应性低的个体的基因会被淘汰。


智能鸟群的实现

小鸟的基因型和表现型

为了使小鸟不断飞行,在小鸟的生命周期的每一时刻都会为小鸟赋予一个推力,通过推力改变小鸟的加速度,进而影响到小鸟的速度和位置。在小鸟的整个生命周期中(假设为200帧),可以把每一帧上的推力所组成的数组作为小鸟的基因型。小鸟在一系列的推力作用下所形成的飞行路线,为小鸟的表现型。可以用DNA类来定义小鸟的基因,其中推力用一个二维向量来定义。

1.小鸟的基因如何影响小鸟的飞行路线

在小鸟的类中,我们定义了一个applyForce方法,会根据生命周期的不同时刻将DNA上对应的推力应用在小鸟身上,从而使小鸟的位置发生改变。下面例子中我们使用egret画了一个三角形代表小鸟。代码如下:

edd5f1b0eab8406b932523543008f8c1.png

小鸟的适应性

在小鸟的生命周期结束时,我们通过判断小鸟离目标点的距离来判断小鸟的适应性,离目标点越近的小鸟适应性越高,否则适应性越低。可以通过小鸟离目标点的距离的倒数的平方作为小鸟的适应度。计算小鸟的适应度函数如下(在Bird类中定义):

image.png

选择:选择适应度更高的小鸟

我们定义一个Population类来管理所有的小鸟以及负责小鸟的选择和遗传。在Population类中定义了一个population数组来存储所有的小鸟,另外定义了一个matingPool数组作为交配池,我们根据小鸟适应性的强弱来将其放入交配池中,适应性越强的小鸟放入交配池中的数量越多,否则就越少。最后我们从交配池中随机的选择小鸟进行交配遗传,这样就保证了适应性强的小鸟选到的概率就越大。Population类中的选择函数如下:

image.png

上面的方法,先计算所有小鸟的适应度之和,最后计算每个小鸟的适应度在所有小鸟的适应度中所占比例,然后将这个比例换算为相应的个数存入交配池。可以把这种选择方法想象成一个轮盘,某个个体的适应度所占的比例约大,它被选中的概率就越高。

image.png

突变:增加基因的丰富性

为了增加基因的丰富性,从而产生适应性更强的个体,我们需要在每一代使小鸟的基因有一定的几率产生突变,我们在小鸟的DNA类中加入突变函数:

image.png

并且为Bird类添加mutate接口

image.png

繁殖:产生新的DNA

在DNA类中,添加crossover方法,它接受另一个DNA实例,通过交叉组合生成新的DNA:

image.png

在上面方法中,在生命周期的每一帧中随机选择双亲对应节点的数据作为子代的基因。下面为Bird类添加繁殖的方法:

image.png

群体的繁殖

接下来在Population中添加reproduction方法,用来产生下一代。在reproduction方法中,我们从交配池中随机的选择两个小鸟作为双亲,产生新的小鸟,并使小鸟发生突变,最后把新产生的小鸟加入数组population中。

image.png

总结和优化

总结

通过上面的示例,我们可以总结出使用遗传算法时的几个关键步骤:

  1. 定义个体的基因型和表现型,基因型发生改变表现型也会随之变化。
  2. 计算群体中每个个体的适应性;
  3. 选择适应性更高的个体作为下一代的双亲(可以通过交配池实现);
  4. 通过双亲繁殖下一代,产生的下一代会发生基因突变;
  5. 返回2进行下下一代的繁殖;


优化

上例中,小鸟在进行多代繁殖后,最终会沿直线朝目标飞去。为了体现遗产算法的强大,可以在小鸟和目标之间加入障碍物,当小鸟碰到障碍物时会停止,并且碰到障碍物的小鸟的适应性会急速下降。可以看看经过几代的进化后聪明的小鸟会如何绕过障碍物到达目标点。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。