1. 果蝇优化算法背景

在夏天,果蝇是一种随处可见的昆虫。果蝇在嗅觉和视觉特别突出。腐烂的食物发出一种刺鼻的味道,温度越高这种气味的扩散速度较快,果蝇对这种味道非常敏感。腐烂的味道和食物的位置有关。一般而言,食物越近,味道越浓;反之,味道越淡。而果蝇一般都是从味道淡的地方,飞往味道浓的地方,即食物所在的方向。当它们在食物附近的时候,可以利用视觉寻找食物。基于果蝇寻找食物的行为,2011年Wen-Tsao Pan提出了果蝇优化算法(Fruit Fly Optimization)。

2. 果蝇优化算法的数学模型

2.1 果蝇优化算法的数学模型假设

果蝇搜索食物分为两个阶段:

(1) 嗅觉阶段

      这一阶段,果蝇利用嗅觉感知空气所含的味道,判断出食物的味道,并根据食物的味道浓度接近食物,这属于全局勘探过程。

(2) 视觉阶段

      在果蝇到达食物位置附近时,果蝇开始利用视觉准确找到食物的位置,这个过程属于局部开发过程。

2.2 果蝇优化算法

a. 多维果蝇优化算法

\[y = x_1^2+x_2^2+x_3^3+x_4^2+x_5^2
\]

首先,初始化5群果蝇群体,分派给这5个变量,每个群体中有10只果蝇,随机初始化果蝇的群体位置区间为\([-100,100]\),果蝇搜寻食物的随机飞行方向与距离区间为\([-1,1]\).

2.3 Matlab代码

% -------------------------------------------------------------------------
% 名 称: 果蝇优化算法
% 作 者: 潘文超
% 代 码: 编码雪人
% 时 间: 2021-06-05
% 备 注: 首先, 每个变量视为一个种群, 种群规模自己设定.
% ------------------------------------------------------------------------- %% 清空运行环境
clc
clear %% 定义目标函数
fobj = @ Sphere; %% 参数定义
Max_iter = 1000; % 最大迭代次数
sizePop = 10; % 种群规模
dim = 5; % 维数
ub = 100; % 变量的上界
lb = -100; % 变量的下界
costScore = zeros(Max_iter, 1); %% 初始化种群
X = zeros(sizePop, dim);
Y = zeros(sizePop, dim);
dist = zeros(sizePop, dim);
S = zeros(sizePop, dim);
Fitness = zeros(sizePop, 1);
for p=1:sizePop
% 初始化每个果蝇群体中个体的位置
X(p, :) = lb + (ub - lb).*rand(1, dim);
Y(p, :) = lb + (ub - lb).*rand(1, dim); % 计算每个果蝇群体中个体的距离
dist(p, :) = sqrt(X(p, :).^2 + Y(p, :).^2); % 果蝇个体中的味道浓度
S(p, :) = 1./dist(p, :); % 计算适应度值
Fitness(p, :) = fobj(S(p, :));
end %% 找出果蝇群体中的味道浓度最高的果蝇
[bestSmell,loc] = min(Fitness);
new_X = X(loc, :); % The X axis of min fitness
new_Y = Y(loc, :); % The Y axis of min fitness
bestScore = bestSmell;
bestSlove = S(loc, :); %% 主函数
for it=1:Max_iter
for p=1:sizePop
% 嗅觉搜索
X(p, :) = new_X + 2.*rand(1, dim) -1;
Y(p, :) = new_Y + 2.*rand(1, dim) -1; dist(p, :) = sqrt(X(p, :).^2 + Y(p, :).^2);
S(p, :) = 1./dist(p, :);
Fitness(p, :) = fobj(S(p, :));
end [bestSmell, loc] = min(Fitness); % 视觉搜索
if bestSmell < bestScore
new_X = X(loc, :);
new_Y = Y(loc, :);
bestScore = bestSmell;
end costScore(it) = bestScore;
% 输出
disp(['----------', num2str(it), '------------']);
disp(bestSmell);
end %% 可视化
figure
axis tight
semilogy(costScore, 'r-')

目标函数

function y = Sphere(x)
y = sum(x.^2);
end

代码如有疑问,请留言指正。

果蝇优化算法_Fruit Fly Optimization的更多相关文章

  1. 果蝇优化算法(FOA)

    果蝇优化算法(FOA) 果蝇优化算法(Fruit Fly Optimization Algorithm, FOA)是基于果蝇觅食行为的仿生学原理而提出的一种新兴群体智能优化算法. 果蝇优化算法(FOA ...

  2. 计算智能(CI)之粒子群优化算法(PSO)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...

  3. 数值计算:粒子群优化算法(PSO)

    PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...

  4. paper 8:支持向量机系列五:Numerical Optimization —— 简要介绍求解求解 SVM 的数值优化算法。

    作为支持向量机系列的基本篇的最后一篇文章,我在这里打算简单地介绍一下用于优化 dual 问题的 Sequential Minimal Optimization (SMO) 方法.确确实实只是简单介绍一 ...

  5. SMO优化算法(Sequential minimal optimization)

    原文:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html SMO算法由Microsoft Research的John C. ...

  6. Sequential Minimal Optimization(SMO,序列最小优化算法)初探

    什么是SVM SVM是Support Vector Machine(支持向量机)的英文缩写,是上世纪九十年代兴起的一种机器学习算法,在目前神经网络大行其道的情况下依然保持着生命力.有人说现在是神经网络 ...

  7. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...

  8. [DeeplearningAI笔记]改善深层神经网络_优化算法2.6_2.9Momentum/RMSprop/Adam优化算法

    Optimization Algorithms优化算法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.6 动量梯度下降法(Momentum) 另一种成本函数优化算法,优化速度一般快于标准 ...

  9. [DeeplearningAI笔记]改善深层神经网络_优化算法2.3_2.5_带修正偏差的指数加权平均

    Optimization Algorithms优化算法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.3 指数加权平均 举个例子,对于图中英国的温度数据计算移动平均值或者说是移动平均值( ...

随机推荐

  1. C#练习3

    using System; class Test { static void F(params int[]args) { Console.WriteLine("# of argument:{ ...

  2. [loj2473]秘密袭击

    容易发现答案即$\sum_{S}\sum_{u=1}^{W}[u\le val(S)]=\sum_{u=1}^{W}\sum_{S}[u\le val(S)]$,那么可以枚举权值$u$,并将点权$va ...

  3. Small but Funny Tricks [Remember them all!]

    模数 1e9 的神奇求行列式: #include <bits/stdc++.h> using namespace std; const int maxn = 1e2, mod = 1e9; ...

  4. R语言与医学统计图形【2】散点图、盒形图

    R语言基础绘图系统 基础图形--散点图.盒形图 plot是一个泛型函数(generic method),对于不同的数据绘制不同的图形. par函数的大部分参数在plot中通用. 1.散点图 plot绘 ...

  5. Linux系统的开机启动顺序

    Linux系统的开机启动顺序加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init一句inittab文件来设定系统运行的等级(一般3或者5,3是多用 ...

  6. centOS6和7单用户修改密码

    CentOS6 1.       进入启动系统倒计时的时候,按esc 之后进入一下界面: 2.       按a 键进入修改内核参数页面 3.       在quiet后面加入空格和1 ,如下:回车进 ...

  7. Linux之crond任务调度

    1. 示意图 2. 基本语法 crontab [选项] # -e : 编辑crontab定时任务 # -l : 查询crontab # -r : 删除当前用户所有的crontab任务 # 例子: # ...

  8. centos安装后的个人工具

    1.安装vim工具 yum -y install vim 安装完成后在家目录下新建一个.vimrc的配置文件.辅助vim软件功能. set number " 显示行号 set cursorl ...

  9. PL\SQL和PL/SQL Developer 12安装与配置

    安装: (1)在已有安装包的情况下,直接将安装包解压到文件夹下,注意不要解压缩到c:\programs Files(x86)的文件夹下,不能解压缩到有中文文件夹命名的文件夹下面 (2)没有安装包的情况 ...

  10. (转载)VB中ByVal与ByRef的区别

    ByVal是按值传送,在传的过程中不会改变原来的值,仅仅传送的是一个副本, 而 ByRef相反,从内存地址来说,后者是同一个内存地址. ByVal 与 ByRef(默认值)这两个是子过程的参数传递时, ...