1.关于FOA的基本概念

果蝇优化算法(FOA)是一种基于果蝇觅食行为推演出寻求全局优化的新方法。果蝇本身在感官知觉上优于其他物种,尤其是嗅觉和视觉上。果蝇的嗅觉器官能很好的搜集漂浮在空气中的各种气味,甚至能够嗅到40公里以外的食物源。然后,飞到食物位置附近后亦可使用敏锐的视觉发现食物和同伴聚集的位置,并且向该方向飞去。

果蝇算法可应用于求解最优解。

果蝇群体迭代搜寻食物的步骤如下:

(1)随机初始化果蝇群体位置。

Init X_axis

Init Y_axis

(2)赋予果蝇个体利用嗅觉搜寻食物的随机距离与方向。

Xi = X_axis + Random Value

Yi = Y_axis + Random Value

(3)由于无法得知食物的位置,因此先估计与原点的距离(Dist),再计算味道浓度判定值(S),此值为距离的倒数。

Disti = sqrt(Xi^2 + Yi^2)

Si = 1 / Disti

(4)味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度(Smelli)。

Smelli = Function(Si)

(5)找出该果蝇群体中味道浓度最高的果蝇(求极大值)。

[bestSmell bestIndex] = max(Smell)

(6)保留最佳味道浓度值与x、y的坐标,此时果蝇群体利用视觉往该位置飞去。

Smellbest = bestSmell

X_axis = X(bestIndex)

Y_axis = Y(bestIndex)

(7)进入迭代寻优,重复执行步骤2-5,并判断味道浓度是否优于前一迭代味道浓度,若是则实行步骤6。

2.举例:解析果蝇优化算法求解极小值

以FOA算法求解函数y=-5 + x*x的极小值,极小值为-5。

MATLAB代码如下:

味道浓度判定函数

function [ y ] = Fitness( x )%味道浓度判定函数y = x^2 - 5;end

FOA算法

%maxgen为迭代次数,sizepop为种群规模
function [ yy, Xbest, Ybest  ] = FOA( maxgen, sizepop )%*** 随机初始果蝇群里位置X_axis = 10 * rand();Y_axis = 10 * rand();%*** 果蝇寻优开始,利用嗅觉寻找食物for i=1 : sizepop%*** 赋予果蝇个体利用嗅觉搜寻食物之随机方向与距离X(i) = X_axis + 2 * rand() - 1;Y(i) = Y_axis + 2 * rand() - 1;%*** 由于无法得知食物位置,因此先估计与原点的距离(Dist),再计算味道浓度判定值(S),此值为距离的倒数D(i) = (X(i)^2 + Y(i)^2)^0.5;S(i) = 1 / D(i);%*** 味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function),以求出该果蝇个体位置的味道浓度(Smell(i))Smell(i) = Fitness(S(i));end%*** 找出此果蝇群里中味道浓度最低的果蝇(求极小值)[bestSmell bestindex] = min(Smell);%*** 保留最佳味道浓度值与x,y的坐标,此时果蝇群里利用视觉往该位置飞去X_axis = X(bestindex);Y_axis = Y(bestindex);Smellbest = bestSmell;%*** 果蝇迭代寻优开始for g=1 : maxgen%*** 赋予果蝇个体利用嗅觉搜寻食物的随机方向和距离for i=1 : sizepopX(i) = X_axis + 2 * rand() - 1;Y(i) = Y_axis + 2 * rand() - 1;%*** 由于无法得知食物位置,因此先估计与原点的距离(Dist),再计算味道浓度判定值(S),此值为距离的倒数D(i) = (X(i)^2 + Y(i)^2)^0.5;S(i) = 1 / D(i);%*** 味道浓度判定值(S)代入味道浓度判定函数,以求出该果蝇个体位置的味道浓度(Smell(i))Smell(i) = Fitness(S(i));end;%*** 找出此果蝇群里中味道浓度最低的果蝇(求极小值)[bestSmell bestindex] = min(Smell);%*** 判断味道浓度是否优于前一次迭代味道浓度,若是则保留最佳味道浓度值与x,y的坐标,此时果蝇群体利用视觉往该位置飞去if bestSmell < SmellbestX_axis = X(bestindex);Y_axis = Y(bestindex);Smellbest = bestSmell;end;%*** 每次最优Semll值记录到yy数组中,并记录最优迭代坐标yy(g) = Smellbest;Xbest(g) = X_axis;Ybest(g) = Y_axis;end;end

主函数

%*** 清空运行环境
clc;
clear;%*** 设置参数
maxgen = 200; %迭代次数
sizepop = 50; %种群规模[ yy, Xbest, Ybest  ] = FOA( maxgen, sizepop );%*** 绘制迭代味道浓度与果蝇飞行路径趋势图
figure(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);

迭代求解极小值函数曲线如下:

果蝇搜寻轨迹如下:

果蝇优化算法(FOA)相关推荐

  1. python实现果蝇优化算法(FOA算法)

    # 该方法可以运行,适用于调整多个参数的方法 import numpy as np import matplotlib.pyplot as plt #定义需要解的函数(名称为fun1) def fun ...

  2. 果蝇优化算法(FOA)原理

    https://www.cnblogs.com/fd-682012/p/11935772.html https://blog.csdn.net/stm32_newlearner/article/det ...

  3. 果蝇优化算法 C语言,果蝇优化算法(FOA)

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

  4. MATLAB中果蝇味道浓度判定函数,果蝇优化算法的加权策略研究

    摘  要: 针对基本果蝇优化算法(FOA)收敛速度慢和寻优精度不高的缺点,在位置更新公式中引入加权因子,提出了基于线性递减策略和先增后减策略的两种加权果蝇优化算法(WFOA),从而增强了种群的多样性. ...

  5. MATLAB中果蝇味道浓度判定函数,果蝇优化算法的分析.PDF

    果蝇优化算法的分析 2017 年 第 26 卷 第 2 期 计 算 机 系 统 应 用 果蝇优化算法的分析① 韩 虎 (兰州交通大学 电子与信息工程学院, 兰州 730070) 摘 要: 本文针对果蝇 ...

  6. 【路径规划】基于果蝇优化算法实现机器人路径规划matlab源码

    一.简介 果蝇优化算法(FOA)是一种基于果蝇觅食行为推演出寻求全局优化的新方法.果蝇本身在感官知觉上优于其他物种,尤其是嗅觉和视觉上.果蝇的嗅觉器官能很好的搜集漂浮在空气中的各种气味,甚至能够嗅到4 ...

  7. 果蝇优化算法(Fruit Fly Optimization Algorithm,FOA)-Matlab源码

    获取更多资讯,赶快关注上面的公众号吧! 文章目录 果蝇优化算法(Fruit Fly Optimization Algorithm,FOA) 启发 初始化 食物搜索 计算味道浓度判定值 适应度评估 确定 ...

  8. 智能优化算法之果蝇优化算法(FOA)的实现(Python附源码)

    一.果蝇优化算法的实现思路 果蝇优化算法(Fruit Fly Optimization Algorithm,FOA)是潘文超于2011年提出的一种群智能优化算法,它模拟自然界中的果蝇进行觅食时的方式, ...

  9. 【MATLAB】自适应果蝇优化算法整定PID控制器参数(六)—— 一阶带时延的被控对象

    [MATLAB]自适应果蝇优化算法整定PID控制器参数(六)-- 一阶带时延的被控对象 目录 [MATLAB]自适应果蝇优化算法整定PID控制器参数(六)-- 一阶带时延的被控对象 0研究背景 1自适 ...

最新文章

  1. 温州大学《机器学习》课程课件和视频(四)朴素贝叶斯
  2. 本次案例:对于sun 服务器的故障排查
  3. firefox自动化测试的常用插件
  4. 见微知著(一):解析ctf中的pwn--Fast bin里的UAF
  5. 到底是谁发明了物联网?
  6. java调用python_Python教程:17个冷门但实用的小技巧
  7. python生成wps文件_使用Python操作XLS文件(wps中叫et)
  8. JetBrains DataGrip 2018.2.3中文破解版 含jar文件注册码激活教程(转)
  9. Android怎么插手机卡,一加手机3怎么装卡 一加3手机SIM卡安装图文教程
  10. 域名信息备案管理系统php,如何查询域名备案号
  11. Flutter第一天
  12. CAD梦想画图中的“线宽设置”
  13. 为 a.out 举行一个特殊的告别仪式
  14. c语言循环菜鸟,C语言菜鸟基础教程之for循环
  15. UI设计中最重要的元素和原则是什么
  16. java中math的方法_Java中Math类常用方法代码详解
  17. MySql-基础查询与排序
  18. 牛客网《直通BAT面试算法精讲课》优惠码
  19. MemoryError的处理方式
  20. “云办公”如何用任务协同工具搞定项目和团队管理?

热门文章

  1. 100行python代码实现五子棋-教程
  2. 工具 svn 介绍和简单用法
  3. 如何承接软件外包项目
  4. 云呐数据备份|什么是结构化数据
  5. 不要小瞧你身边那位看起来很“懦弱”的中年人
  6. 一键卸载Ubuntu的火狐浏览器
  7. 先验概率、后验概率、似然概率概念
  8. 红米5plus刷android one,安卓刷机必备!TWRP恢复工具添加支持红米5/雷蛇手机
  9. 如何成为优秀的工作者
  10. 互斥锁的概念和使用方法。