【路径规划】基于蚁群算法求解带时间窗旅行商问题matlab代码

183 阅读2分钟

1 简介

VRP问题影响着车辆配送过程中的效率与经济效益,在现实生活中 有着重要的现实意义;文章首先建立了一个带有时间窗的VRP数学模型,并针对VRP问题本身的特点,对蚁群算法中的伪随机概率公式等相关参数进行改进,最 后将改进的蚁群算法应用于VRP问题的求解中;通过在matlab上进行的仿真试验,表明了此算法能够有效地改善基本蚁群算法中的收敛速度慢,易于陷入局 部最优解等缺陷,并能应用于大规模的车辆路径寻优问题中.

2 部分代码

clear
clc
close all
tic
%% 用importdata这个函数来读取文件

Dta=importdata('c102.txt');
c101=Dta.data;
%% 提取数据信息
E=c101(1,5);                                                    %配送中心时间窗开始时间
L=c101(1,6);                                                    %配送中心时间窗结束时间
vertexs=c101(:,2:3);                                            %所有点的坐标x和y
% vertexs1=c101(:,2:3);                                           %所有点的坐标x和y
for i=1:size(vertexs,1)
  [vertexs(i,2),vertexs(i,1)]=jingwei(vertexs(i,2),vertexs(i,1));
end
customer=vertexs(2:end,:);                                      %顾客坐标
cusnum=size(customer,1);                                        %顾客数
v_num=1;                                                       %车辆最多使用数目
% demands=1*c101(2:end,4);                                         %需求量
a=c101(2:end,5);                                                %顾客时间窗开始时间[a[i],b[i]]
b=c101(2:end,6);                                                %顾客时间窗结束时间[a[i],b[i]]
width=b-a;                                                      %顾客的时间窗宽度
s=c101(2:end,4);                                                %客户点的服务时间

       %逐个顾客选择
       for j=1:cusnum
           r=rand;                                             %r为在[0,1]上的随机变量
           np=next_point(i,Table,Tau,Eta,alpha,beta,gama,delta,r,r0,a,b,width,s,L,dist);
           Table(i,j)=np;
       end
   end
   %% 计算各个蚂蚁的成本=车辆行驶总距离
   cost=zeros(m,1);
   NV=zeros(m,1);
   TD=zeros(m,1);
   for i=1:m
       VC=decode(Table(i,:),a,b,L,s,dist);
%         [cost(i,1),NV(i,1),TD(i,1)]=costFun(VC,dist);
route=VC_to_Route(VC);
[cost(i,1),NV(i,1),TD(i,1)]=costFun1(VC,dist,route,a,b,L,s);
   end
   %% 计算最小成本及平均成本
   if iter == 1
      [min_Cost,min_index]=min(cost);
       Cost_best(iter)=min_Cost;
       Route_best(iter,:)=Table(min_index,:);
   else
      [min_Cost,min_index]=min(cost);
)]);
   disp(['最佳适应度值:',num2str(min(Cost_best))]);
draw_Best(bestVC,vertexs);

%% 绘图
figure
plot(1:iter_max,Cost_best,'b')
xlabel('迭代次数')
ylabel('成本')
title('各代最小成本变化趋势图')
toc

3 仿真结果

4 参考文献

[1]龙汀, 潘若愚. 蚁群算法求解带时间窗的配送路径问题[J]. 合肥工业大学学报:自然科学版, 2008, 31(7):5.

5 MATLAB代码与数据下载地址

见博客主页