【路径规划】基于灰狼算法求解带时间窗的路径规划问题matlab代码

208 阅读3分钟

1 简介

有时间窗约束的车辆路径规划问题是一种NP-hard问题,这种问题往往采用遗传算法来解决.但是传统的遗传算法本身存在的不足将严重影响整个算法的性能.本文设计了灰狼算法,并进行了仿真试验.试验结果表明,用这种算法求解带有时间窗约束的车辆调度问题,可以在一定程度上克服上述问题,从而得到较高质量的解.

2 部分代码

tic
clear
clc
%% 用importdata这个函数来读取文件
% c101=importdata('.\Solomon\c102.txt');
c101=importdata('c101.txt');
cap=200;
%% 提取数据信息
E=c101(1,5);                                                    %配送中心时间窗开始时间
L=c101(1,6);                                                    %配送中心时间窗结束时间
vertexs=c101(:,2:3);                                            %所有点的坐标x和y
customer=vertexs(2:end,:);                                      %顾客坐标
cusnum=size(customer,1);                                        %顾客数
v_num=12;                                                        %车辆最多使用数目
demands=c101(2:end,4);                                          %需求量
a=c101(2:end,5);                                                %顾客时间窗开始时间[a[i],b[i]]
b=c101(2:end,6);                                                %顾客时间窗结束时间[a[i],b[i]]
s=c101(2:end,7);                                                %客户点的服务时间
h=pdist(vertexs);
dist=squareform(h);                                             %距离矩阵
%% 模拟退火参数
belta=10;                           %违反的容量约束的惩罚函数系数
gama=100;                           %违反时间窗约束的惩罚函数系数
MaxOutIter=2000;                    %外层循环最大迭代次数
MaxInIter=100;                      %里层循环最大迭代次数
T0=100;                             %初始温度
alpha=0.99;                         %冷却因子
pSwap=0.2;                          %选择交换结构的概率
pReversion=0.5;                     %选择逆转结构的概率
pInsertion=1-pSwap-pReversion;      %选择插入结构的概率
N=cusnum+v_num-1;                   %解长度=顾客数目+车辆最多使用数目-1
%% 随机构造初始解
currS=randperm(N);                  %随机构造初始解
[currVC,NV,TD,violate_num,violate_cus]=decode(currS,cusnum,cap,demands,a,b,L,s,dist);   %对初始解解码
%求初始配送方案的成本=车辆行驶总成本+belta*违反的容量约束之和+gama*违反时间窗约束之和
currCost=costFuction(currVC,a,b,s,L,dist,demands,cap,belta,gama);
Sbest=currS;                        %初始将全局最优解赋值为初始解
bestVC=currVC;                      %初始将全局最优配送方案赋值为初始配送方案
bestCost=currCost;                  %初始将全局最优解的总成本赋值为初始解总成本
BestCost=zeros(MaxOutIter,1);       %记录每一代全局最优解的总成本
T=T0;                               %温度初始化

Alpha_pos=zeros(1,N);
Alpha_score=inf; %change this to -inf for maximization problems

Beta_pos=zeros(1,N);
Beta_score=inf; %change this to -inf for maximization problems

Delta_pos=zeros(1,N);
Delta_score=inf; %change this to -inf for maximization problems

for outIter=1:MaxOutIter

   end
   
   %记录外层循环每次迭代的全局最优解的总成本
   BestCost(outIter)=bestCost;
   %显示外层循环每次迭代的信全局最优解的总成本
   disp(['第',num2str(outIter),'代全局最优解:'])
  [bestVC,bestNV,bestTD,best_vionum,best_viocus]=decode(Sbest,cusnum,cap,demands,a,b,L,s,dist);   %对全局最优解解码
   disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD),',违反约束路径数目:',num2str(best_vionum),',违反约束顾客数目:',num2str(best_viocus)]);
   fprintf('\n')
   %更新当前温度
%     T=alpha*T;
end
%% 打印外层循环每次迭代的全局最优解的总成本变化趋势图
figure;
plot(BestCost,'LineWidth',1);
title('灰狼算法优化全局最优解的总成本变化趋势图')
xlabel('迭代次数');
ylabel('总成本');
%% 打印全局最优解路线图
draw_Best(bestVC,vertexs);
toc

3 仿真结果

4 参考文献

[1]王敏, & 唐明珠. (2016). 一种新型非线性收敛因子的灰狼优化算法. 计算机应用研究, 33(12), 6.

[2]阎庆, 邰蕾蕾. 用混合遗传算法解决有时间窗的车辆路径规划问题[J]. 安徽大学学报(自科版), 2007, 032(002):41-44.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页