改三行代码就发了SCI一区?基于全面学习策略的Jaya算法!学会你也可以!CEC2017效果极佳!

        声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~  

目录

原始Jaya算法

改进Jaya算法策略详解:

学习策略1:

学习策略2:

学习策略3:

总结:

结果展示

参考文献

部分代码展示与程序目录

完整代码获取


        今天为大家带来一期基于全面学习策略的Jaya算法代码与原理讲解,不同于以往的23个标准测试函数,此次在难度更高的CEC2017函数上进行测试,并包含CEC2017函数图像,非常美观!效果极佳!同时,也是一篇在《Journal of Intelligent Manufacturing》SCI一区顶刊文章!

        同时,本次程序附带各个算法的平均值,最佳值,标准差,最差值,中位值五种指标!并附带Wilcoxon秩和检验箱型图!所有结果均可一键运行出图!!!

        最重要的是,此次改进并不复杂!非常适合新手小白!心急的小伙伴可直接拉到后文看效果和代码!

原始Jaya算法

        首先给大家介绍一下Jaya算法,Jaya算法的提出者与教学优化算法的提出者是同一位学者:R. Venkata Rao。

        各位一定非常好奇为什么叫Jaya算法?该算法努力通过达到最优解来取得胜利,因此将其命名为 Jaya(Jaya是梵文,意思是胜利)。相比于教学优化算法的两个阶段(即教师阶段与学习阶段),Jaya算法只有一个阶段,并具有无参数运行、求解速度快、不易陷入局部最优解等优点。

        Jaya算法的基本思想是趋近最优解,远离最差解。因此,Jaya算法更新位置的公式如下:

        但是,Jaya算法也存在两个很明显的缺点!

        一是JAYA算法只有一种学习策略,它采用当前最佳解和当前最差解来引导种群的搜索方向。因此,一旦当前最佳个体被困在局部最优中,其他个体将被吸引,进而逐渐陷入局部最优。

        二是在求解具有正数搜索空间的优化问题时,JAYA中搜索算子的有效性可能会受到削弱。在上文的公式中,绝对值符号在保持种群多样性方面非常关键。因此我们实际的工程优化问题的设计变量的值通常都大于0,而绝对值符号对于解决这些问题是无效的。

改进Jaya算法策略详解:

        考虑到原始Jaya算法中的上述不足,提出一种由三种不同学习策略的改进Jaya算法CLJaya!

学习策略1:

        该阶段学习策略基于当前最优个体和当前最差个体,继承了原始JAYA算法的特征,可以表示为:

        其中,φ1和φ2是服从标准正态分布的两个随机数。这里需要指出的是,上式使用两个随机数(即φ1和φ2) 具有标准正态分布,而原始Jaya算法采用两个随机数(即r1和r2) 分布均匀。与均匀分布的随机数相比,标准正态分布的随机数来具有更大的变化幅度,这可以扩展个体的搜索空间。因此,学习策略1比原始Jaya算法更有机会找到更好的解。

学习策略2:

        随着迭代次数的增加,大多数个体都聚集在当前最优个体周围进行局部开发。剩下的少数个体(滞后个体)远离当前的最优个体,执行全局探索任务。

        在搜索过程中,当前种群的平均位置总是在移动。因此,一旦种群陷入局部最优,则滞后个体由当前种群的平均位置引导可以有更多的机会逃离局部最优。鉴于此,学习策略2是基于当前最优个体和当前群体的平均位置设计的,可以定义为:

        其中,φ3和φ4是服从标准正态分布的两个随机数,与学习策略1中一样,并且M是当前种群的平均位置,可以写成:

学习策略3:

        为了加快收敛速度,当前最优个体被认为是CLJAYA中的领导者,可以表示为

        φ5和φ6是0和1之间服从均匀分布的两个随机数,p和q(p≠q≠i)是1和N之间的两个任意整数。此外,考虑其中xi是当前的最佳解,等式右侧的第二项为0。因此,将随机扰动项添加到上式中以避免了这种情况。

总结:

        学习策略1、学习策略2和学习策略3对CLJAYA具有相同的重要性,所以应该为它们分配相同的选择概率。鉴于此,设计的全面学习机制可以表示为:

        总的来说,改进算法就是把原始Jaya算法的一个公式扩展成了三个公式,应该不难理解!

结果展示

        原文作者采用了CEC2013和CEC2014进行了测试,这里为了体现算法的优越性,采用说服力更高的CEC2017进行测试,这里随便选取十个,效果如下!其他的大家可以回去慢慢试!效果都很好!(其中第二个函数被官方删除了,无法得出)

        以上截的10个测试函数的图,可以看到,改进的JAYA算法与原始算法效果非常明显,存在很明显的差距,改进算法有些甚至已经达到最优值,同时也能很好的跳出局部最优。

        但是熟悉优化算法的小伙伴都知道,一次运行可能有随机因素存在,多次运行更有说服力!因此,设置种群个数为30个,每个函数运行10次,得到最优值,标准差,平均值,最差值,中位数五个指标!

        命令行窗口会自动统计这五个指标,为了方便大家撰写,本次程序可将这些指标一次性输出到Excel便于撰写!

        如果想拿程序写论文的话只需复制到Word里即可,另外还有秩和检验结果!同时,还有秩和检验结果!

        秩和检验可以从统计学上验证与其他算法的差异性,可以看到,此次改进的Jaya算法与原始算法差异很大!符合改进的要求!

        随后根据这五个指标画出箱型图!非常美观!

        大家使用该算法优化回归、分类、时序预测模型(如CLJAYA-SVM)或应用到信号分解故障诊断领域都是一个不错的选择!

        以上所有图片,均可一键运行出图并生成Excel!!(其中测试函数图像仅需手动切换函数)

        适用平台:Matlab

参考文献

        [1]Zhang Y, Jin Z. Comprehensive learning Jaya algorithm for engineering design optimization problems[J]. Journal of Intelligent Manufacturing, 2022, 33(5): 1229-1253.

部分代码展示与程序目录

%% 清除环境变量
clear
clc
close all
addpath(genpath(pwd));

%% 参数设置
number = 1;                                                   %  选定优化函数,自行替换
variables_no = 30;                                            %  可选 2, 10, 30, 50, 100
[lb,ub,variables_no,fobj]=Get_Functions_cec2017(number,variables_no);  % [lb,ub,D,y]:下界、上界、维度、目标函数表达式
pop_size = 30;                                                %  种群数量 
max_iter = 500;                                               %  迭代次数

%% 运行各算法
[CLJAYA_Best_score,~,CLJAYA_curve] = CLJAYA(pop_size,max_iter,lb,ub,variables_no,fobj);
[JAYA_Best_score,~,JAYA_curve] = JAYA(pop_size,max_iter,lb,ub,variables_no,fobj);

%% 显示结果
display(['CLJAYA在函数' [num2str(number)],'上的最优值', num2str(CLJAYA_Best_score)]);
display(['JAYA在函数' [num2str(number)],'上的最优值', num2str(JAYA_Best_score)]);

完整代码获取

        如果需要免费获得图中的完整测试代码,只需点击下方小卡片,后台回复关键字:

CLJAYA

        也可点击小卡片,后台回复个人需求(比如CLJAYA-SVM)定制此改进算法CLJAYA优化模型(看到秒回):

        1.回归/时序/分类预测类:SVM、RVM、LSSVM、ELM、KELM、HKELM、DELM、RELM、DHKELM、RF、LSTM、BiLSTM、GRU、BiGRU、PNN、CNN、BP、XGBoost、TCN、BiTCN、ESN等等均可~

        2.组合预测类:CNN/TCN/BiTCN/DBN/Adaboost结合SVM/RVM/ELM/LSTM/BiLSTM/GRU/BiGRU/Attention机制类等均可(可任意搭配非常新颖)~

        3.分解类:EMD、EEMD、VMD、REMD、FEEMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可~

        4.其他:机器人路径规划、无人机三维路径规划、DBSCAN聚类、VRPTW路径优化、微电网优化、无线传感器覆盖优化、故障诊断等等均可~

        5.原创改进优化算法(适合需要创新的同学):2024年的新算法CPO等或麻雀SSA、蜣螂DBO等任意优化算法均可,保证测试函数效果!

        更多代码链接:更多代码链接

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Verilog的简易CPU设计

前言 本篇文章将简单讲解CPU之间各部分的功能及接线,并提供Verilog模拟CPU的各个组成部分。该CPU可以完成一些操作,如:加减法,与或,指令跳转等,最后提供testbench用于测试该CPU的工作情况是否符合预期。 C…

keycloak18.0.0==前后端分离项目中使用,前端react后端springboot

配置keycloak 启动keycloak18 新建一个realm,名字叫test1 新建两个client,一个用于前端,一个用于后端 第一个 react http://localhost:8081/auth/realms/test1/react/ 第二个 backend-service 在两个client下分别创建role testRole backend-servic…

CF575H Bots 题解 组合数学

Bots(波特) 传送门 Sasha and Ira are two best friends. But they aren’t just friends, they are software engineers and experts in artificial intelligence. They are developing an algorithm for two bots playing a two-player game. The ga…

生产企业如何发现瓶颈工序并解决它

众所周知,瓶颈工序决定整体产能,产能均衡是高效生产的重要保证,在100个工序中,只要存在一个工序效率低下,那么99个工序的努力都无法解决整体产能落后的问题。 如何解决瓶颈工序产能不足问题,进而提高工厂整…

k8s部署InfluxDB

(作者:陈玓玏) 1. 拉取镜像 docker pull influxdb #拉取镜像 docker run -d influxdb:latest #后台运行容器 docker exec -it 89b /bin/bash #进入容器,89b是容器ID的前三位 cd /usr/bin #进入容器后,进入此文件夹…

【WPS】压缩图片

第一步: 点击插入,点击图片 第二步: 点击图片工具,点击压缩图片 第三步:

Git 遇到合并冲突如何解决

Git 遇到合并冲突解决方法 前言一、解决冲突 回滚二、将解冲突后的文件 提交到暂存区三、git commit 提交代码到本地Git仓库四、git push 提交五、注意 ​ 2024/3/13 前言 Git突然无法拉取下来,显示有合并冲突: 步骤:解决回滚解决冲突后、添…

数据结构-链表(二)

1.两两交换列表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 输入:head [1,2,3,4] 输出:[2…

[HackMyVm] Vinulizer

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

CCCorelib 点云ICP配准(CloudCompare内置算法库)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 ICP算法总共分为6个阶段,如下图所示: (1)挑选发生重叠的点云子集,这一步如果原始点云数据量比较巨大,一般会对原始点云进行下采样操作。 (2)匹配特征点。通常是距离最近的两个点,当然这需要视评判的准则而…

mysql不能远程连接的解决办法

问题: 安装完mysql之后,在本机可以正常使用,但是通过其它电脑不能远程连接. 解决方案: 在安装mysql的电脑上,登录mysql, 执行权限 GRANT ALL PRIVILEGES ON *.* TO root"%" IDENTIFIED BY "password"; 刷新权限 flush privileges;

C++(3/13)

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std; cla…

【C语言】C语言中执行命令

在C语言编程中&#xff0c;执行命令通常是通过调用库函数完成的。以下是一些C语言中用来执行系统命令的函数&#xff1a; 1. system(): 这是C语言标准库函数之一&#xff0c;能够执行命令行命令。它调用操作系统的命令处理器来执行给定的命令。 #include <stdlib.h>in…

雅特力AT32A403开发板评测 03 官方图形化配置工具Work Bench使用

03 雅特力AT32A403开发板评测 官方图形化配置工具Work Bench使用 1. 软硬件平台 AT32A403A Board开发板 MDK-ARM Keil Work Bench 2. AT32 Work Bench 为了方便开发者快速开发芯片&#xff0c;国外大厂的搞了单片机图形化配置工具&#xff0c;生成初始化配置代码&#x…

算法空间复杂度计算

目录 空间复杂度定义 影响空间复杂度的因素 算法在运行过程中临时占用的存储空间讲解 例子 斐波那契数列递归算法的性能分析 二分法&#xff08;递归实现&#xff09;的性能分析 空间复杂度定义 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大…

MyBatis3源码深度解析(十一)MyBatis常用工具类(四)ObjectFactoryProxyFactory

文章目录 前言3.6 ObjectFactory3.7 ProxyFactory3.8 小结 前言 本节研究ObjectFactory和ProxyFactory的基本用法&#xff0c;因为它们在MyBatis的源码中比较常见。这里不深究ObjectFactory和ProxyFactory的源码&#xff0c;而是放到后续章节再展开。 3.6 ObjectFactory Obj…

ES6(三):Iterator、Generator、类的用法、类的继承

一、迭代器Iterator 迭代器是访问数据的一个接口&#xff0c;是用于遍历数据结构的一个指针&#xff0c;迭代器就是遍历器 const items[one,two,three];//创建新的迭代器const ititems[Symbol.iterator]();console.log(it.next()); done&#xff1a;返回false表示遍历继续&a…

04_拖动文件渲染在页面中

新建一个文件夹&#xff0c;跟之前一样&#xff0c;在 Vscode 终端里输入 yarn create electron-app Drag。 在 index.html 添加以下代码&#xff0c;JS 文件夹和 render.js 都是新创建的&#xff1a; 首先&#xff0c;css 文件一般和 html 结合使用&#xff0c;相当于 html 是…

Prometheus 监控系统

目录 概述 Prometheus定义 Prometheus 的特点 Prometheus 的生态组件 Prometheus 的工作模式 Prometheus 的工作流程 Prometheus 的局限性 1.部署 Prometheus 上传prometheus包二级制安装 配置系统启动文件&#xff0c;启动 Prometheust 2.部署 Exporters 上传node…

[Spark SQL]Spark SQL读取Kudu,写入Hive

SparkUnit Function&#xff1a;用于获取Spark Session package com.example.unitlimport org.apache.spark.sql.SparkSessionobject SparkUnit {def getLocal(appName: String): SparkSession {SparkSession.builder().appName(appName).master("local[*]").getO…
最新文章