|
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 = [1, 1]; % 上限
- 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
- %% 记录一组最优值
- [bestfitness,bestindex]=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 趋化次数
-
- % 复制操作
- [maxF,index] = 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',[1,1,1])
- plot(fitness_iter,'ro-','linewidth',2)
- % loglog(fitness_iter,'ro-','linewidth',2)
- axis tight
- grid on
复制代码
|
|