1 简介
车辆路径问题(Vehicle Routing Problem)是近二十年来运筹学,应用数学,网络分析,图诊,计算机应用及交通运输等学科研究的一个热点问题,也是组合优化中的NP完全难题.VRP不但为离散优化领域中其他的各类算法提供了思想方法平台,而且还广泛地应用于运输,生产,国防,生物,计算机应用等领域.该文着重于对有时间窗的车辆路径问题(Vehicle Routing Problem with TimeWindow,简称VRPTW)的近似算法进行研究.
2 部分代码
clear all; %清除所有变量
close all; %清图
clc ; %清屏
tic%开始计时。考虑拥堵时间段,以总费用作为比较目标
%%SOLOMON问题数据
wenjian=textread('RXx201.txt');%%调用文件
changdu=size(wenjian,1);%%调用文件的长度
city_coordinate=zeros(changdu,2);%%需求点坐标
demands=zeros(1,changdu);%%需求
earlytime=zeros(1,changdu);%%需求点时间最早服务限制
windowtime=zeros(1,changdu);%%需求点时间限制
servicetime=zeros(1,changdu);%服务时间
for i=1:changdu
city_coordinate(i,1)=(wenjian(i,2));%坐标
city_coordinate(i,2)=(wenjian(i,3));%坐标
demands(i)=(wenjian(i,4));%需求量
earlytime(i)=10;%(wenjian(i,5))-30;%时间限制,最早时间窗
windowtime(i)=(wenjian(i,6))+60;%时间限制
servicetime(i)=(wenjian(i,7));%服务时间
end
% city_coordinate %需求点坐标
% demands%需求量
% earlytime%%需求点时间最早服务限制
% windowtime%时间窗限制
% servicetime%服务时间
% city_coordinate=[42,59;6,17;37,19;22,76;28,11;21,16;12,65;35,18;38,29];%坐标
% demands=[0,90,40,60,70,70,40,20,40];%需求量
% windowtime=[0,100,200,300,300,300,300,300,300];%时间窗限制
% earlytime=[0,20,40,230,110,220,40,220,40];%服务时间
% servicetime=[0,20,40,30,10,20,40,20,40];%服务时间
%%初始化变量
m=40;% m 蚂蚁个数
NC_max=100;% 最大允许运行次数
Alpha=1;% Alpha 表征信息素重要程度的参数
Beta=3;% Beta 表征启发式因子重要程度的参数
Rho=0.25;% Rho 信息素蒸发系数
Q=20;% Q 信息素增加强度系数
vehiclecapacity=200;%车辆容量
C=city_coordinate;
n=size(C,1);%n需求点个数
%%计算节点之间的距离
D=zeros(n,n);%D距离矩阵
for i=1:n
for j=1:n
if i~=j
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
else
D(i,j)=eps;
end
D(j,i)=D(i,j);
end
end
D;%距离矩阵
%%
carspeed=60;%运输车辆正常行驶速度
jamcarspeed=20;%拥堵时段的车辆行驶速度
load_w=0;%车辆载重
Eta=1./D;% %Eta为启发因子矩阵,这里设为距离的倒数
Tau=ones(n,n);%%Tau为信息素矩阵
Tabu=zeros(m,n);%存储并记录路径的生成,禁忌表
NC=1;%当前运行次数
G_best_route=[NC_max,n*2];%各代最佳路线
G_best_length=inf.*ones(1,NC_max);%%各代最佳路线的长度
length_ave=zeros(1,NC_max);%%各代路线的平均长度
%iterbestlength=zeros(1,NC_max);%每次迭代最优距离的长度
dividelength=2;%道路分阶段的长度
%%定义计算碳排放的变量
bestfuelconsumptionofcar=0;%该车辆的碳排放量;
iterbestroute=zeros(1,n*2);%各代最佳路线
dangqianroute=zeros(1,n*2);%当前的各代最佳路线
bestroute=zeros(1,n*2);%最佳路线
bestjuli=0;%最佳路线长度
bijiaomubiao=0;%每次的比较目标
minmubiao=0;
qiyoujiage=7.5;%汽油价格
fixfeeofvehicle=200;%汽车固定使用费用
varityfeeofvehicle=2;%汽车变动使用费用:单位:元/单位距离
carbonunitoffuel=2.32;%每升汽油的碳排放标准,单位:公斤
unitcarbonfee=0.0528;%每公斤碳的收费价格
renlifeeunit=0.5;%每分钟的人力资源成本
besttravletime=0;%所有服务车辆的行驶时间
bestcarfee=0;%所有服务车辆的费用,车辆固定费用+变动使用费用+人力成本
bestcarbon=0;%%所有服务车辆的碳排放数量
bestqiyoufee=0;%%所有服务车辆的汽油费用
Delta_Tau=zeros(n,n);%%信息素矩阵
%% ?????????
Tabu=zeros(m,n);
load_w=0;
end
%%输出最优路线的相关信息
minmubiao
bestfuelconsumptionofcar
bestroute
bestjuli
besttravletime
bestcarbon
%% 画图画出路线
subplot(1,2,1)
plot([C(bestroute,1)],[C(bestroute,2)],'-*')%最优路径
subplot(1,2,2) %绘制第二个子图形
% plot(iterbestlength)%各代的最短距离
% hold on
plot(length_ave,'r')%各代的平均距离
% title('平均距离和最短距离') %标题
toc
3 仿真结果
4 参考文献
[1]刘小兰. 有时间窗的车辆路径问题(VRPTW)的近似算法研究[D]. 华南理工大学, 2003.
5 MATLAB代码与数据下载地址
见博客主页