【优化求解】基于变异策略的改进型花朵授粉算法FPAmatlab源码

167 阅读2分钟

1 简介

花朵授粉算法( Flower Pollination Algorithm,FPA)是由英国剑桥大学学者Yang于2012年提出的,其基本思想来源于对自然界花朵自花授粉、异花授粉的模拟,是一种新的元启发式群智能随机优化技术 。原理如下:

​2 部分代码

clear
clear all

% fminfpaL=0;
% paa=0;
% vfminfpa=zeros(1,20);
% for z1=1:20,
%
% % %%测试函数区
% n=40;
% p=0.8;
% N_iter=2000;
% d=30;
%
%     [aa,fminfpa]=fpa(n,p,d,N_iter);
%     fminfpaL=fminfpaL+fminfpa;
%     paa=paa+aa;
%     vfminfpa(:,z1)=fminfpa;
% end
% aaaapinminfpa=fminfpaL/20;
% lpaa=paa/20;
% var(vfminfpa)
% aaaapinminfpa

% 改进花粉算法
fminGfpaL=0;
pbb=0;
vfminGfpa=zeros(1,20);
for q2=1:20,
   
   %%测试函数区
   n1=40;
   p1=0.8;
   N_iter1=1500;
   d1=30;
   
  [N_iter1g,bb,fminGfpa]=Gfpa(n1,p1,d1,N_iter1);
   
   fminGfpaL=fminGfpaL+fminGfpa;
   vfminGfpa(:,q2)=fminGfpa;
   N_iter1g
   pbb=pbb+bb;
end

bbbbpinmingfpa=fminGfpaL/20;
lpbb=pbb/20;
var(vfminGfpa)
bbbbpinmingfpa
% % % tFPA
% fminfpaLt=0;
% paat=0;
% vfminfpat=zeros(1,20);
% for z1t=1:20,
%
% % %%测试函数区
% nt=40;
% pt=0.8;
% N_itert=2000;
% dt=30;
%
%     [aat,fminfpat,N_itert]=cs(nt,pt,N_itert,dt);
%     fminfpaLt=fminfpaLt+fminfpat;
%     paat=paat+aat;
%     vfminfpat(:,z1t)=fminfpat;
% end
% ccccpinminfpat=fminfpaLt/20;
% lpaat=paat/20;
% var(vfminfpat)
% ccccpinminfpat
% % % % gtFPA
% gfminfpaLt=0;
% gpaat=0;
% gvfminfpat=zeros(1,20);
% for gz1t=1:20,
%
% % %%测试函数区
% gnt=40;
% gpt=0.8;
% gN_itert=2000;
% gdt=30;
%
%     [gaat,gfminfpat,gN_itert]=gtfpa(gnt,gpt,gN_itert,gdt);
%     gfminfpaLt=gfminfpaLt+gfminfpat;
%     gpaat=gpaat+gaat;
%     gvfminfpat(:,gz1t)=gfminfpat;
% end
% gccccpinminfpat=gfminfpaLt/20;
% glpaat=gpaat/20;
% var(gvfminfpat)
% gccccpinminfpat
% plot(bb)
% title(['适应度曲线 ' '终止代数=' num2str(N_iter1)]);
% xlabel('进化代数');ylabel('适应度');
%%pso粒子群
pfminpso=0;
ppso=0;
vfminpso=zeros(1,20);
for a2=1:20,
   
   % clc
   % clear
   %%测试函数区
   %变量设置区
   
   c1=1.49445;
   c2=1.49445;
   Vmax=1;
   Vmin=-1;
   popmax=5.12;
   popmin=-5.12;
   maxgen=1500;
   sizepop=40;
   
   
  [pdd,fminpso]=pso(c1,c2,Vmax,Vmin,popmax,popmin,sizepop,maxgen);
   
   pfminpso=pfminpso+fminpso;
   vfminpso(:,a2)=fminpso;
   ppso=ppso+pdd;
end
psoinmin=pfminpso/20;
var(vfminpso)
psoinmin
lppso=ppso/20;
% %蝙蝠算法
fminblt=0;
ppbb=0;
vfminb=zeros(1,20);
for bi=1:20
   nb=40;      % Population size, typically 10 to 25
   A=0.25;      % Loudness (constant or decreasing)
   r=0.5;      % Pulse rate (constant or decreasing)
   BQmin=0;         % Frequency minimum
   BQmax=2;
   db=30;
   NB=1500;
  [pblt,fminb]=bat_algorithm(nb,A,r,BQmin,BQmax,db,NB);
   
   fminblt=fminblt+fminb;
   vfminb(:,bi)=fminb;
   ppbb=ppbb+pblt;
end
bpsoinmin=fminblt/20
var(vfminb)
lppbb=ppbb/20;
% % % Frequency maximum
% % % plot(lpbb,'k','LineWidth',1.5)
% %
% %   xlabel('迭代次数');ylabel('平均最优适应度');
% %   hold on
% %   plot(lpaa,'k--','LineWidth',1.5)
% %   hold on
% %   plot(lppso,'k*')
% %   hold on
% %   plot(lppbb,'k:','LineWidth',1.5)
% %   legend('MFPA','FPA','PSO','BA')
%
%
%
semilogy(lpbb,'k','LineWidth',1.5)

xlabel('迭代次数');ylabel('平均最优适应度');
hold on
semilogy(lppso,'R:')
hold on
semilogy(lppbb,'k*','LineWidth',1.5)
legend('MFPA','PSO','BA')
%
%
%   semilogy(lpaa,'k--','LineWidth',1.5)
%   hold on
%   semilogy(lpaat,'k*')
%   hold on
%   semilogy(glpaat,'k:','LineWidth',1.5)
%   hold on
%   semilogy(lpbb,'k','LineWidth',1.5)
%
%   xlabel('迭代次数');ylabel('平均最优适应度');
%
%   legend('FPA', 'tFPA',' 改进型tFPA','MFPA')

3 仿真结果

4 参考文献

[1]肖辉辉, 万常选, & 段艳明. (2016). 一种改进的新型元启发式花朵授粉算法. 计算机应用研究, 000(001), 126-131.

5 MATLAB代码与数据下载地址

见博客主页