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

本文探讨了使用遗传算法解决路径规划问题,通过浮点数编码、轮盘赌选择、随机交叉和变异策略来寻找起点到终点的最短路径。文章对比了两种改进遗传算法:一种直接考虑碰撞影响,另一种确保生成的路径不与障碍物碰撞。结果显示,两者在路径长度上接近,但执行效率上存在差异,方法二因需确保路径可行性而较慢。遗传算法的随机性可能导致收敛结果不稳定。源代码可在GitHub获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遗传算法求解路径规划

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传送门!!!

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuntou0906

玛莎拉蒂是我的目标!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值