Halcom 发表于 2017-7-30 12:15:03

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






why2018470 发表于 2023-8-14 16:39:46

好资源,谢谢分享!
页: [1]
查看完整版本: 49BFO优化的FPA花授粉算法的函数寻优分析