ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

​【路径规划】基于蚁群算法求解带时间窗车辆路径问题(VRPTW)matlab代码

2021-11-25 13:03:19  阅读:190  来源: 互联网

标签:Tau 蚁群 40 %% 路径 Tabu zeros VRPTW Delta


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; 


%% 第四步记录本代各种参数
L=zeros(m,1);
for i=1:m 
    MM=Tabu(i,:); 
    R=MM(MM>0);
 for j=1:(length(R)-1)
      L(i)=L(i)+D(R(j),R(j+1)); 
 end 
end 
NC=NC+1 %迭代计数器
%% 全局信息素更新
%Delta_Tau=zeros(n,n); 
for i=1:m 
    MM=Tabu(i,:); 
    R=MM(MM>0);
    cd=length(R);
    for j=1:cd
    Tabu(i,j)=R(j);
    end
 for j=1:(cd-1) 
   %Delta_Tau(R(j),R(j+1))=Delta_Tau(R(j),R(j+1))+Q/L(i); 
   Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i); %此次循环在路径(i,j)上的信息素增量  
 end
 %Delta_Tau(R(n),R(1))=Delta_Tau(R(n),R(1))+Q/L(i); %此次循环在整个路径上的信息素增量  
 Delta_Tau(Tabu(i,cd),Tabu(i,1))=Delta_Tau(Tabu(i,cd),Tabu(i,1))+Q/L(i);  
        %此次循环在整个路径上的信息素增量  
end 
Tau=(1-Rho).*Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素  

%% ????????? 
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)的近似算法研究. Diss. 华南理工大学, 2003.

标签:Tau,蚁群,40,%%,路径,Tabu,zeros,VRPTW,Delta
来源: https://blog.csdn.net/m0_60703264/article/details/121535139

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有