【TWVRP】遗传算法求解带时间窗车辆路径规划问题(目标函数:最低成本 模式:单配送中心 多客户 客户接受货物时间)【含Matlab源码 4481期】

在这里插入图片描述
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、遗传算法求解带时间窗车辆路径规划问题(目标函数:最低成本 模式:单配送中心 多客户 客户接受货物时间)

1 VRP基本原理
车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一。VRP关注有一个供货商与K个销售点的路径规划的情况,可以简述为:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等),力争实现一定的目标(如车辆空驶总里程最短,运输总费用最低,车辆按一定时间到达,使用的车辆数最小等)。
VRP的图例如下所示:
在这里插入图片描述
2 问题属性与常见问题
车辆路径问题的特性比较复杂,总的来说包含四个方面的属性:
(1)地址特性包括:车场数目、需求类型、作业要求。
(2)车辆特性包括:车辆数量、载重量约束、可运载品种约束、运行路线约束、工作时间约束。
(3)问题的其他特性。
(4)目标函数可能是总成本极小化,或者极小化最大作业成本,或者最大化准时作业。

3 常见问题有以下几类:
(1)旅行商问题
(2)带容量约束的车辆路线问题(CVRP)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
该模型很难拓展到VRP的其他场景,并且不知道具体车辆的执行路径,因此对其模型继续改进。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)带时间窗的车辆路线问题
由于VRP问题的持续发展,考虑需求点对于车辆到达的时间有所要求之下,在车辆途程问题之中加入时窗的限制,便成为带时间窗车辆路径问题(VRP with Time Windows, VRPTW)。带时间窗车辆路径问题(VRPTW)是在VRP上加上了客户的被访问的时间窗约束。在VRPTW问题中,除了行驶成本之外, 成本函数还要包括由于早到某个客户而引起的等待时间和客户需要的服务时间。在VRPTW中,车辆除了要满足VRP问题的限制之外,还必须要满足需求点的时窗限制,而需求点的时窗限制可以分为两种,一种是硬时窗(Hard Time Window),硬时窗要求车辆必须要在时窗内到达,早到必须等待,而迟到则拒收;另一种是软时窗(Soft Time Window),不一定要在时窗内到达,但是在时窗之外到达必须要处罚,以处罚替代等待与拒收是软时窗与硬时窗最大的不同。
在这里插入图片描述
在这里插入图片描述
模型2(参考2017 A generalized formulation for vehicle routing problems):
该模型为2维决策变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)收集和分发问题
(5)多车场车辆路线问题
参考(2005 lim,多车场车辆路径问题的遗传算法_邹彤, 1996 renaud)
在这里插入图片描述
由于车辆是同质的,这里的建模在变量中没有加入车辆的维度。
在这里插入图片描述
在这里插入图片描述
(6)优先约束车辆路线问题
(7)相容性约束车辆路线问题
(8)随机需求车辆路线问题

4 解决方案
(1)数学解析法
(2)人机交互法
(3)先分组再排路线法
(4)先排路线再分组法
(5)节省或插入法
(6)改善或交换法
(7)数学规划近似法
(8)启发式算法

5 VRP与VRPTW对比
在这里插入图片描述

⛄二、遗传算法简介

1 遗传算法
遗传算法是一种基于生物进化论模型的优化算法,通过模拟生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。遗传算法可以用于解决各种优化问题,如函数优化、组合优化、机器学习等。在遗传算法中,个体的适应度函数值越高,就越有可能被选择为下一代的父代,从而进化出更优秀的解。遗传算法的优点是可以在大规模搜索空间中找到全局最优解,但是也存在一些缺点,如收敛速度慢、参数设置困难等。

2 遗传算法步骤
遗传算法是一种模拟自然进化过程的优化算法,其步骤如下:
(1)初始化种群:随机生成一定数量的个体,每个个体都是由若干个基因组成的染色体。
(2)评估适应度:对于每个个体,通过一个适应度函数来评估其适应度,即该个体在解决问题中的表现好坏。
(3)选择操作:根据适应度函数的值,选择一部分个体作为父代,用于产生下一代个体。
(4)交叉操作:对于选出的父代个体,进行交叉操作,生成新的个体。
(5)变异操作:对于新生成的个体,进行变异操作,引入新的基因,增加种群的多样性。
(6)重复步骤2-5,直到达到预设的终止条件(如达到最大迭代次数或找到满足要求的解)。

3 遗传算法求解带时间窗的车辆路径规划(目标函数:运输成本、惩罚成本)
遗传算法是一种基于生物进化原理的优化算法,可以用于求解带容量和体积的车辆路径规划问题。具体实现过程如下:
(1)定义染色体编码方式,将车辆路径规划问题转化为染色体的编码问题。
(2)初始化种群,随机生成一定数量的染色体。
(3)评估适应度,根据染色体编码计算每个染色体的适应度。
(4)选择操作,根据适应度选择一定数量的染色体作为下一代的父代。
(5)交叉操作,对父代染色体进行交叉操作,生成新的染色体。
(6)变异操作,对新生成的染色体进行变异操作,增加种群的多样性。
(7)评估适应度,计算新生成的染色体的适应度。
(8)选择操作,根据适应度选择一定数量的染色体作为下一代的种群。
(9)重复步骤4-8,直到满足停止条件。
在带时间窗的车辆路径规划问题中,染色体编码可以采用基因串编码,其中每个基因表示一个客户点,基因串表示车辆的路径。同时,需要引入容量和体积约束条件,确保每个车辆的容量和体积不超过限制。在评估适应度时,可以考虑车辆的行驶距离和满足约束条件的程度。

⛄三、部分源代码

%% 清空变量
clear
clc

%% 导入参数
[expectTime,acceptTime,serviceTime,customerPosition,customerRequirement,distriCenterPosition,speed,truckVolume] = DataFunction;

%% 定义变量
populationNumber = 50; %种群数量
probabilityMat = [0 0 0.4 0.3 0.3]; %概率矩阵
N = length(customerRequirement); %客户的数目
M = length(probabilityMat); %车辆的最大数目
alpha = 1; %单位距离运输费用
D = 1; %过早或者过晚到达时时间成本
pro = 0.1; %变异概率
populationMat = cell(populationNumber,4); %种群数据矩阵
iter = 1; %当前迭代次数
iterMax = 100; %最大迭代次数
bestValueNow = inf;
bestValueMat = zeros(populationNumber,1);
bestSolveNow = cell(1,4);
bestValue = inf;
bestSolve = cell(1,4);

%% 初始化种群
populationMat = InitializeIndividuality(populationMat,populationNumber,M,N,probabilityMat,distriCenterPosition,customerPosition,truckVolume,customerRequirement,speed,acceptTime,serviceTime);

while iter<iterMax
%% 计算适应度
p = CalcuFitCapacity(populationMat,distriCenterPosition,customerPosition,populationNumber,alpha,speed,expectTime,D,serviceTime);

%% 选择
populationMat = SelectionFunction(populationMat,populationNumber,p);

%% 交叉
populationMat = CrossFunction(populationMat,populationNumber,distriCenterPosition,customerRequirement,truckVolume,customerPosition,speed,acceptTime,serviceTime,N);

%% 变异
populationMat = HeteromorphosisFunction(populationMat,probabilityMat,pro,populationNumber,M,N,customerRequirement,distriCenterPosition,customerPosition,truckVolume,speed,acceptTime,serviceTime);

%% 寻找最优解
[bestValueNow,bestSolveNow] = CalcuBestIndividuiality(populationMat,populationNumber,distriCenterPosition,customerPosition,alpha,speed,expectTime,D,serviceTime);

if bestValueNow<bestValue
bestValueMat(iter) = bestValueNow;
bestValue = bestValueNow;
bestSolve = bestSolveNow;
else
bestValueMat(iter) = bestValue;
end
disp([‘运行次数:’,num2str(iter),‘/’,num2str(iterMax)])

iter = iter+1;
end
%% 可视化最优解
DrawPicture(bestSolve,distriCenterPosition,customerPosition,bestValueMat,N,speed,expectTime,serviceTime);

%% 输出结果
disp([‘选取的车辆编号为:’,num2str(bestSolve{1,2}),‘,总费用为:’,num2str(bestValue),‘元’]);
numberMat = cumsum(bestSolve{1,3});
for k1 = 1:bestSolve{1,1}
if k1 == 1
disp([‘第’,num2str(bestSolve{1,2}(k1)),‘号车辆服务的客户为:’,num2str(bestSolve{1,4}(1:numberMat(k1)))]);
else
disp([‘第’,num2str(bestSolve{1,2}(k1)),‘号车辆服务的客户为:’,num2str(bestSolve{1,4}(numberMat(k1-1)+1:numberMat(k1)))]);
end
end

[cost,cost1,cost2,cost3,disPerTruck ]= CalculateGoalFunctionValue2(bestSolve,customerPosition,distriCenterPosition,alpha,speed,expectTime,D,serviceTime);
disp([‘cost1=’,num2str(cost1),‘元’]);
disp([‘cost2=’,num2str(cost2),‘元’]);
disp([‘cost3=’,num2str(cost3),‘元’]);
disp([‘每辆车走的距是:’,num2str(disPerTruck),‘km’]);
disp([‘车辆总路程为:’,num2str(sum(disPerTruck)),‘元’]);

PrintTimeWindow(bestSolve,distriCenterPosition,customerPosition,speed,serviceTime);

⛄四、运行结果

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

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 门云阁.MATLAB物理计算与可视化[M].清华大学出版社,2013.
[2]李晓峰, 王志强, 王磊, 等. 自适应反步非奇异快速终端滑模控制在水面无人船舶镇定中的应用[J]. 中国舰船研究, 2018, 13(2): 1-9.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值