您的位置:首页 > 其它

果蝇优化算法

2015-09-14 10:40 417 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: