果蝇优化算法
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);
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);
相关文章推荐
- 信息安全(一)
- 黑马程序员---Java基础---java语言基本组成
- 存储过程返回布尔值以及C#相关处理
- 在Qt中使用sleep
- VS.NET2010水晶报表安装部署
- 壹、js的概述
- GCD介绍
- linq简介
- 负载均衡LVS集群详解
- IOS中将照片压缩至指定大小
- java字符串与字符
- Maven常用命令
- Android code-工具类库-GPS、百度、高德、国测局、腾讯等经纬度坐标转换
- 数据库的同步和复制----sql语句方法
- oracle——去除重复记录
- xtreme toolkit pro——CXTPReportControl控件教程-1
- stl之remove()
- 我所学习的数据库知识总结!~
- 大圆距离计算
- Swift 2.0学习笔记(Day 12)——说几个特殊运算符