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. java:字符串与数字的转换

    各种数字类型转换成字符串型 int i =8; String s =Integer.toString(i);// String g =String.valueOf(i); // 其中 value 为任 ...

  2. generator函数与async/await

    理解async函数就要先理解generator函数,因为async就是Generator函数的语法糖 Generator 函数 Generator 函数是 ES6 提供的一种异步编程解决方案,可以先理 ...

  3. Go IF 条件语句

    条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句. 以下是在大多数编程语言中发现的典型条件语句的一般形式 ...

  4. Atcoder Regular Contst 084 D - XorShift(bitset)

    洛谷题面传送门 & Atcoder 题面传送门 没错,这就是 Small Multiple 那场的 F,显然这种思维题对我来说都是不可做题/cg/cg/cg 首先如果我们把每个二进制数看作一个 ...

  5. DirectX12 3D 游戏开发与实战第八章内容(下)

    DirectX12 3D 游戏开发与实战第八章内容(下) 8.9.材质的实现 下面是材质结构体的部分代码: // 简单的结构体来表示我们所演示的材料 struct Material { // 材质唯一 ...

  6. 基因组Denovo组装原理、软件、策略及实施

    目录 1. 组装算法 1)基于OLC算法 2)基于DBG算法 3)OLC vs DBG 2. 组装软件 3. 组装策略 4. 组装项目实施 1)测序前的准备 2) 测序样品准备 3)测序策略的选择 4 ...

  7. python故障

    问题: ImportError: No module named dns.resolver 解决: 通过包管理工具pip安装dnspython pip install dnspython

  8. Mysql的delimiter

    告诉MySQL解释器,该段命令是否已经结束了,mysql是否可以执行了.默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令. 有时 ...

  9. 4.Reverse Words in a String-Leetcode

    class Solution { public: void reverseWords(string &s) { vector<string> data; string word; ...

  10. dart系列之:HTML的专属领域,除了javascript之外,dart也可以

    目录 简介 DOM操作 CSS操作 处理事件 总结 简介 虽然dart可以同时用作客户端和服务器端,但是基本上dart还是用做flutter开发的基本语言而使用的.除了andorid和ios之外,we ...