【VRP问题】基于人工鱼群求解带时间窗的VRP问题matlab源码

156 阅读2分钟

1 简介

1.1 人工鱼群算法

(1)原理

(2)人工鱼群算法实现流程图

img

1.2 VRP模型

2 部分代码

%

clear
clc
tic                                                                 %开始计时

c101=importdata('c101.txt');                                        %用importdata这个函数来读取文件 
demand=c101(2:end,4);                                               %需求量
vertexs=c101(:,2:3);                                                %所有点的坐标x和y
customer=vertexs(2:end,:);                                          %顾客坐标
cap=200;                                                            %车辆载重量
L=size(customer,1);                                                 %顾客数
K=25;                                                               %车辆数目

h=pdist(vertexs);                                                   %计算顾客之间的距离
D=squareform(h);                                                    %计算顾客之间的距离
%% 初始化参数
FishNum=9;                                                          %生成10只人工鱼
Max_gen=200;                                                        %最多迭代次数
trynumber=500;                                                      %最多试探次数
Visual=16;                                                          %感知距离
deta=0.8;                                                           %拥挤度因子
%% 预处理,确定能使用的车辆最少数目
[minK,chrom_minK,vc_minK,r_minK]=Pre_Deal(L,K,demand,cap);
%% 鱼群初始化,每一行表示一条鱼
initFish=AF_init(FishNum,minK,L);

BestY=zeros(Max_gen,1);                                             %记录每次迭代过程中最优路径的距离
besty=inf;                                                          %最优总距离,初始化为无穷大
gen=1;
currX=initFish;
currY=AF_foodconsistence(currX,D,L,minK,demand,cap);
while gen<=Max_gen
   for i=1:FishNum
      [Xinext,flag]= AF_movestrategy(currX,i,D,Visual,deta,trynumber,L,minK,demand,cap);
       currX(i,:)=Xinext;
   end
   currY=AF_foodconsistence(currX,D,L,minK,demand,cap);
  [Ymin,index]=min(currY);
   if Ymin<besty
       besty=Ymin;
       bestx=currX(index,:);
       BestY(gen)=besty;
   else
       BestY(gen)=BestY(gen-1);
   end
   disp(['第',num2str(gen),'次迭代,得出的最优值:',num2str(BestY(gen))]);
   gen=gen+1;
   
end
figure
plot(1:Max_gen,BestY)
xlabel('迭代次数')
ylabel('优化值')
title('鱼群算法迭代过程')
[fvc,reasonable]=Decode(L,minK,bestx,demand,cap);
TD=travel_distance(fvc,D);

toc                                                                 %结束计时

3 仿真结果

img

img

4 参考文献

[1]柳毅. 求解模糊需求可回程取货车辆路径问题的改进人工鱼群算法[J]. 模式识别与人工智能, 2010, 23(4):560-564.

[2]易世伟, 周根宝. 基于人工鱼群算法车辆路径问题的研究[J]. 内蒙古农业大学学报(自然科学版), 2015(2):127-130.

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

5 MATLAB代码与数据下载地址

见博客主页