首页 > 编程语言 >遗传算法求解VRP路径规划问题

遗传算法求解VRP路径规划问题

时间:2024-09-11 22:21:36浏览次数:3  
标签:VRP 求解 个体 快递 遗传算法 最优

文章目录


打数模国赛前拿来练手的题,现在题目求解思路分享给大家,包括 所有源代码高清pdf论文,希望能对大家有所帮助!

题目:快递公司送货策略

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

VRP问题简介

VRP问题(车辆路径问题)是一类经典的组合优化问题,其目的是在一定约束条件下(如车辆容量限制、路径长度限制等),为一组车辆分配配送任务,使得配送成本最小化。VRP问题广泛应用于物流、运输等领域。

遗传算法

遗传算法是一种模拟自然选择和遗传过程的全局搜索算法,适用于解决复杂的组合优化问题。遗传算法通过选择、交叉、变异等操作来不断迭代种群,以寻找全局最优解。对于VRP问题,遗传算法能够在复杂的解空间中进行高效的搜索,找到较优的车辆路径分配方案。

项目地址

github:遗传算法求解VRP问题
gitee:遗传算法求解VRP问题

代码说明

网上也有很多关于VRP问题的求解代码,但是我几乎没找到可以直接搬过来就能运行的。考虑到数模的需要以及大多数人的编程选择,我借鉴了网上别人的代码,自己用 matlab 再详细写了一遍。大家拿到代码后直接点击main函数,应该就能运行起来并画出相应的图解。

我使用的是 matlab 2023b 的版本,如果版本过低,我不确定是否能直接运行,建议版本高一点好

代码结构

VRP-CODE1VRP-CODE2VRP-CODE3 分别是三个问题的求解代码,其中每个文件夹都包含以下关键类:

文件名说明
main.m主函数,加载数据并调用export进行运行
Export.m根据参数调用vrp.solve方法,得出结果并进行数据展示
VRP.mVRP类,确定种群大小、迭代次数、选择交叉变异等操作
Chrom.m个体类,每个个体都是一个基因序列,基因序列代表一个可行解
其他类定义车辆类(指快递员)、派送节点类、工具类等

求解流程举例

求解目标

一个个体的基因序列举例:

[ 1,4,3,0,2,6,0,9,8 ]

快递员1:从公司出发,去 1,4,3 号点进行派送,最后回到公司
快递员2:从公司出发,去 2,6 号点进行派送,最后回到公司
快递员3:从公司出发,去 9,8 号点进行派送,最后回到公司
0 表示分隔符,用于区分快递员的路线

可见,其实一个个体就是一个问题的可行解。我们的关键就是,如何找到一个最优的个体,作为题目的答案。

求解步骤

  • 输入信息
    main函数执行,刚开始读取 dp.xlsx 文件,得到送货点坐标,配送量等信息
  • 初始化
    包括添加30个送货节点Node,若干个快递员车辆Car,并设置号配送的负载和里程约束
  • 种群初始化
    调用 vrp.solve 函数,根据先前得到的信息,初始化1000个Chorm类的个体,这些个体都是满足送货里程,负载约束的可行解,但由于是随机生成,因此不是最优解
  • 排序选择
    根据定义的适应度函数fitness,计算出每个个体的适应度值并进行排序,得到当代种群的最优解,保存到 res
  • 交叉变异
    • 交叉 即对单个个体的基因序列进行染色体的位点交叉,如[1,2,3,0,5,6] 其中随机两个数字进行swap交换,得到 1,5,3,0,2,6
    • 变异 即对某个位点单独进行数字变换,如[1,2,3,0,5,6] 变为 9,2,3,0,5,6
    • 考虑到变异后大概率不满足可行解要求,收敛较慢,因此本题不采用变异操作
    • 考虑到交叉后可能不是可行解,因此交叉后再对个体进行校验,校验不通过就重新换位点进行交叉,直到出现可行解为止
    • 考虑到经过排序后,前一半个体较优秀,后一半个体较差,因此只对后一半个体进行交叉操作,提高收敛速度
  • 更新迭代
    交叉完成后,得到下一代的种群个体,再次对这一代的种群个体进行排序,得到一个最优解,这相当于模拟了 种群繁衍了一代。如此循环,每次迭代后都选取一个最优解,如果优于前一代的最优解,便更新结果 res
  • 结果选取
    迭代超过指定次数后(比如种群繁衍50代),那么迭代停止,此时的 res 就是我们求出的最优基因序列,作为本题的最终结果。此时该最优基因序列并不是理想最优解,而是我们采用遗传算法收敛逼近的结果
  • 图像展示
    • 在Export中得到 vrp.solve 返回的 res 值后,对信息进行整合打印,输出到控制台上
    • main函数得到Export 整理的结果后,调用img画图函数,得到的结果图如下所示:

在这里插入图片描述

其实题目的三个问题都差不多,第二问和第三问就是在第一问的基础上,调整适应度 fitness 函数而已,关键的求解步骤就是上面所讲的那样

总结

通过遗传算法与VRP问题的结合,我们可以高效地为实际的物流和运输任务找到优化的车辆路径分配方案。
有问题的欢迎在评论区讨论,我会对代码进行修改。

标签:VRP,求解,个体,快递,遗传算法,最优
From: https://blog.csdn.net/mydaily_/article/details/142112646

相关文章

  • 遗传与进化计算会议(Genetic and Evolutionary Computation Conference,简称GECCO)多目标
    遗传与进化计算会议(GeneticandEvolutionaryComputationConference,简称GECCO)是进化计算领域内最大的同行评审会议,也是计算机学会(ACM)遗传与进化计算特别兴趣小组(SIGEVO)的主要会议。它涵盖了遗传算法、遗传编程、蚁群优化和群体智能、复杂系统、进化组合优化和元启发式、进......
  • NOIP 2018 普及组初赛试题及解析(第二部分:问题求解(1-2))
    分享代码:#include<iostream>usingnamespacestd;//函数用于检查一个数是否包含数字8boolcontainsEight(intnum){while(num>0){if(num%10==8)returntrue;//如果当前个位数是8,则返回truenum/=10;//去掉当前......
  • 梯度下降方法,求解问题 最入门思想
    第一部分:求下面函数取得的最小值时,此时X的值是多少?何为梯度下降,本质就是从该点切线方向,慢慢走下去。切线方向:就是给定一个很小的增量值,试探一下方向。  1、方向的增量值: 2、不断迭代,当增量为很小时,意味着x应该是 1#超参数2m=0.023n=0.000000014#代码函......
  • 【算法笔记】Kruskal/Prim算法——求解最小生成树问题
    前言生活中经常遇到类似这种的问题:公路修建有一些城市,城市之间要修建高速公路,每两个城市之间都可以修双向的路。其中每两个城市之间修路都需要花费对应的金额。请问如何修路,使得总花费的金额最少,且任意两个城市之间都可以直接或间接通过修建的路来通行?实际上,我们可以把这种......
  • 【算法笔记】最近公共祖先(LCA)问题求解——倍增算法
    0.前言最近公共祖先简称LCA(LowestCommonAncestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。这种算法应用很广泛,可以很容易解决树上最短路等问题。为了方便,我们记某点集\(S=\{v_1,v_2,\ldots,v_n\}\)的最近公共祖先为\(\text{LCA}(v_1,v_2,\ld......
  • 【花雕学编程】Arduino FOC 之五自由度机械臂的逆运动学求解
    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用ArduinoIDE(集成开发环境)来编写、......
  • 南沙信C++陈老师解一本通题: 1101:不定方程求解
    ​ 【题目描述】给定正整数a,b,c。求不定方程 ax+by=c关于未知数x和y的所有非负整数解组数。【输入】一行,包含三个正整数a,b,c两个整数之间用单个空格隔开。每个数均不大于1000。【输出】一个整数,即不定方程的非负整数解组数。【输入样例】2318【输出样例】4......
  • c++一个数因子和(快速求解)
    void一个数因子和(int整数){//缘由https://ask.csdn.net/questions/1054457#answer_1251715 inthe=0,j=0;stringa=""; while(++j<整数)if(!(整数%j))he+=j,a+=to_string(j)+"+"; cout<<a<<"的因子和:"<<he......
  • 基于教与学优化算法求解置换流水车间调度问题
    目录1.算法原理2.置换流水车间调度问题(PFSP)3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】教与学优化算法(TLBO)原理及实现2.置换流水车间调度问题(PFSP)置换流水车间调度问题(permutationflowshopschedulingproblem,PFSP)是流水车间调度中经典的......
  • 多目标应用:四种多目标优化算法(NSOOA、NSPSO、NSDBO、NSCOA)求解柔性作业车间调度问题(F
    一、柔性作业车间调度问题柔性作业车间调度问题(FlexibleJobSchedulingProblem,FJSP)的描述如下:n个工件{J,J......