1 简介
1.1 人工鱼群算法
(1)原理
(2)人工鱼群算法实现流程图
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 仿真结果
4 参考文献
[1]柳毅. 求解模糊需求可回程取货车辆路径问题的改进人工鱼群算法[J]. 模式识别与人工智能, 2010, 23(4):560-564.
[2]易世伟, 周根宝. 基于人工鱼群算法车辆路径问题的研究[J]. 内蒙古农业大学学报(自然科学版), 2015(2):127-130.
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页