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代码与数据下载地址
见博客主页