matlab 物流 算法,遗传算法求物流配送路径VRP问题MATLAB源码
在编程求解VRP问题之前首先要深刻理解TSP问题的编程思想,一般学会TSP的编程即可以进行VRP编程,好,在这里简单的说一下,如何由TSP问题转化到VRP问题。
首先VRP问题是指带有配送中心的配送路径规划,其TSP问题(旅行商)应用到配送路径规划问题中,二者唯一的区别就是VRP有配送中心,而TSP没有配送中心,即TSP在配送过程中,车辆不需要回到配送中心。说到这里,我们就要问一个问题,在VRP问题中,什么情况下,车辆需要回到配送中心?那么一般VRP问题是由汽车的配送量来决定的,假设有6座城市,各个城市的需求量为50,60,70,80,90,100,用汽车由配送中心到各个城市配送货物,汽车的装载量为200,很明显,汽车不可能一趟把所有城市的货物(总需求量为:450)都送完,所以要送多次,送完一次回一次配送中心,再拉货去配送,这就构成了VRP问题。
那么如何从TSP转化为VRP问题呢,下面就用这个简单的例子来说明一下。
有6座城市编号为1,2,3,4,5,6各个城市的货物需求量为50,60,70,80,90,100,一般我们把配送中心的编号为0,首先假设汽车装载量特别大,假设为1000,此时汽车可以把所有城市的货物需求量一次性配送完成,这时配送路径0-1-2-3-4-5-6-0即为一个可行路径,这个时候改问题就为TSP问题。
如果汽车的装配量为200,那对于路径1-2-3-4-5-6,汽车从配送中心0出发,给1送50货物,给2送60货物,给3送70货物,此时汽车已经装载了180的货物.如果还要给4送,则需要装载180+80=260的货物,汽车超载拉不了,所以汽车在给城市3送完货物后,要回配送中心,此时路径应该为0-1-2-3-0。之后汽车从配送中心出发,去给4送80,给5送90,此时汽车装载170货物,不能装载城市10的货物了,所以有需要回配送中心,这时路径变成了0-1-2-3-0-4-5-0,继续进行路径变成了0-1-2-3-0-4-5-0-6-0.
至此完成了TSP路径转换成VRP路径。
如果上面的内容你明白了,你就会发现你只要根据TSP的方法进行编程,然后在计算适应度的时候,按照上面说的把TSP路径转换为VRP路径然后再计算路径的长度,就OK啦。
明白了吗?如果不明白的话再好好读读上面说的就可以了,给大家演示一下!
假设汽车的载重量很大时,其实就是一个TSP问题
当载重量有限时,结果如图
看到效果对比了,源程序代码如下
%%%% 程序解释:
%%%% VRP其实是对TSP的改进。TSP是对一系列城市的遍历求距离最短,而VRP其实也是
%%%% 对一系列城市的遍历,只是在遍历过程中车辆需要回到配送中心。因此在计算行
%%%% 车距离时,需要计算回配送中心的距离。其中,什么时候回计算中心需要根据车
%%%% 的载重量和车的最大行程来决定。
%%%% 本程序根据TSP进行改编,具体改编如下:根据TSP方法生成路径、并进行选择、
%%%% 交叉、变异、重插等遗传操作,但在计算适应度的时候发生变化,即汽车的总距
%%%% 离不再是各个城市首尾相连的距离,而是在路径中插入配送中心的VRP路径距离。
%%%% designed by 圆
%%%% 特别注意!汽车最大行驶距离应大于 2*距离矩阵的最大值,即可以保证汽车从
%%%% 配送中心到城市能够再返回。否则程序运行出错!!!
%%%% 提示:增加种群数量,可以增加初始解的可能性,更容易得到最优解!
clear
clc
close all
%% QQ 530807088 一个有心的人在用心做事
position =[81.5,87,75,80,89,77,76,87,73,77,73,91,92,88,73
41.5,41,53,38,41,58,45,53,38,38,31,47,44,36,58]';
demand=[0,1,2,3,2,3,3,2,3,4,3,4,3,4,2];
CarLoad=10; % 汽车最大载重量
CarLength=3000; % 汽车最大行驶距离
CityNum=14; % 城市数量
NP=30; % 种群大小
maxgen=500; % 最大进化代数
Pc=0.9; % 交叉概率
Pm=0.1; % 变异概率
Gap=0.9; % 代沟(Generation gap)
%% 计算各城市之间的距离
D=zeros(CityNum+1);
for i=1:CityNum+1
for j=i+1:CityNum+1
D(i,j)=((position(i,1)-position(j,1))^2+(position(i,2)-position(j,2))^2)^0.5;
D(j,i)=D(i,j);
end
end
%% 初始化种群
X=InitPop(NP,CityNum);
RandermPath=X(1,:); % 记录一个随机路径
%% 遗传进化
gen=1;
figure;
hold on;
box on
xlim([0,maxgen])
title('遗传算法求解VRP路径优化过程')
xlabel('迭代次数')
ylabel('最优值')
RouteLength=Fitness(X,D,demand,CarLoad,CarLength); % 计算路线长度
BestLength=min(RouteLength);
while gen
% 计算路线长度
RouteLength=Fitness(X,D,demand,CarLoad,CarLength); % 计算路线长度
line([gen-1,gen],[BestLength,min(RouteLength)]);
pause(0.01)
% 记录各代最优值
BestLength=min(RouteLength);
FG(gen)=BestLength; % 各代最短路径
% 计算适应度
fit=1./(RouteLength+1); %
将求最小路径转为最大值fit
% 选择
XSel=Select(X,fit,Gap);
% 交叉操作
XSel=Recombin(XSel,Pc);
% 变异
XSel=Mutate(XSel,Pm);
% 逆转操作
XSel=Reverse(XSel,D,demand,CarLoad,CarLength);
% 重插入子代的新种群
X=Reins(X,XSel,fit);
% 更新迭代次数
gen=gen+1 ;
end
%% 画出最优解的路线图
RouteLength=Fitness(X,D,demand,CarLoad,CarLength); % 计算路线长度
[minLength,minInd]=min(RouteLength);
%% 输出最优解的路线和总距离
disp('最优配送路径:')
BestRoute=OutputPath(X(minInd(1),:),D,demand,CarLoad,CarLength);
disp(['配送车辆总行驶路程:',num2str(RouteLength(minInd(1)))]);
%% 绘制实际路线,如果没有各点坐标时,可以不用绘制
figure
for i=1:length(BestRoute)-1
plot(position(BestRoute(i:i+1)+1,1),position(BestRoute(i:i+1)+1,2),'ro-','MarkerFaceColor','b')
hold on
end
plot(position(1,1),position(1,2),'bp','MarkerFaceColor','r','MarkerSize',15)
title('VRP配送路线图')
xlabel('坐标X')
ylabel('坐标Y')
需要程序的联系我哈~~
matlab 物流 算法,遗传算法求物流配送路径VRP问题MATLAB源码相关推荐
- MATLAB模拟退火算法求解超市物流配送选址问题实例
模拟退火算法编程问题实例: MATLAB模拟退火算法求解超市物流配送选址问题实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要求在该矩 ...
- 【Matlab路径规划】蚁群算法机器人大规模栅格地图最短路径规划【含源码 1860期】
一.代码运行视频(哔哩哔哩) [Matlab路径规划]蚁群算法机器人大规模栅格地图最短路径规划[含源码 1860期] 二.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾 ...
- 【Matlab路径规划】A_star算法智能仓储机器人移动避碰路径规划【含源码 1180期】
一.代码运行视频(哔哩哔哩) [Matlab路径规划]A_star算法智能仓储机器人移动避碰路径规划[含源码 1180期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文 ...
- 【Matlab路径规划】A_star算法机器人栅格地图路径规划【含源码 116期】
一.代码运行视频(哔哩哔哩) [Matlab路径规划]A_star算法机器人栅格地图路径规划[含源码 116期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
- 【路径规划】基于matlab DWA算法机器人局部避障路径规划【含Matlab源码 890期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[路径规划]基于matlab DWA算法机器人局部避障路径规划[含Matlab源码 890期] 获取代码方式2: 通过订阅紫极神光博客付费 ...
- 蔬菜信息配送系统c语言编程,[源码和文档分享]基于C语言的物流配送管理信息系统...
一 需求分析 系统需要实现的功能如下: (一)各种基本数据的录入 配送路线基本信息录入 路线经停站点基本信息录入 站点经停车辆基本信息录入 其它信息录入 (二)各种基本数据的修改 即:允许对已经录入的 ...
- 【Matlab优化求解】遗传算法求解仓库货位优化问题【含源码 022期】
一.代码运行视频(哔哩哔哩) [Matlab优化求解]遗传算法求解仓库货位优化问题[含源码 022期] 二.遗传算法仓库货位简介(仅供参考) 1 引言 随着电力企业生产规模的不断扩大,传统模式下的仓库 ...
- 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...
- 【Matlab风电功率预测】麻雀算法优化BP神经网络风电功率预测【含源码 1319期】
一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]麻雀算法优化BP神经网络风电功率预测[含源码 1319期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...
最新文章
- docker ubuntu镜像_Docker 入门指南 | Linux 中国
- 深入理解 js 之继承与原型链
- hdu 3788 字符串
- 380v pcb 接线端子_插拔式PCB接线端子选型参考
- NEU 	1497 Kid and Ants 思路 难度:0
- Eclipse里不同的project,右键选择属性property facet里看到的list 内容是否相同
- Debian 9.6.0 + OpenMediaVault 4.x : U盘作系统盘时遇到的问题
- Linux 学习重点内容(第二节)
- (2021) 23 [持久化] I/O设备与驱动
- php 统计二维数组次数最多_前端面试题(数组篇)
- 如何通过link_to传递一个post请求
- Ajax模拟Form表单提交,含多种数据上传
- http请求过程及性能优化分析
- ei会议和ei源刊的区别_Ei期刊和ei会议论文有哪些区别
- 解决打开excel报文件格式或文件扩展名无效的问题
- 暮光之城电影自制礼物大事记
- 亚洲众包网站悄然崛起:中国成最大“雇主”
- 差商matlab编程,Matlab数值计算差商与插值
- Nagios监控软件源码安装
- 魏则西事件中,百度属于一般的龌龊
热门文章
- 233网校计算机二级百度云盘6,2014年计算机二级考试《 Access》机考操作题题库(6)...
- hmacsha256 java实现_java实现HMACSHA256(md5私钥key)加密签名
- 看板管理方法的6大作用
- AngularTypeScript
- 2020.04.15软件构造听课笔记
- Redisson实现分布式锁(3)—项目落地实现
- 手游飞车显示服务器超时,QQ飞车手游登录超时怎么办? 更新之后进游戏提示登录超时解决方法...
- 软件测试面试题汇总(二)
- 软件开发架构师的职责
- JS判断变量是不是数组的5种方法