遗传算法求解路径规划
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=(1−a)∗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=(1−a)∗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/distance∗collision)−1(1.3)
其中 distance 为每个个体(路径)的距离,collision 为碰撞系数,如果 路径与障碍物碰撞则取 0,如果未碰撞则取 1。显然,如果与障碍物相交的路径 则适应度为 0,遗传到后一代的概率为 0。
(6)碰撞检测:为了检测路径是否与障碍物碰撞,首先定义一个函数 iscoll(),用于检测每一段路径是否与障碍物相交,原理如下:传入障碍物边界 的匿名函数和线段的两个端点,在线段上等分取 n 个点,对每个点判断是否落在 障碍物内,至少有一点落在障碍物内则说明路径与障碍物碰撞。再定义一个 iscollison():用于判断每条路径是否与障碍物碰撞,调用 iscoll 函数。
(7)在本次实验中,采用了两种改进的遗传算法,第一种是直接将碰撞的 影响加入适应度中,不对交叉和变异操作生成的个人进行个体限制。第二种是对 交叉和变异生成的个体进行限制,如果交叉和变异生成的个体(路径)与障碍物 碰撞,则重新交叉或者变异,保证种群中每个个体都是可行解(与障碍物不碰撞)。
1.2.2 流程图
1.3 求解结果
1.4 结果分析
从两种改进遗传算法得出的规划路径可以看出,二者差别不是很大,最优路 径都在 11 点多(这里直接用绘图单位长度),与实际的最优路径差别不大。但 从执行效率上来看,方法二显然慢很多,因为在交叉、变异操作只产生与障碍物 不碰撞的个体才交叉、变异完成,如果中间点越多,则产生的与障碍物不碰撞的 个体几率就越小,显然执行时间与“运气”有关。尽管方法二在理论上比方法一 完美,因为种群里的解都是可行解(与障碍物不相交),但是在实际应用却不如 方法一。
此外,遗传算法作为一种“运气算法”,每次收敛的结果可能不一致,有时 候甚至不收敛,效果也不好。