果蝇优化算法

来源:互联网 发布:专辑封面设计软件 编辑:程序博客网 时间:2024/05/06 09:50

1、随机初始果蝇群体位置。 

X_axis=10*rand(); 
Y_axis=10*rand(); 

2、附与果蝇个体利用嗅觉搜寻食物之随机方向与距离。

X(i)=X_axis+2*rand()-1; 
Y(i)=Y_axis+2*rand()-1; 

3、由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数。

D(i)=(X(i)^2+Y(i)^2)^0.5; 
S(i)=1/D(i); 

4、味道浓度判定值(S)代入味道浓度判定函数(或称为 Fitness function)以求出该果蝇个体位置的味道浓度(Smelli)

Smell(i)=3-S(i)^2; 

5、找出此果蝇群体的中味道浓度最高的果蝇(求极大值)。 

[bestSmell bestindex]=max(Smell); 

6、保留最佳味道浓度值与 x、y 坐标,此时果蝇群体利用视觉往该位置飞去。

X_axis=X(bestindex); 
Y_axis=Y(bestindex); 
Smellbest=bestSmell; 

7、进入迭代寻优,重复执行步骤 2-5,并判断味道浓度是否优于前一迭代味道浓度,若是则执行步骤6。


matlab代码如下:

clc
clear


%初始化果蝇群体位置空间区间为[0,10]
X_axis=10*rand();
Y_axis=10*rand();


%设置参数
maxgen=100;   %迭代次数
sizepop=20;   %种群规模


%***果蝇寻优开始,利用嗅觉寻找食物。
for i=1:sizepop 
%***附与果蝇个体利用嗅觉搜寻食物之随机方向与距离,区间为[-1,1]。
    X(i)=X_axis+2*rand()-1; 
    Y(i)=Y_axis+2*rand()-1; 
%计算味道浓度判定值
    D(i)=(X(i)^2+Y(i)^2)^0.5; 
    S(i)=1/D(i); 
 %将S代入适应度函数Y=3-X.^2,计算果蝇个体位置的味道浓度
    Smell(i)=3-S(i)^2; 
end
%***找出此果蝇群体的中味道浓度最高的果蝇(求极大值)。
[bestSmell bestindex]=max(Smell);
%***保留最佳值位置,此时果蝇群体利用视觉往该位置飞去。
X_axis=X(bestindex);
Y_axis=Y(bestindex);
Smellbest=bestSmell;
%根据公式更新粒子位置和速度,并且根据新粒子的适应度值更新个体极值和群体极值
%果蝇迭代寻优开始
for g=1:maxgen
    for i=1:sizepop 
         X(i)=X_axis+2*rand()-1; 
         Y(i)=Y_axis+2*rand()-1; 
         D(i)=(X(i)^2+Y(i)^2)^0.5; 
         S(i)=1/D(i); 
         Smell(i)=3-S(i)^2; 
    end
    [bestSmell bestindex]=max(Smell);
     if (bestSmell >Smellbest)
         X_axis=X(bestindex);
         Y_axis=Y(bestindex);
         Smellbest=bestSmell;
     end
    %***每代最优Smell值纪录到yy数组中,并记录最优迭代坐标 
    yy(g)=Smellbest;  
    Xbest(g)=X_axis; 
    Ybest(g)=Y_axis; 
end


%***绘制迭代味到浓度与果蝇飞行路径趋势图 
figure(1)  %图1为迭代次数与适应度值的关系,即收敛图
plot(yy) 
title('Optimization process','fontsize',12) 
xlabel('Iteration Number','fontsize',12);ylabel('Smell','fontsize',12); 
figure(2) 
plot(Xbest,Ybest,'b.'); 
title('Fruit fly flying route','fontsize',14) 
xlabel('X-axis','fontsize',12);ylabel('Y-axis','fontsize',12); 
 
 
 

1 0
原创粉丝点击