独家原创!重磅推出!多策略改进鹈鹕优化算法,效果极好!五大经典测试集表现均为最佳!精品力荐!MATLAB代码..._poa改进策略-程序员宅基地

技术标签: 人工智能  

鹈鹕优化算法(Pelican Optimization Algorithm,POA)是2022年由Pavel Trojovský和Mohammad Dehghani 提出的,该算法模拟了鹈鹕在狩猎过程中的自然行为。该成果于2022年发表在知名SCI期刊Sensors上。目前谷歌学术上查询被引200次。

关于鹈鹕算法的具体原理公式可以查看这篇文章:智能优化算法之鹈鹕算法(POA),原理公式详解,附matlab代码

首先声明:本期算法由作者自行改进,内容与创新点足够支撑写一篇论文!且第一发布渠道就是微信公众号,此前作者并未在其他任何平台进行发布!也就是说这就是第一手资料!需要的速速下载!获取代码的方式放在文末了。

cae8bcdf03c38660a878835d6b7b1125.png

本期推出的新算法为:融合麻雀警戒机制与柯西变异的鹈鹕优化算法(IPOA),该简写只是为了区分原始鹈鹕算法而自己临时起的,大家可以根据自己的想法修改这个简写。

IPOA是作者在仔细考虑了原始鹈鹕算法公式的基础上,持续研究了很久才成功的。

改进亮点

①在五大经典测试集进行测试

在CEC2005,CEC2017,CEC2019,CEC2021,CEC2022五大经典测试集中,融合麻雀警戒机制与柯西变异的鹈鹕优化算法(IPOA)表现均为最佳!

②程序可一键运行,自动生成统计表格。

每个算法各跑30次,在当前目录下可自动生成excel表格,除了对每个算法的平均值,最佳值,标准差,最差值,中位值进行统计外,还有另外一个表格专门统计秩和检验的结果。

③与原始鹈鹕算法复杂度保持一致

本期推出的算法不会在循环中多次调用适应度函数,没有添加所谓的贪婪策略,反向学习等增添复杂度的手段。且改进前后的鹈鹕算法复杂度保持一致!

④与多种智能算法进行对比试验

本期算法一共与其余5种效率或热度较高的智能算法进行对比试验。包括:原始鹈鹕优化算法(POA),金豺算法(GJO),猫沙群算法(SCSO),减法优化器算法(SABO),北方苍鹰算法(NGO)。选用的这几个算法,都是近期比较热门,谷歌学术引用次数较多的算法,公信力较足!

改进策略详解

接下来直接上改进策略:

改进点1:加入Tent混沌映射,增加鹈鹕的多样性

由于基本鹈鹕优化算法的初始种群是随机生成的,无法保证个体的初始位置在搜索空间中的均匀分布,影响了算法的搜索速度和优化性能。在改进鹈鹕算法的初始化过程中引入了Tent 映射,增加初始种群的遍历性。 

其中,  为第    只鹈鹕的位置;  为变量边界下限;   为变量边界上限;  为混沌序列;α是常数,一般取0.3。Tent映射图如下所示:

2d76ee428b2e3c94248374eb40c16ec1.png

8882166de80a69b3d1b02751884d9917.png

进点2:在鹈鹕算法的移向猎物阶段引入非线性权重因子

协调元启发式算法的局部寻优能力和全局搜索能力是影响算法寻优精度与寻优速度的关键因素。由于鹈鹕个体位置的更新与当前鹈鹕的位置息息相关,因此使用非线性惯性权重因子  用于调整鹈鹕位置更新与当前鹈鹕位置信息的相关度。

在算法迭代初期,ω的值较小,寻优个体位置的更新受到当前鹈鹕位置的影响较小,有利于算法在更大的范围内进行搜索,提高算法的全局开发能力;随着寻优过程的推进,ω的值逐渐增大,寻优个体位置的更新受到当前鹈鹕位置的影响变大,缩小算法的寻优范围,有助于算法搜索最优解,不但提高了算法的局部勘探能力,而且提升了算法的收敛速度。

进点3:在鹈鹕算法的掠过水面阶段引入柯西变异策略

在鹈鹕算法的掠过水面阶段,引入柯西变异策略。每次迭代都比较一下当前鹈鹕适应度值与种群平均适应度值的大小关系。当鹈鹕适应度值比种群平均适应度值高时,表示当前鹈鹕为聚集状态,此时为了增加鹈鹕多样性,采用柯西变异策略。当鹈鹕适应度值比种群平均适应度值低时,采用原始的鹈鹕位置更新方法。

改进点4:融合麻雀警戒机制

在鹈鹕算法掠过水面阶段,增加麻雀警戒机制。将鹈鹕融合麻雀的警戒机制,可以使得鹈鹕算法更快的提升收敛速度。当鹈鹕意识到危险时,群体边缘的鹈鹕会迅速向安全区域移动,以获得更好的位置,位于种群中间的鹈鹕则会随机走动,以靠近其它鹈鹕。

算法原理会在压缩包中,有专门的word文档讲清楚,有详细的原理公式!

结果展示

在CEC2005中测试:

c94f8c65dca0b81645d623674365ccad.png

de38f6daf6004745253d124eba8ac0f1.png

1c88e35a5699994272a4b9beec8b9a01.png

747ebc5900449f00ac65a262c77f84c4.png

3adc4046d83c62c0006b09ce330e6c83.png

a54019a0405024098e9c056bd8fd7876.png

这里截了一些图,可以看到在CEC2005函数的测试效果是非常不错的。了解智能算法的小伙伴一定知道,F6,F12,F13这几个函数最能考验一个算法的优劣,本文推出的新算法在这几个函数的测试均为最佳!将每个算法迭代500次,种群个数设置为30个,每个函数运行30次,求最优值,标准差,平均值,最差值,中位数共五个指标如下,秩和检验结果,箱线图等如下所示。

运行后会自动出现一个excel表格,用来统计五种指标结果:

c5b7aa07bc9b0d09bf66bbf40f58347f.png

秩和检验结果:

d80ef6be81dbd50e59eee843a2dea4ce.png

CEC2005测试集对应的箱线图:

602d2655a3d6b1091252e58116fbb205.jpeg

在CEC2017中测试:

4242140801b6af18c4d5a4e5ff49b52b.png

ef93f645e54f3d25859cf02aec946c41.png

 这里截了一些图,有维度为30和50的,可以看到在CEC2017函数的测试效果是非常不错的。

将每个算法迭代500次,种群个数设置为30个,每个函数运行30次,求最优值,标准差,平均值,最差值,中位数共五个指标如下,秩和检验结果,箱线图等如下所示。

五种指标结果:

17fb5c9f50e4ba2520edaba555093c61.png

秩和检验结果:

268b75cbe9cfacea7cff0d50d87fbe75.png

CEC2017测试集对应的箱线图:

639d1ab09d2b752e1d62ef077ff86924.png

在CEC2019中测试:

箱线图:

4fad716f017eadebb96518f011d89fe0.png

五种指标统计结果:

29d32e6dd21fb9385f1cf327108ce8fd.png

秩和检验结果:

84e586e0c39d7a3c146e0f375528ff15.png

在CEC2021中测试:

箱线图:

d53f9bb68a0b705d7153c9e4ae38a184.png

五种指标结果:

66c3e749c361e28fe0b593a9dd79a11a.png

秩和检验结果:

39e17bf4d7fde9b545be2f54630d0118.png

在CEC2022中测试:

由于篇幅原因这里就只放箱线图了,从箱线图也完全能看出来算法的效果了。

3cb3a4b56d13fe353cecc156f46fd639.png

代码展示

代码目录如下:

c63aa3b47deb487e5e0cf938f2ec968b.png

每个文件子目录如下,以为CEC2005举例展示:

071256461e9fcce913d9310bfec58ccd.png

每个文件都包含一个作图的程序(plotCEC2005_Main.m)和一个统计指标一键生成excel和箱线图的程序(runsCEC2005_Main.m)

运行runsCEC2005_Main.m后,会直接生成表格,其中result.xls即为最优值,标准差,平均值,最差值,中位数指标统计结果,ranksumresult.xls为秩和检验结果。

部分代码展示:

RESULT=[];   %统计标准差,平均值,最优值等结果
rank_sum_RESULT=[];  %统计秩和检验结果


F = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23];


if box_pp ==1
    figure('Name', '箱型图', 'Color', 'w','Position', [50 50 1400 700])
end


for func_num = 1:length(F)    %CEC2005有23个函数
    % Display the comprehensive results
    disp(['F',num2str(F(func_num)),'函数计算结果:'])
    [lower_bound,upper_bound,variables_no,fhd]
=Get_Functions_details([
'F'
,num2str(F(func_num))]);
    resu = [];  %统计标准差,平均值,最优值等结果
    rank_sum_resu = [];   %统计秩和检验结果
    box_plot = [];  %统计箱型图结果
    %% Run the IPOA algorithm for "run" times
    for nrun=1:run
        [final,position,iter]=IPOA(pop_size,max_iter,lower_bound,upper_bound,variables_no,fhd);
        final_main(nrun)=final;
        z1(nrun) =  final;
    end
    box_plot = [box_plot;final_main]; %统计箱型图结果
    zz = [min(final_main);std(final_main);mean(final_main);median(final_main);max(final_main)];
    resu = [resu,zz];
    disp(['IPOA:最优值:',num2str(zz(1)),' 标准差:',num2str(zz(2)),' 平均值:',num2str(zz(3)),' 中值:',num2str(zz(4)),' 最差值:',num2str(zz(5))]);
    %% Run the GJO algorithm for "run" times
    for nrun=1:run
        [final,position,iter]=GJO(pop_size,max_iter,lower_bound,upper_bound,variables_no,fhd);
        final_main(nrun)=final;
        z2(nrun) =  final;
    end
    box_plot = [box_plot;final_main]; %统计箱型图结果
    zz = [min(final_main);std(final_main);mean(final_main);median(final_main);max(final_main)];
    resu = [resu,zz];
    rs = ranksum(z1,z2);
    if isnan(rs)  %当z1与z2完全一致时会出现NaN值,这种概率很小,但是要做一个防止报错
    end
    rank_sum_resu = [rank_sum_resu,rs]; %统计秩和检验结果
    disp(['GJO:最优值:',num2str(zz(1)),' 标准差:',num2str(zz(2)),' 平均值:',num2str(zz(3)),' 中值:',num2str(zz(4)),' 最差值:',num2str(zz(5))]);
点击下方卡片获取更多代码!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/woaipythonmeme/article/details/134885410

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签