金鹰优化算法,附MATLAB代码,直接复制

news2024/11/24 15:40:09

金鹰优化算法(golden eagle optimizer, GEO)是于2020年提出的新型智能优化算法,该算法建立于金鹰个体 捕食过程中的巡航和攻击行为之上,通过平衡两者关系,帮助函数寻找最优值,已经在许多方面得到了应用。

关于金鹰算法的原理本篇文章就不再细讲,作者采用金鹰算法在CEC2005函数上进行测试,结果如下:

a9e9d0c412473d038a7ac7d7ca629a7d.png

2db2e3b81c02f3472963f8b685502fd9.png

918f70d7287c243138eb9eb0b70f2534.png

1ed6c37420be9b24bc4bed1d6f60e52f.png

金鹰算法的核心代码如下:

function [x,fval,ConvergenceCurve] = GEO (fun,nvars,lb,ub,options)
%% initialization
PopulationSize = options.PopulationSize;
MaxIterations = options.MaxIterations;
ConvergenceCurve  = zeros (1, MaxIterations);
if length(lb) ~= (nvars)
    lb=lb.*ones(1,nvars);
    ub=ub.*ones(1,nvars);
end
x = lb + rand (PopulationSize,nvars) .* (ub-lb);
for i = 1:size(x,1)
    FitnessScores(i,:) = fun (x(i,:));
end
% solver-specific initialization
FlockMemoryF = FitnessScores;
FlockMemoryX = x;
AttackPropensity = linspace (options.AttackPropensity(1), options.AttackPropensity(2), MaxIterations);
CruisePropensity = linspace (options.CruisePropensity(1), options.CruisePropensity(2), MaxIterations);
%% main loop
for CurrentIteration = 1 : MaxIterations
  % prey selection (one-to-one mapping)
  DestinationEagle = randperm (PopulationSize)';


  % calculate AttackVectorInitial (Eq. 1 in paper)
  AttackVectorInitial = FlockMemoryX (DestinationEagle,:) - x;


  % calculate Radius
  Radius = VecNorm (AttackVectorInitial, 2, 2);


  % determine converged and unconverged eagles
  ConvergedEagles = sum (Radius,2) == 0;
  UnconvergedEagles = ~ ConvergedEagles;


  % initialize CruiseVectorInitial
  CruiseVectorInitial = 2 .* rand (PopulationSize, nvars) - 1; % [-1,1]


  % correct vectors for converged eagles
  AttackVectorInitial (ConvergedEagles, :) = 0;
  CruiseVectorInitial (ConvergedEagles, :) = 0;


  % determine constrained and free variables
  for i1 = 1 : PopulationSize
    if UnconvergedEagles (i1)
      vConstrained = false ([1, nvars]); % mask
      idx = datasample (find(AttackVectorInitial(i1,:)), 1, 2);
      vConstrained (idx) = 1;
      vFree = ~vConstrained;
      CruiseVectorInitial (i1,idx) = - sum(AttackVectorInitial(i1,vFree).*CruiseVectorInitial(i1,vFree),2) ./ (AttackVectorInitial(i1,vConstrained)); % (Eq. 4 in paper)
    end
  end


  % calculate unit vectors
  AttackVectorUnit = AttackVectorInitial ./ VecNorm (AttackVectorInitial, 2, 2);
  CruiseVectorUnit = CruiseVectorInitial ./ VecNorm (CruiseVectorInitial, 2, 2);


  % correct vectors for converged eagles
  AttackVectorUnit(ConvergedEagles,:) = 0;
  CruiseVectorUnit(ConvergedEagles,:) = 0;


  % calculate movement vectors
  AttackVector = rand (PopulationSize, 1) .* AttackPropensity(CurrentIteration) .* Radius .* AttackVectorUnit; % (first term of Eq. 6 in paper)
  CruiseVector = rand (PopulationSize, 1) .* CruisePropensity(CurrentIteration) .* Radius .* CruiseVectorUnit; % (second term of Eq. 6 in paper)
  StepVector = AttackVector + CruiseVector;


  % calculate new x
  x = x + StepVector;


  % enforce bounds
  lbExtended = repmat (lb,[PopulationSize,1]);
  ubExtended = repmat (ub,[PopulationSize,1]);


  lbViolated = x < lbExtended;
  ubViolated = x > ubExtended;


  x (lbViolated) = lbExtended (lbViolated);
  x (ubViolated) = ubExtended (ubViolated);


  % calculate fitness
    for i = 1:size(x,1)
        FitnessScores(i,:) = fun (x(i,:));
    end


  % update memory
  UpdateMask = FitnessScores < FlockMemoryF;
  FlockMemoryF (UpdateMask) = FitnessScores (UpdateMask);
  FlockMemoryX (UpdateMask,:) = x (UpdateMask,:);


  % update convergence curve
  ConvergenceCurve (CurrentIteration) = min (FlockMemoryF);


end


%% return values


[fval, fvalIndex] = min (FlockMemoryF);
x = FlockMemoryX (fvalIndex, :);


fprintf ('Best solution obtained by GEO: %s\n', num2str(x,'%e  '));
fprintf ('Best objective function value obtained by GEO: %e \n', fval);

需要的同学直接粘贴用于自己的实际问题即可。下期内容会对金鹰算法进行改进,敬请关注。

后台回复关键词:TGDM1209,获取完整代码。

参考文献:

Mohammadi-Balani, A., Dehghan Nayeri, M., Azar, A., Taghizadeh-Yazdi, M., Golden Eagle Optimizer: A nature-inspired metaheuristic algorithm, Computers & Industrial Engineering (2020).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Google 将为高端 Chromebook 推出独立品牌

说起 Chromebook&#xff0c;一般大家的第一印象就是价格便宜、配置不高、做工普通&#xff0c;所选的材料也都是以塑料为主&#xff0c;产品主打的市场也是学生和教育群体。在不少人看来&#xff0c;Chromebook 就是一个配备了功能齐全的浏览器&#xff0c;外加一定的文件管理…

GOLANG进阶:Viper,Mysql,Swagger

GOLANG从浅入深必须学习的一些工具包 1.Viper&#xff1a; Viper 是一个完整的 Go 应用程序配置解决方案&#xff0c;优势就在于开发项目中你不必去操心配置文件的格式而是让你腾出手来专注于项目的开发。其特性如下&#xff1a; 支持 JSON/TOML/YAML/HCL/envfile/Java proper…

数据结构--栈在函数递归中的调用

数据结构–栈在函数递归中的调用 void func2(int x) {int n, m;//... }void func1(int a, int b) {int x;//...func2(x);x 5201314;//... }int main() {int a, b, c;//...func1(a, b);//... }函数调用的特点:最后被调用的函数最先执行结束(LIFO) 函数调用时&#xff0c;需要用…

【人工智能与机器学习】基于卷积神经网络CNN的猫狗识别

文章目录 1 引言2 卷积神经网络概述2.1 卷积神经网络的背景介绍2.2 CNN的网络结构2.2.1 卷积层2.2.2 激活函数2.2.3 池化层2.2.4 全连接层 2.3 CNN的训练过程图解2.4 CNN的基本特征2.4.1 局部感知&#xff08;Local Connectivity&#xff09;2.4.2 参数共享(Parameter Sharing)…

顶点数据加入颜色数据

顶点着色器代码&#xff1a; #version 330 core layout(location 0) in vec3 aPos; layout(location 1) in vec3 aColor; out vec3 ourColor; void main(){gl_Position vec4(aPos.x, aPos.y, aPos.z, 1.0f);ourColoraColor; }片段着色器代码&#xff1a; #version 330 cor…

11-切片有什么用?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 11-切片有什么用&#xff1f;

学习 vue3版本

文章目录 创建各种函数setup注意点 ref函数总结 reactive总结 响应式vue2vue3总结 ref与reactive的比较计算属性监视watch的value的问题 watchEffect函数生命周期Hooks函数总结 toRef总结 其他CompositionApishallowReactive与shallowRefreadonly与shallowReadonlytoRaw与markR…

React Antd Form.List 组件嵌套多级动态增减表单 + 表单联动复制实现

Antd Form.List 组件嵌套多级动态增减表单 表单联动复制实现 一、业务需求 有一个页面的组件&#xff0c;其中一部分需要用到动态的增减 复制表单&#xff0c;然后就想起 了使用 Antd 的 Form.List 去完成这个功能。 这个功能的要求是&#xff1a; 首先是一个动态的表单&…

事后多重比较案例分析

一、案例介绍 由单因素方差分析案例中&#xff0c;为研究郁金对低张性缺氧小鼠存活时间的影响&#xff0c;将36只小鼠随机生成A、B以及 C 三组&#xff0c;每组12个&#xff0c;雌雄各半&#xff0c;分别以10g/kg、20g/kg、40g/kg三种不同剂量的郁金灌胃&#xff0c;各组小鼠均…

08-C++学习笔记-类与对象

&#x1f51f;&#x1f512; 08-C学习笔记-类与对象 在本篇学习笔记中&#xff0c;我们将详细讲解C中的类与对象的概念和相关知识。类是C中一种重要的数据类型&#xff0c;它允许我们自定义数据结构和相应的操作。 &#x1f4da; C类与对象详细讲解 ✨类的概念 类是一种用户…

黑客(网络安全)自学

前言&#xff1a; 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答 .4.遇到实在搞不懂的,可以先放放,以后…

3dmax导出cad

3dmax2022 导出cad 导入arcmap 10.2 导出版本为AutoCAD 2007 DWG

玩转Matplotlib的10个高级技巧

Matplotlib是Python中流行的数据可视化库&#xff0c;仅使用简单的几行代码就可以生成图表。但是默认的方法是生成的图表很简单&#xff0c;如果想增强数据演示的影响和清晰度&#xff0c;可以试试本文总结的10个高级技巧&#xff0c;这些技巧可以将可视化提升到一个新的水平: …

Hyperledger Fabric网络快速启动

目录 1、网络服务配置 2、关联的docker-compose-base.yaml 各Peer节点容器设置如下信息。 3、被关联的Peer-base.yaml 4、启动网络 2、完成通道的创建 2.1将节点加入应用通道 更新锚节点 2.为什么要创建节点并将其加入应用通道中&#xff1f; 1、网络服务配置 由于要启动…

人工智能(pytorch)搭建模型16-基于LSTM+CNN模型的高血压预测的应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型16-基于LSTMCNN模型的高血压预测的应用&#xff0c;LSTMCNN模型搭建与训练&#xff0c;本项目将利用pytorch搭建LSTMCNN模型&#xff0c;涉及项目&#xff1a;高血压预测&#xff0c;高血…

鼠标点击切换图片(使用js中的src属性)

使用到的知识点&#xff1a; 模板字符串 js中的src属性 img.src ./images/${i}.jpg 效果展示&#xff1a; 具体代码实现&#xff1a; <body><div class"box" style"width:500px;height:300px;margin:100px auto;"><img src&quo…

Python中获取指定目录下所有文件名的方法

在《Python中文件名和路径的操作》中提到&#xff0c;os模块中的函数可以对文件进行操作。通过递归以及os模块中提供的函数&#xff0c;可以获取指定目录下所有的文件名。 1 基本流程 通过递归获取指定目录下所有文件名的基本流程&#xff0c;如图1所示。 图1 基本流程 2 函…

Web开播系统的技术演进

随着直播SaaS业务的深入发展&#xff0c;Web端开播的诉求变得越来越强烈&#xff0c;对比客户端开播工具如OBS&#xff0c;Web开播与SaaS平台亲和度高&#xff0c;可以让用户快速体验平台全流程&#xff0c;同时易于分享链接&#xff0c;快速连麦。因此&#xff0c;寻求更加稳定…

#10046. 「一本通 2.2 练习 2」OKR-Periods of Words(内附封面)

[POI2006] OKR-Periods of Words 题面翻译 对于一个仅含小写字母的字符串 a a a&#xff0c; p p p 为 a a a 的前缀且 p ≠ a p\ne a pa&#xff0c;那么我们称 p p p 为 a a a 的 proper 前缀。 规定字符串 Q Q Q&#xff08;可以是空串&#xff09;表示 a a a 的…