果蝇优化算法_Fruit Fly Optimization
1. 果蝇优化算法背景
在夏天,果蝇是一种随处可见的昆虫。果蝇在嗅觉和视觉特别突出。腐烂的食物发出一种刺鼻的味道,温度越高这种气味的扩散速度较快,果蝇对这种味道非常敏感。腐烂的味道和食物的位置有关。一般而言,食物越近,味道越浓;反之,味道越淡。而果蝇一般都是从味道淡的地方,飞往味道浓的地方,即食物所在的方向。当它们在食物附近的时候,可以利用视觉寻找食物。基于果蝇寻找食物的行为,2011年Wen-Tsao Pan提出了果蝇优化算法(Fruit Fly Optimization)。
2. 果蝇优化算法的数学模型
2.1 果蝇优化算法的数学模型假设
果蝇搜索食物分为两个阶段:
(1) 嗅觉阶段
这一阶段,果蝇利用嗅觉感知空气所含的味道,判断出食物的味道,并根据食物的味道浓度接近食物,这属于全局勘探过程。
(2) 视觉阶段
在果蝇到达食物位置附近时,果蝇开始利用视觉准确找到食物的位置,这个过程属于局部开发过程。
2.2 果蝇优化算法
a. 多维果蝇优化算法
\]
首先,初始化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的更多相关文章
- 果蝇优化算法(FOA)
果蝇优化算法(FOA) 果蝇优化算法(Fruit Fly Optimization Algorithm, FOA)是基于果蝇觅食行为的仿生学原理而提出的一种新兴群体智能优化算法. 果蝇优化算法(FOA ...
- 计算智能(CI)之粒子群优化算法(PSO)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...
- 数值计算:粒子群优化算法(PSO)
PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...
- paper 8:支持向量机系列五:Numerical Optimization —— 简要介绍求解求解 SVM 的数值优化算法。
作为支持向量机系列的基本篇的最后一篇文章,我在这里打算简单地介绍一下用于优化 dual 问题的 Sequential Minimal Optimization (SMO) 方法.确确实实只是简单介绍一 ...
- SMO优化算法(Sequential minimal optimization)
原文:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html SMO算法由Microsoft Research的John C. ...
- Sequential Minimal Optimization(SMO,序列最小优化算法)初探
什么是SVM SVM是Support Vector Machine(支持向量机)的英文缩写,是上世纪九十年代兴起的一种机器学习算法,在目前神经网络大行其道的情况下依然保持着生命力.有人说现在是神经网络 ...
- [Algorithm] 群体智能优化算法之粒子群优化算法
同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...
- [DeeplearningAI笔记]改善深层神经网络_优化算法2.6_2.9Momentum/RMSprop/Adam优化算法
Optimization Algorithms优化算法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.6 动量梯度下降法(Momentum) 另一种成本函数优化算法,优化速度一般快于标准 ...
- [DeeplearningAI笔记]改善深层神经网络_优化算法2.3_2.5_带修正偏差的指数加权平均
Optimization Algorithms优化算法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.3 指数加权平均 举个例子,对于图中英国的温度数据计算移动平均值或者说是移动平均值( ...
随机推荐
- [loj2393]门票安排
为了方便,不妨假设$a_{i}\le b_{i}$,并将问题转换为以下形式: $\forall 1\le i\le m$,将$[a_{i},b_{i})$或$[1,a_{i})\cup [b_{i}, ...
- 3、使用ListOperations操作redis(List列表)
文章来源:https://www.cnblogs.com/shiguotao-com/p/10560354.html 方法 c参数 s说明 List<V> range(K key, l ...
- WinRAR下载
https://www.win-rar.com 垃圾7Z有的解压不了.
- springboot上传文件异常解决方案
配置文件加入: #配置文件传输 spring.servlet.multipart.enabled =true spring.servlet.multipart.file-size-threshold ...
- .net打独立运行环境遇到无法trim遇到的bug
背景介绍 工作中我用到kotlin写代码,在orm上ktorm是一款非常优秀的操作db的框架,我喜欢用它所以我写了一个插件能够增加我的工作效率,这款idea插件的主体逻辑是.net开发的(没错是跨平台 ...
- C/C++ Qt MdiArea 多窗体组件应用
MDI多窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体中内嵌多种子窗体的功能,使用MDI组件需要在UI界面中增加mdiArea控件容器,我们所有的窗体创建与操 ...
- Linux终端使用aplay播放wav
Linux终端使用aplay播放wav aplay是一个ALSA的声卡命令行soundfile录音机的驱动程序. 在linux下可以使用下面命令来查看用法: man aplay 所以可以使用来播放.w ...
- CF708E Student's Camp
麻麻我会做*3100的计数了,我出息了 考虑朴素DP我们怎么做呢. 设\(f_{i,l,r}\)为第\(i\)层选择\(l,r\)的依旧不倒的概率. \(q(l,r)\)表示经历了\(k\)天后,存活 ...
- 洛谷 P5470 - [NOI2019] 序列(反悔贪心)
洛谷题面传送门 好几天没写题解了,写篇题解意思一下(大雾 考虑反悔贪心,首先我们考虑取出 \(a,b\) 序列中最大的 \(k\) 个数,但这样并不一定满足交集 \(\ge L\) 的限制,因此我们需 ...
- [linux] 常用命令及参数-2
sort 1 sort是把结果输出到标准输出,因此需要输出重定向将结果写入文件 2 sort seq.txt > file.txt 3 sort -u seq.txt 输出去重重复后的行 4 s ...