【路径规划-VRP问题】基于蚁群算法解决运钞车路径规划问题VRPSDmatlab源码

149 阅读3分钟

1 简介

该文提出了一种基于蚁群算法求解路径规划问题的新方法及其仿真,蚁群算法就是对自然界中蚂蚁的寻食过程进行模拟而得出的一种模拟进化算法.与传统的算法相比,该算法的主要特点是正反馈和并行性,正反馈使得该算法能很快发现较好解,并行性使得该算法易于实现并行计算.虽然蚁群算法在时间复杂度上可能不如传统的算法,但是理论研究表明该方法是一种基于种群的鲁棒性较强的模拟进化算法.最后,利用Java语言对蚁群算法和改进的Dijkstra算法进行了仿真,并进行了比较.

2 部分代码

%{
%清除所有变量和类的定义
clear;
clear classes;

%蚁群算法参数(全局变量)
global ALPHA; %启发因子
global BETA; %期望因子
global ANT_COUNT; %蚂蚁数量
global CITY_COUNT; %网点数量
global RHO; %信息素残留系数!!!
global IT_COUNT; %迭代次数
global DAry; %两两网点间距离
global TAry; %两两网点间信息素
global CITYWAry; %网点货物需求量
global VW; %运钞车最大载重

%===================================================================

%设置参数变量值
ALPHA=1.0;
BETA=2.0;
RHO=0.95;

IT_COUNT=1000;

VW=100;

%===================================================================
%读取数据并根据读取的数据设置其他参数
load data.txt; %从文本文件加载数据
city_xy_ary=data(:,2:3); %得到网点的坐标数据
CITYWAry=data(:,4); %得到每个网点的资金需求量
x_label=data(:,2); %第二列为横坐标
y_label=data(:,3); %第三列为纵坐标
C=[x_label y_label];     %坐标矩阵

CITY_COUNT=length(CITYWAry); %得到网点数量(包括银行中心在内)
ANT_COUNT=round(CITY_COUNT*2/3)+1; %根据网点数量设置蚂蚁数量,一般设置为网点数量的2/3

%MMAS信息素参数
%计算最大信息素和最小信息素之间的比值
PBest=0.05; %蚂蚁一次搜索找到最优解的概率
temp=PBest^(1/CITY_COUNT);
TRate=(1-temp)/((CITY_COUNT/2-1)*temp); %最大信息素和最小信息素之间的比值

%信息素的最大最小值开始的时候设置成多大无所谓
%第一次搜索完成会生成一个最优解,然后用这个解会重新产生最大最小值
Tmax=1; %信息素最大值
Tmin=Tmax*TRate; %信息素最小值


% 计算两两网点间距离 
DAry=zeros(CITY_COUNT);
for i=1:CITY_COUNT
  for j=1:CITY_COUNT       
      DAry(i,j)=sqrt((city_xy_ary(i,1)-city_xy_ary(j,1))^2+(city_xy_ary(i,2)-city_xy_ary(j,2))^2);
  end
end


% 初始化网点间信息素
TAry=zeros(CITY_COUNT);
TAry=TAry+Tmax;

%===================================================================

%初始化随机种子
rand('state', sum(100*clock));

%另一种方法
%rand('twister',sum(100*clock))

%定义蚂蚁
mayi=ant()


 
              TAry(m,n)=Tmin;                
          end
      end
  end
   
  %-------------------------------------------------------------
  %换行
  fprintf('\n');
      
end

tm2=datenum(clock); %记录算法结束执行时的时间

fprintf('\n搜索完成 , 用时%.3f秒 , 最佳路径长为%.3f , 派送方案如下 ::\n\n[1]',(tm2-tm1)*86400,Best_Path_Length);


%===================================================================
        
  end                
end
fprintf('         (满载率 : %.1f%%)',dbW*100/VW);

fprintf('\n\n');

%====== [程序结束]=====================================================


figure(1)   %作迭代收敛曲线图
x=linspace(0,IT_COUNT,IT_COUNT);
y=L_best(:,1);
plot(x,y);
xlabel('迭代次数'); ylabel('最短路径长度');

3 仿真结果

4 参考文献

[1]王旭, 张江, 崔平远. 一种基于蚁群算法求解路径规划问题的新方法[C]// 2003年中国智能自动化会议论文集(下册). 2003.

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

5 MATLAB代码与数据下载地址

见博客主页