优化算法果蝇算法(FOA)含Matlab源码 1568期
Posted 紫极神光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化算法果蝇算法(FOA)含Matlab源码 1568期相关的知识,希望对你有一定的参考价值。
一、获取代码方式
获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
获取代码方式2:
完整代码已上传我的资源:【优化算法】果蝇算法(FOA)【含Matlab源码 1568期】
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、果蝇优化算法简介
果蝇优化算法(FOA)是一种基于果蝇觅食行为推演出寻求全局优化的新方法。果蝇本身在感官知觉上优于其他物种,尤其是嗅觉和视觉上。果蝇的嗅觉器官能很好的搜集漂浮在空气中的各种气味,甚至能够嗅到40公里以外的食物源。然后,飞到食物位置附近后亦可使用敏锐的视觉发现食物和同伴聚集的位置,并且向该方向飞去。
果蝇算法可应用于求解最优解。
果蝇群体迭代搜寻食物的步骤如下:
(1)随机初始化果蝇群体位置。
Init X_axis
Init Y_axis
(2)赋予果蝇个体利用嗅觉搜寻食物的随机距离与方向。
Xi = X_axis + Random Value
Yi = Y_axis + Random Value
(3)由于无法得知食物的位置,因此先估计与原点的距离(Dist),再计算味道浓度判定值(S),此值为距离的倒数。
Disti = sqrt(Xi^2 + Yi^2)
Si = 1 / Disti
(4)味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度(Smelli)。
Smelli = Function(Si)
(5)找出该果蝇群体中味道浓度最高的果蝇(求极大值)。
[bestSmell bestIndex] = max(Smell)
(6)保留最佳味道浓度值与x、y的坐标,此时果蝇群体利用视觉往该位置飞去。
Smellbest = bestSmell
X_axis = X(bestIndex)
Y_axis = Y(bestIndex)
(7)进入迭代寻优,重复执行步骤2-5,并判断味道浓度是否优于前一迭代味道浓度,若是则实行步骤6。
三、部分源代码
% Fruit Fly Optimization Algorithm,FOA.
% The standard verison programmed by Prof.Pan is a simplifed version which
% is used to test a very easy function.In my opinion,in order to enhance
% the FOA application field,it is necessary to change it into a general
% version,which may be simple for students and scholars to use.
%
function [Smellbest,X,Y] = FOA(n,maxt,lb,ub,dim)
% Parameters setting
if nargin < 1
n = 20; % Population size
maxt = 5e2; % Max iterations
dim = 30; % Dimension of test function
lb = -100 * ones(1,dim); % Lower bound of test function
ub = 100 * ones(1,dim); % Upper bound of test function
end
% X = zeros(1 * dim);
% Y = zeros(1 * dim);
% new_X = zeros(1 * dim);
% new_Y = zeros(1 * dim);
% D = zeros(1 * dim);
% Sol = zeros(1 * dim);
% Fitness = zeros(n * 1);
% Initialize the original position
for i = 1:n
X(i,:) = lb+(ub-lb).*rand(1,dim); % the position of X axis
Y(i,:) = lb+(ub-lb).*rand(1,dim); % the position of Y axis
D(i,:) = (X(i,:).^2 + Y(i,:).^2).^0.5; % Caculate the distance
Sol(i,:) = 1./D(i,:); % the solution set
Fitness(i) = fun(Sol(i,:)); % Caculate the fitness
end
[bestSmell,index] = min(Fitness); % Get the min fitness and its index
new_X = X(index,:); % the X axis of min fitness
new_Y = Y(index,:); % the Y axis of min fitness
Smellbest = bestSmell;
best = Sol(index,:);
% Start main loop
for t = 1:maxt
for i = 1:n
% Refer to the process of initializing
X(i,:) = new_X + (ub - lb).*rand(1,dim);
Y(i,:) = new_Y + (ub - lb).*rand(1,dim);
D(i,:) = (X(i,:).^2 + Y(i,:).^2).^0.5;
Sol(i,:) = 1./D(i,:);
Fitness(i) = fun(Sol(i,:));
end
[bestSmell,index] = min(Fitness);
% If the new value is smaller than the best value,update the best value
if (bestSmell < Smellbest)
X(i,:) = X(index,:);
Y(i,:) = Y(index,:);
Smellbest = bestSmell;
end
% Out put result each 100 iterations
if round(t/100) == (t/100)
Smellbest;
end
cg_curve(t) = Smellbest;
end
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
以上是关于优化算法果蝇算法(FOA)含Matlab源码 1568期的主要内容,如果未能解决你的问题,请参考以下文章