在编程求解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源码相关推荐

  1. MATLAB模拟退火算法求解超市物流配送选址问题实例

    模拟退火算法编程问题实例: MATLAB模拟退火算法求解超市物流配送选址问题实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要求在该矩 ...

  2. 【Matlab路径规划】蚁群算法机器人大规模栅格地图最短路径规划【含源码 1860期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]蚁群算法机器人大规模栅格地图最短路径规划[含源码 1860期] 二.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾 ...

  3. 【Matlab路径规划】A_star算法智能仓储机器人移动避碰路径规划【含源码 1180期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]A_star算法智能仓储机器人移动避碰路径规划[含源码 1180期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文 ...

  4. 【Matlab路径规划】A_star算法机器人栅格地图路径规划【含源码 116期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]A_star算法机器人栅格地图路径规划[含源码 116期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  5. 【路径规划】基于matlab DWA算法机器人局部避障路径规划【含Matlab源码 890期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[路径规划]基于matlab DWA算法机器人局部避障路径规划[含Matlab源码 890期] 获取代码方式2: 通过订阅紫极神光博客付费 ...

  6. 蔬菜信息配送系统c语言编程,[源码和文档分享]基于C语言的物流配送管理信息系统...

    一 需求分析 系统需要实现的功能如下: (一)各种基本数据的录入 配送路线基本信息录入 路线经停站点基本信息录入 站点经停车辆基本信息录入 其它信息录入 (二)各种基本数据的修改 即:允许对已经录入的 ...

  7. 【Matlab优化求解】遗传算法求解仓库货位优化问题【含源码 022期】

    一.代码运行视频(哔哩哔哩) [Matlab优化求解]遗传算法求解仓库货位优化问题[含源码 022期] 二.遗传算法仓库货位简介(仅供参考) 1 引言 随着电力企业生产规模的不断扩大,传统模式下的仓库 ...

  8. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  9. 【Matlab风电功率预测】麻雀算法优化BP神经网络风电功率预测【含源码 1319期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]麻雀算法优化BP神经网络风电功率预测[含源码 1319期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

最新文章

  1. docker ubuntu镜像_Docker 入门指南 | Linux 中国
  2. 深入理解 js 之继承与原型链
  3. hdu 3788 字符串
  4. 380v pcb 接线端子_插拔式PCB接线端子选型参考
  5. NEU 1497 Kid and Ants 思路 难度:0
  6. Eclipse里不同的project,右键选择属性property facet里看到的list 内容是否相同
  7. Debian 9.6.0 + OpenMediaVault 4.x : U盘作系统盘时遇到的问题
  8. Linux 学习重点内容(第二节)
  9. (2021) 23 [持久化] I/O设备与驱动
  10. php 统计二维数组次数最多_前端面试题(数组篇)
  11. 如何通过link_to传递一个post请求
  12. Ajax模拟Form表单提交,含多种数据上传
  13. http请求过程及性能优化分析
  14. ei会议和ei源刊的区别_Ei期刊和ei会议论文有哪些区别
  15. 解决打开excel报文件格式或文件扩展名无效的问题
  16. 暮光之城电影自制礼物大事记
  17. 亚洲众包网站悄然崛起:中国成最大“雇主”
  18. 差商matlab编程,Matlab数值计算差商与插值
  19. Nagios监控软件源码安装
  20. 魏则西事件中,百度属于一般的龌龊

热门文章

  1. 233网校计算机二级百度云盘6,2014年计算机二级考试《 Access》机考操作题题库(6)...
  2. hmacsha256 java实现_java实现HMACSHA256(md5私钥key)加密签名
  3. 看板管理方法的6大作用
  4. AngularTypeScript
  5. 2020.04.15软件构造听课笔记
  6. Redisson实现分布式锁(3)—项目落地实现
  7. 手游飞车显示服务器超时,QQ飞车手游登录超时怎么办? 更新之后进游戏提示登录超时解决方法...
  8. 软件测试面试题汇总(二)
  9. 软件开发架构师的职责
  10. JS判断变量是不是数组的5种方法