当前位置:   article > 正文

遗传算法(GA)求解路径规划_遗传算法路径规划

遗传算法路径规划

遗传算法求解路径规划

1.1 路径规划问题描述

    给定环境信息,如果该环境内有障碍物,寻求起始点到目标点的最短路径, 并且路径不能与障碍物相交,如图 1.1.1 所示。
在这里插入图片描述

1.2 遗传算法求解
1.2.1 求解思路

    遗传算法是通过将优化函数的可能解表示成一个个体,每个个体用一定编码 方式形成基因,借助遗传算子,选择、交叉、变异操作,对种群进行演化,选择 出更适应环境的种群。 在路径规划中,我们将每一条路径规划为一个个体,每个种群有 n 个个体, 即有 n 条路径,同时,每个个体又有 m 个染色体,即中间过渡点的个数,每个点 (染色体)又有两个维度(x,y),在代码中用 genx 和 geny 表示一个种群。通过每一代的演化,对种群进行遗传算子操作,选择合适个体(最优路径)。
(1)编码:采用浮点数编码
(2)选择方式:采用轮盘赌/竞标赛选择方法,同时保留最优个体
(3)交叉方式:用随机数方式交叉

s o n 1 = ( 1 − a ) ∗ f a 1 + a ∗ ( f a 2 ) (1.1) son1=(1-a)*fa1+a*(fa2)\tag{1.1} son1=(1a)fa1+a(fa2)(1.1)

s o n 2 = ( 1 − a ) ∗ f a 2 + a ∗ ( f a 1 ) (1.2) son2=(1-a)*fa2+a*(fa1)\tag{1.2} son2=(1a)fa2+a(fa1)(1.2)

其中 a 为随机数,son1 和 son2 为子代,fa1 和 fa2 为父代。
(4)变异方式:随机数变异,在限定范围内随机产生一个数作为变异个体。
(5)适应度:为了能够让适应度高的个体保存下来,定义适应度为:
f i t v a l u e = e x p ( 150 / d i s t a n c e ∗ c o l l i s i o n ) − 1 (1.3) fitvalue = exp(150/distance*collision)-1\tag{1.3} fitvalue=exp(150/distancecollision)1(1.3)
  其中 distance 为每个个体(路径)的距离,collision 为碰撞系数,如果 路径与障碍物碰撞则取 0,如果未碰撞则取 1。显然,如果与障碍物相交的路径 则适应度为 0,遗传到后一代的概率为 0。
(6)碰撞检测:为了检测路径是否与障碍物碰撞,首先定义一个函数 iscoll(),用于检测每一段路径是否与障碍物相交,原理如下:传入障碍物边界 的匿名函数和线段的两个端点,在线段上等分取 n 个点,对每个点判断是否落在 障碍物内,至少有一点落在障碍物内则说明路径与障碍物碰撞。再定义一个 iscollison():用于判断每条路径是否与障碍物碰撞,调用 iscoll 函数。
(7)在本次实验中,采用了两种改进的遗传算法,第一种是直接将碰撞的 影响加入适应度中,不对交叉和变异操作生成的个人进行个体限制。第二种是对 交叉和变异生成的个体进行限制,如果交叉和变异生成的个体(路径)与障碍物 碰撞,则重新交叉或者变异,保证种群中每个个体都是可行解(与障碍物不碰撞)。

1.2.2 流程图

在这里插入图片描述

1.3 求解结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 结果分析

    从两种改进遗传算法得出的规划路径可以看出,二者差别不是很大,最优路 径都在 11 点多(这里直接用绘图单位长度),与实际的最优路径差别不大。但 从执行效率上来看,方法二显然慢很多,因为在交叉、变异操作只产生与障碍物 不碰撞的个体才交叉、变异完成,如果中间点越多,则产生的与障碍物不碰撞的 个体几率就越小,显然执行时间与“运气”有关。尽管方法二在理论上比方法一 完美,因为种群里的解都是可行解(与障碍物不相交),但是在实际应用却不如 方法一。
    此外,遗传算法作为一种“运气算法”,每次收敛的结果可能不一致,有时 候甚至不收敛,效果也不好。

1.5 源码

    GitHub传送门!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/330345
推荐阅读
相关标签
  

闽ICP备14008679号