基于改进莱维飞行和混沌映射的金鹰优化算法(10种混沌映射随意切换),附matlab代码

 本篇文章对金鹰优化算法进行改进,首先通过引入混沌映射机制,对其群体进行初始化,增加金鹰个体的多样性;然后在金鹰个体的位置更新公式上引入改进的莱维飞行机制,提高搜索精度,帮助金鹰个体跳出局部最优。

可以选择1-10不同的映射,1-10分别为,tent、Logistic、Cubic、chebyshev、Piecewise、sinusoidal、Sine,ICMIC, Circle,Bernoulli。选择不同的数字可以随意切换。

先上结果图,在CEC2005函数上进行测试,种群个体设置为50个,循环次数为1000次。

f95d8c32e67e27187e11a8e166cfdd0a.png

783ccb905d6229bd24b049bb16d1e8c4.png

e71c0c3f48154e9cae3c1433d82a4300.png

c6648dae036a8b1dcf46a72fb7b97a89.png

6f581847d9647d59a4a7f66d9dcb0ba7.png

b47d2f971e1aea4c62fc48a685706f26.png

f74f0624d00406ecb55869e9e846c969.png

0701b2d1d616e0c13fe300cc1ccb3803.png

4313bb85b21fee78c5f0eda3fed77cc1.png

df6c9026710fe03c57dad085f6540268.png

这里截选了前10个函数进行展示,可以看到改进前后在收敛速度和寻优精度上都有了很大的改进。

接下来讲一下改进的原理。

  1. 混沌映射

    依旧是采用之前文章提到的10种混沌映射,可以自由切换映射方法,本文选取的映射方法是Logistic映射,大家也可以自行更改。没看过之前文章的小伙伴可以看一下。(1条消息) 10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍..._今天吃饺子的博客-CSDN博客

  2. 改进的莱维飞行机制

    本文莱维飞行的添加并非如其他文章那样,直接在粒子更新的时候加上莱维系数,而是稍作改进,这样的效果也确实比直接加莱维系数要好。原理公式如下:

112b51ac543145f1a7d754a84d4aca04.png

其中 , α是步长缩放因子,Levy(β)是萊维随机路径。

21f67085bb3c1d1896b2fdc882f97321.png

改进的原理如下:

740ca0842844879eab0e3ee5839047cd.png

a11c958a820c5fb6b6a9bd9495ed68c6.png

这么做的目的是将金鹰算法与莱维飞行进行优势互补,可以动态的调整每次寻优的比例系数。

代码如下:

%%
clear
clc
close all
%% Inputs 
number='F10'; %选定优化函数,自行替换:F1~F23
% [lb,ub,D,y]:下界、上界、维度、目标函数表达式
[lb,ub,nvars,fun]=CEC2005(number);  
% FunctionNumber =6; % 1-23
options.PopulationSize = 50;
options.MaxIterations  = 1000;
%% Run Multi-Objective Golden Eagle Optimizer options.AttackPropensity = [0.5 ,   2];
options.CruisePropensity = [0.1   , 0.5];
numm = 2; % 混沌映射:1-10分别为,tent、Logistic、Cubic、chebyshev、Piecewise、sinusoidal、Sine,ICMIC, Circle,Bernoulli
[chaosLx,chaosLfval,chaosLConvergenceCurve] = chaosLGEO (numm,fun,nvars,lb,ub, options); %调用改进的GEO算法
[x,fval,ConvergenceCurve] = GEO (fun,nvars,lb,ub, options);  %调用GEO%% Figure
maxcycle = options.MaxIterations;
figure1 = figure('Color',[1 1 1]);
G1=subplot(1,2,1,'Parent',figure1);
func_plot(number)
title(number)
xlabel('x')
ylabel('y')
zlabel('z')
subplot(1,2,2)
G2=subplot(1,2,2,'Parent',figure1);
CNT=20;
k=round(linspace(1,options.MaxIterations,CNT)); %随机选50个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:options.MaxIterations;
semilogy(iter(k),ConvergenceCurve(k),'b-*','linewidth',1);
hold on
semilogy(iter(k),chaosLConvergenceCurve(k),'g-p','linewidth',1);
grid on;
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
box on
legend('GEO','chaosLGEO')
set (gcf,'position', [200,300,700,300])

注意看第16行变量numm,可以选择1-10不同的映射,1-10分别为,tent、Logistic、Cubic、chebyshev、Piecewise、sinusoidal、Sine,ICMIC, Circle,Bernoulli。选择不同的数字可以随意切换。

获取完整代码方式,下方卡片回复关键词:LGEO

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Work20230705

//main.c #include "uart4.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); }int main() {while(1){//将获取到的字符1发送到终端//hal_put_char(hal_get_char()1);hal_put_string…

监控系统Zabbix

zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 通过一个友好的界面进行浏览整个网站…

【设计模式】第十七章:状态模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

谷歌Bard入门指南

文章目录 谷歌Bard入门指南一、简介二、使用指南三、中文化3.1 中文提问3.2 中文回答 四、Hello Game五、亮点 谷歌Bard入门指南 一、简介 Bard 是一个大型语言模型&#xff0c;也称为对话式 AI 或聊天机器人&#xff0c;经过训练&#xff0c;内容丰富且全面。Bard 接受过大量…

Tkinter_使用Progressbar创建和管理进度条

前言 Progressbar是Tkinter库中的一个小部件&#xff0c;用于创建和管理进度条。它可以在图形用户界面中显示任务的进度&#xff0c;并提供了多种样式和配置选项。 使用Progressbar&#xff0c;你可以按照固定或不确定的进度展示任务的进行状态。它可以显示任务完成的百分比&am…

matplotlib设置坐标轴为象限模式

import numpy as np import matplotlib.pyplot as pltx np.linspace(-np.pi, np.pi, 1000) cosy np.cos(x) siny np.sin(x)plt.xlim(min(x), max(x)) plt.ylim(min(cosy), max(cosy)0.5) plt.plot(x, cosy) plt.plot(x, siny) # 设置坐标刻度 plt.xticks([-np.pi, -np.pi/2,…

微前端(拆分和细化,整合历史系统)

接入微前端 项目背景说明 假如我们完成了基于Vue2的项目&#xff0c;假设另外一个团队的小伙伴来实现前台可视化部分&#xff0c;他们使用的是最新的Vue3技术栈&#xff0c;现在有一个需求&#xff0c;他们的前台项目想直接使用我们的登录功能&#xff0c;获得token&#xff…

数据结构与算法(持续更新中..)

一. 概论 1. 数据结构 队列&#xff1a;一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项&#xff1b;队列在尾部添加新元素&#xff0c;并从头部移除元素。最新添加的元素必须排在队列的末尾。&#xff08;例如&#xff1a;去食堂排队打饭&#xff0c;排在前…

新版本vscode使用配置文件功能,解决不同项目使用不同的插件

如果你同时有vue2,vue3的项目。一定会遇到插件的问题。因为vue2项目插件是使用vetur的&#xff0c;vue3是使用volar的。 以前vscode为了在不同项目中能使用不同的配置文件&#xff0c;是使用工作区的概念去解决的&#xff0c;但是比较复杂而且不好用。 现在新版本的vscode&…

Go语言操作MySql数据库

go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库&#xff0c;可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 …

中介者模式的学习与使用

1、中介者模式的学习 中介者模式是一种行为型设计模式&#xff0c;它通过引入一个中介者对象来解耦一组对象之间的交互。中介者模式促进了对象之间的松耦合&#xff0c;使得它们可以独立地进行通信&#xff0c;而不需要直接相互引用。   在中介者模式中&#xff0c;有以下几个…

rabbitMq怎么查看队列消息-Tracing日志

Trace 是Rabbitmq用于记录每一次发送的消息&#xff0c;方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的&#xff0c;需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 rabb…