49BFO优化的FPA花授粉算法的函数寻优分析
49BFO优化的FPA花授粉算法的函数寻优分析:百度网盘链接:http://pan.baidu.com/s/1cjKMKY
参考链接:
15基于花授粉FPA算法的函数优化 + (PPT+参考文献) + 源程序
17BFO细菌觅食寻优计算 + (PPT+参考文献) + 源程序
37细菌觅食算法BFO的Pareto多目标函数优化 + (PPT+参考文献) + 源程序
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1
具体的代码如下
clc,clear,close all
warning off
format short
%% BFO优化算法 参数
sizepop = 20; % 种群数量
Nc = 50; % 趋化次数
Ns = 4; % 游动次数
C(:,1) = 0.01*ones(sizepop,1); % 翻转选定方向后,单个细菌前进的步长
Nre = 4; % 复制次数
Ned = 2; % 驱散(迁移)次数
Sr = ceil( sizepop/2 ); % 复制(分裂)次数
Ped = 0.25; % 细菌驱散(迁移)概率
ww = 0.5; % 适应度增量因子
nvar = 2; % 2个未知量
popmin = [-1, -1] ; % 下限
popmax = ; % 上限
Cmin = -1; % 最小步长
Cmax = 1; % 最大步长
%% FPA花授粉算法
beta = 1.5; % beta控制常数
pFPA = 0.6; % 0.6-1.0之间
%% 适应度函数
fun = @Ackley_Fun; % 适应度函数
%% 初始化种群
for i=1:sizepop
pop(i,:) = popmin + (popmax-popmin).*rand(1,nvar);% 初始化个体
fitness(i) = fun( pop(i,:) ); % 适应度值
C(i,1:nvar) = Cmin + (Cmax-Cmin).*rand(1,nvar); % 步长
end
%% 记录一组最优值
=min(fitness); % 适应度值越小越好
zbest=pop(bestindex,:); % 全局最佳
fitnesszbest=bestfitness; % 全局最佳适应度值
gbest = pop; % 个体最优
fitnessgbest = fitness; % 个体最优适应度值
NcSizepop = 0; % 记录最优适应度值(函数值)
%% 迭代寻优
for i = 1:Ned % 驱散(迁移)次数
for k = 1:Nre % 复制次数
for m = 1:Nc % 趋化次数
%% BFO算法
for j=1:sizepop % 种群
% 翻转
delta = 2*rand(1,nvar)-0.5;
pop(j,:) = pop(j,:) + C(j,:).*delta./(sqrt( delta*delta' ));
% 取值范围约束
for lu = 1:nvar
if pop(j,lu)>popmax(lu)
pop(j,lu)=popmax(lu);
end
if pop(j,lu)<popmin(lu)
pop(j,lu)=popmin(lu);
end
end
% 更新当前适应度值
fitness(j) = fun( pop(j,:) );
% 适应度更新
if fitness(j)<fitnessgbest(j)
fitnessgbest(j) = fitness(j);
gbest(j,:) = pop(j,:);
end
if fitness(j)<bestfitness
bestfitness = fitness(j);
zbest = pop(j,:) ;
end
end % sizepop种群数量
%% FPA花授粉算法
for j=1:sizepop
pop(j,:) = pFPA*( pop(j,:)+rand(1,nvar).*(gbest(j,:)-pop(j,:)) )+...
(1-pFPA)*( pop(j,:)+ Levy(beta,nvar).*(zbest - pop(j,:)) );
for ij = 1:nvar
if pop(j,ij)>popmax(ij)
pop(j,ij)=popmax(ij);
end
if pop(j,ij)<popmin(ij)
pop(j,ij)=popmin(ij);
end
end
% 更新当前适应度值
fitness(j) = fun(pop(j,:));
% 比较 个体间比较
if fitness(j)<fitnessgbest(j)
fitnessgbest(j) = fitness(j);
gbest(j,:) = pop(j,:);
end
if fitness(j) <bestfitness
bestfitness = fitness(j) ;
zbest =pop(j,:);
end
end
% 记录最优适应度值
NcSizepop = NcSizepop+1;
fitness_iter(NcSizepop) = bestfitness;
end % Nc 趋化次数
% 复制操作
= sort(fitness,'descend');% 降序排列
for Nre2 = 1:Sr % 将最大适应度值的Sr个种群,进行更新
pop(index(Nre2),:) = popmin + (popmax-popmin).*rand(1,nvar);
fitness(index(Nre2)) = fun(pop(index(Nre2),:));
C(index(Nre2),:) = Cmin + (Cmax-Cmin).*rand(1,nvar);% 步长
% 比较 个体间比较
if fitness(index(Nre2))<bestfitness
bestfitness = fitness(index(Nre2));
zbest =pop(index(Nre2),:);
end
end
end % Nre复制操作
for j=1:sizepop % 种群
if Ped>rand
pop(j,:) = popmin + (popmax-popmin).*rand(1,nvar);
fitness(j) = fun(pop(j,:));
% 比较 个体间比较
if fitness(j)<bestfitness
bestfitness = fitness(j);
zbest =pop(j,:);
end
end
end
end % Ned 驱散(迁移)次数
disp('最优解')
disp(zbest)
fprintf('\n')
figure('color',)
plot(fitness_iter,'ro-','linewidth',2)
% loglog(fitness_iter,'ro-','linewidth',2)
axis tight
grid on
好资源,谢谢分享!
页:
[1]