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

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

遗传算法求解路径规划

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

遗传算法(Genetic Algorithm, GA)通常用于解决复杂的优化问题,包括多车辆路径规划(Vehicle Routing Problem, VRP)。VRP的目标是找到一组最优路径,使得一辆或多辆车能够完成一系列客户的服务需求,同时考虑成本(如距离)和约束条件(如车辆容量和时间限制)。 下面是遗传算法求解多车辆路径规划的基本步骤: 1. **编码**:将可能的解决方案(路径组合)表示为染色体,比如每个位置对应一个基因,编码为车辆的访问顺序或路线集合。 2. **初始化种群**:创建一组随机的初始解作为种群,这些解代表了不同的路径组合。 3. **适应度评估**:计算每个个体(即路径)的适应度,这通常是基于总行驶距离、满足约束的时间或其他性能指标。 4. **选择**:按照适应度选择一部分个体进入下一代,概率较高的个体更有可能被选中。 5. **交叉**:通过基因重组操作(交叉),从父代个体中交换部分基因以生成新的后代。 6. **变异**:对新个体执行随机变异操作,引入一些变化来避免早熟收敛。 7. **重复迭代**:重复上述步骤直到达到预设的停止条件(如达到最大迭代次数或达到满意的解)。 8. **返回最佳解**:最后阶段,从种群中选择具有最高适应度的个体作为最终的多车辆路径解决方案。 下面是一个简单的伪代码示例[^4]: ```python def genetic_algorithm(population, fitness_func, crossover_rate, mutation_rate, max_iter): for _ in range(max_iter): # Selection parents = select_by_fitness(population) # Crossover offspring = crossover(parents, crossover_rate) # Mutation mutated_offspring = mutate(offspring, mutation_rate) # Replacement population = replace(population, offspring + mutated_offspring) return best_solution(population) # 假设已定义fitness_func, crossover(), mutate(), select_by_fitness()和best_solution() ```
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cuntou0906

玛莎拉蒂是我的目标!

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

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

打赏作者

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

抵扣说明:

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

余额充值