一、简介

实际生活需求促进了最优化方法的发展。近半个多世纪以来,由于传统优化方法的不足,一些具有全局优化性能且通用性强的进化算法,因其高效的优化性能、无需问题精确描述信息等优点,受到各领域广泛的关注和应用。其中产生最早也最具代表性的进化算法是20世纪70年代源于达尔文自然选择学说和孟德尔遗传变异理论的遗传算法(Genetic Algorithm,GA)。而近年来,人们模拟自然界生物群体行为产生出一系列群体智能优化算法,如Dorigo等通过模拟蚂蚁的寻径行为于1991年提出了蚁群优化算法(Ant Colony Optimization,ACO);Eberhart和Kennedy通过模拟鸟群捕食行为于1995年提出了粒子群优化算法(Particle Swarm Optimization,PSO)。这些算法被广泛应用于工程领域并取得了显著的成果。随着群体智能优化算法的蓬勃发展,Passino于2002年提出了模拟人类大肠杆菌觅食行为的细菌觅食优化算法(Bacteria Foraging Optimization Algorithm,BFOA),为仿生进化算法家族增添了新成员。本章将着重向广大编程爱好者介绍最基本的细菌觅食算法,各编程科研人员可以基于本章算法加以改进并应用到实际案例中。

1 标准细菌觅食优化算法

2 趋向性操作(Chemotaxis)

3 聚集性操作(Swarming)

4 复制性操作(Reproduction)

5 迁徙性操作(Elimination and Dispersal)

实际环境中的细菌所生活的局部区域可能会发生逐渐变化(如食物消耗殆尽)或者发生突如其来的变化(如温度突然升高等)。这样可能会导致生活在这个局部区域的细菌种群被迁徙到新的区域中去或者集体被外力杀死。在BFO算法中模拟这种现象称为迁徙性操作。

6 BFO算法流程

二、源代码

%%%%%%%%%%%%-----BF0算法-----%%%%%%%%%%%%%%%

clc; clear; close all

warning off

feature jit off % 加速代码执行

%-----初始化参数-----

bounds = [-5.12, 5.12;-5.12, 5.12]; % 函数变量范围

p = 2; % 搜索范围的维度

s = 26; % 细菌的个数

Nc = 50; % 趋化的次数

Ns = 4; % 趋化操作中单向运动的最大步数

C(:,1) = 0.001*ones(s,1); % 翻转选定方向后,单个细菌前进的步长

Nre = 4; % 复制操作步骤数

Ned = 2; % 驱散(迁移)操作数

Sr = s/2; % 每代复制(分裂)数

Ped = 0.25; % 细菌驱散(迁移)概率

d_attract = 0.05; % 吸引剂的数量

ommiga_attract = 0.05; % 吸引剂的释放速度

h_repellant = 0.05; % 排斥剂的数量

ommiga_repellant = 0.05; % 排斥剂的释放速度

for i = 1:s % 产生初始细菌个体的位置

P(1,i,1,1,1) = -5.12 + rand*10.24;

P(2,i,1,1,1) = -5.12 + rand*10.24;

end

%----细菌趋药性算法循环开始

%---- 驱散(迁移)操作开始

for l = 1:Ned

%-----复制操作开始

for k = 1:Nre

%-----趋化操作(翻转或游动)开始

for j = 1:Nc

%-----对每一个细菌分别进行以下操作

for i = 1:s

%-----计算函数J(i,j,k,l),表示第i个细菌在第l次驱散第k次

%--------复制第j次趋化时的适应度值

J(i,j,k,l) = fitness(P(:,i,j,k,l));

%-----修改函数,加上其它细菌对其的影响

Jcc = sum(-d_attract*exp(-ommiga_attract*((P(1,i,j,k,l)-...

P(1,1:26,j,k,l)).^2+(P(2,i,j,k,l)-P(2,1:26,j,k,l)).^2)))+...

sum(h_repellant*exp(-ommiga_repellant*((P(1,i,j,k,l)-...

P(1,1:26,j,k,l)).^2+(P(2,i,j,k,l)-P(2,1:26,j,k,l)).^2)));

J(i,j,k,l) = J(i,j,k,l) + Jcc;

%----保存细菌目前的适应度值,直到找到更好的适应度值取代之

Jlast = J(i,j,k,l);

%-----翻转,产生一个随机向量C(i),代表翻转后细菌的方向

Delta(:,i) = (2*round(rand(p,1))-1).*rand(p,1);

% PHI表示翻转后选择的一个随机方向上前进

PHI = Delta(:,i)/sqrt(Delta(:,i)'*Delta(:,i));

%-----移动,向着翻转后细菌的方向移动一个步长,并且改变细菌的位置

P(:,i,j+1,k,l) = P(:,i,j,k,l) + C(i,k)*PHI;

%-----计算细菌当前位置的适应度值

J(i,j+1,k,l) = fitness(P(:,i,j+1,k,l));

%-----游动-----

m = 0; % 给游动长度计数器赋初始值

while(m < Ns) % 未达到游动的最大长度,则循环

m = m + 1;

% 新位置的适应度值是否更好?如果更好,将新位置的适应度值

% 存储为细菌i目前最好的适应度值

if(J(i,j+1,k,l)

Jlast = J(i,j+1,k,l); % 保存更好的适应度值

% 在该随机方向上继续游动步长单位,修改细菌位置

P(:,i,j+1,k,l) = P(:,i,j+1,k,l) + C(i,k)*PHI;

% 重新计算新位置上的适应度值

J(i,j+1,k,l) = fitness(P(:,i,j+1,k,l));

else

% 否则,结束此次游动

m = Ns;

end

end

三、运行结果

四、备注

标签:217,求解,算法,源码,Matlab,优化,matlab

来源: https://blog.csdn.net/TIQCmatlab/article/details/113642565

基于matlab的捕食算法,【优化求解】基于matlab细菌觅食算法的函数优化分析【含Matlab源码 217期】...相关推荐

  1. 【Matlab水果识别】苹果质量检测及分级系统(带面板)【含GUI源码 1613期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]苹果质量检测及分级系统(带面板)[含GUI源码 1613期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  2. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  3. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  4. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  5. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  6. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

  7. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  8. 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  9. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  10. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

最新文章

  1. [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
  2. 2022-2028年中国无菌手套产业发展动态及投资趋势预测报告
  3. ASP.NET MVC:利用ASP.NET MVC4的IBundleTransform集成LESS
  4. 3文件提取器_eMail Address Extractor for Mac(邮件地址提取器)
  5. 从Cell的视图推出一个新的界面
  6. 浅析weak指针的实现
  7. python 消息队列、异步分布式
  8. 《计算机科学概论》—第3章3.3节文本表示法
  9. InputStream 、 InputStreamReader和BufferedReader
  10. 防范攻击 加强管控 - 数据库安全的16条军规
  11. 比Redis快5倍的中间件,究竟为什么这么快?
  12. spark checkpoint
  13. echarts 自定义鼠标悬停展示
  14. ps 计算机 性能设置,Photoshop 中的性能首选项
  15. php测试页面打开速度,测试网站访问速度的五个方法
  16. 看卡辛斯基的警告 让我想起 人类简史
  17. 本周大新闻|苹果首款MR没有主打卖点;Meta认为AI是AR OS的基础
  18. 如何基于IM SDK从零开发移动端聊天功能
  19. 如何应对网站流量暴增
  20. 召集各位软件开发大佬

热门文章

  1. python for IOS,支持iPhone
  2. 接口implements
  3. Linux如何查看所有的用户和组信息
  4. 笔记67 Spring Boot快速入门(七)
  5. killall pkill kill
  6. 2.抽象工厂(Abstract Factory)
  7. 程序-进程-线程 ( 多线程 )
  8. Sizeof的计算看内存分配
  9. C C++ 文件输入与输出
  10. 在线JSON转sarcastic工具