Hello Mat

 找回密码
 立即注册
查看: 7294|回复: 1

49BFO优化的FPA花授粉算法的函数寻优分析

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2017-7-30 12:15:03 | 显示全部楼层 |阅读模式
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

具体的代码如下
  1. clc,clear,close all
  2. warning off
  3. format short
  4. %% BFO优化算法 参数
  5. sizepop = 20;                               % 种群数量
  6. Nc = 50;                                    % 趋化次数
  7. Ns = 4;                                     % 游动次数
  8. C(:,1) = 0.01*ones(sizepop,1);              % 翻转选定方向后,单个细菌前进的步长
  9. Nre = 4;                                    % 复制次数
  10. Ned = 2;                                    % 驱散(迁移)次数
  11. Sr = ceil( sizepop/2 );                     % 复制(分裂)次数
  12. Ped = 0.25;                                 % 细菌驱散(迁移)概率
  13. ww = 0.5;                                   % 适应度增量因子

  14. nvar = 2;                % 2个未知量
  15. popmin = [-1, -1] ;      % 下限
  16. popmax = [1, 1];         % 上限
  17. Cmin = -1;               % 最小步长
  18. Cmax = 1;                % 最大步长
  19. %% FPA花授粉算法
  20. beta = 1.5;                % beta控制常数
  21. pFPA = 0.6;                % 0.6-1.0之间
  22. %% 适应度函数
  23. fun = @Ackley_Fun;   % 适应度函数
  24. %% 初始化种群
  25. for i=1:sizepop
  26.     pop(i,:) = popmin + (popmax-popmin).*rand(1,nvar);  % 初始化个体
  27.     fitness(i) = fun( pop(i,:) );                       % 适应度值
  28.     C(i,1:nvar) = Cmin + (Cmax-Cmin).*rand(1,nvar);     % 步长
  29. end
  30. %% 记录一组最优值
  31. [bestfitness,bestindex]=min(fitness);   % 适应度值越小越好
  32. zbest=pop(bestindex,:);     % 全局最佳
  33. fitnesszbest=bestfitness;   % 全局最佳适应度值
  34. gbest = pop;                % 个体最优
  35. fitnessgbest = fitness;     % 个体最优适应度值
  36. NcSizepop = 0;              % 记录最优适应度值(函数值)
  37. %% 迭代寻优
  38. for i = 1:Ned                   % 驱散(迁移)次数
  39.     for k = 1:Nre               % 复制次数
  40.         for m = 1:Nc            % 趋化次数
  41.             %% BFO算法
  42.             for j=1:sizepop     % 种群
  43.                 % 翻转
  44.                 delta = 2*rand(1,nvar)-0.5;
  45.                 pop(j,:) = pop(j,:) + C(j,:).*delta./(sqrt( delta*delta' ));
  46.                 % 取值范围约束
  47.                 for lu = 1:nvar
  48.                     if pop(j,lu)>popmax(lu)
  49.                         pop(j,lu)=popmax(lu);
  50.                     end
  51.                     if pop(j,lu)<popmin(lu)
  52.                         pop(j,lu)=popmin(lu);
  53.                     end
  54.                 end
  55.                
  56.                 % 更新当前适应度值
  57.                 fitness(j) = fun( pop(j,:) );
  58.                
  59.                 % 适应度更新
  60.                 if fitness(j)<fitnessgbest(j)
  61.                     fitnessgbest(j) = fitness(j);
  62.                     gbest(j,:) = pop(j,:);
  63.                 end
  64.                 if fitness(j)<bestfitness
  65.                     bestfitness = fitness(j);
  66.                     zbest = pop(j,:) ;
  67.                 end
  68.                
  69.             end   % sizepop  种群数量
  70.             
  71.             %% FPA花授粉算法
  72.             for j=1:sizepop
  73.                 pop(j,:) = pFPA*( pop(j,:)+rand(1,nvar).*(gbest(j,:)-pop(j,:)) )+...
  74.                     (1-pFPA)*( pop(j,:)+ Levy(beta,nvar).*(zbest - pop(j,:)) );
  75.                 for ij = 1:nvar
  76.                     if pop(j,ij)>popmax(ij)
  77.                         pop(j,ij)=popmax(ij);
  78.                     end
  79.                     if pop(j,ij)<popmin(ij)
  80.                         pop(j,ij)=popmin(ij);
  81.                     end
  82.                 end
  83.                
  84.                 % 更新当前适应度值
  85.                 fitness(j) = fun(pop(j,:));
  86.                
  87.                 % 比较 个体间比较
  88.                 if fitness(j)<fitnessgbest(j)
  89.                     fitnessgbest(j) = fitness(j);
  90.                     gbest(j,:) = pop(j,:);
  91.                 end
  92.                 if fitness(j) <bestfitness
  93.                     bestfitness = fitness(j) ;
  94.                     zbest =  pop(j,:);
  95.                 end
  96.             end
  97.             
  98.             % 记录最优适应度值
  99.             NcSizepop = NcSizepop+1;
  100.             fitness_iter(NcSizepop) = bestfitness;
  101.         end       % Nc       趋化次数
  102.         
  103.         % 复制操作
  104.         [maxF,index] = sort(fitness,'descend');  % 降序排列
  105.         for Nre2 = 1:Sr   % 将最大适应度值的Sr个种群,进行更新
  106.             pop(index(Nre2),:) = popmin + (popmax-popmin).*rand(1,nvar);
  107.             fitness(index(Nre2)) = fun(pop(index(Nre2),:));
  108.             C(index(Nre2),:) = Cmin + (Cmax-Cmin).*rand(1,nvar);  % 步长
  109.             % 比较 个体间比较
  110.             if fitness(index(Nre2))<bestfitness
  111.                 bestfitness = fitness(index(Nre2));
  112.                 zbest =  pop(index(Nre2),:);
  113.             end
  114.         end
  115.     end   % Nre  复制操作
  116.    
  117.     for j=1:sizepop     % 种群
  118.         if Ped>rand
  119.             pop(j,:) = popmin + (popmax-popmin).*rand(1,nvar);
  120.             fitness(j) = fun(pop(j,:));
  121.             % 比较 个体间比较
  122.             if fitness(j)<bestfitness
  123.                 bestfitness = fitness(j);
  124.                 zbest =  pop(j,:);
  125.             end
  126.         end
  127.     end
  128. end       % Ned   驱散(迁移)次数
  129. disp('最优解')
  130. disp(zbest)
  131. fprintf('\n')

  132. figure('color',[1,1,1])
  133. plot(fitness_iter,'ro-','linewidth',2)
  134. % loglog(fitness_iter,'ro-','linewidth',2)
  135. axis tight
  136. grid on
复制代码






算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

23

帖子

0

金钱

注册会员

Rank: 2

积分
92
发表于 2023-8-14 16:39:46 | 显示全部楼层
好资源,谢谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-26 05:14 , Processed in 0.221671 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表