融合正余弦和折射反向学习的北方苍鹰优化算法,与金鹰/蜣螂/白鲸/霜冰算法对比...

news2024/11/15 19:47:52

今天的主角是:融合正余弦和折射反向学习的北方苍鹰优化算法(SCNGO),算法由作者自行改进,目前应该没有文献这样做。

改进策略参照的上一期改进的麻雀优化算法,改进点如下:

采用折射反向学习策略初始化北方苍鹰算法个体,基本思想是通过计算当前解的反向解来扩大搜索范围,借此找出给定问题更好的备选解;

采用正余弦策略替换原始苍鹰算法的勘察阶段的位置更新公式;

对正余弦策略的步长搜索因子进行改进;原始步长搜索因子呈线性递减趋势,不利于进一步平衡北方苍鹰算法的全局搜索和局部开发能力。

在CEC2005函数集上进行测试,结果如下:其中SCNGO为本文所提改进算法,DBO是蜣螂优化,GEO是金鹰优化,RIME是霜冰优化算法,BWO是白鲸优化算法,NGO是北方苍鹰优化。

算法迭代1000次,每种算法的粒子数设置为100。

29917751dc573d2a415b852d7dc20b8a.png

8098d7ab4f912b2df3514a7f5c88722d.png

1a51c3935c4995c86c034b7a186234a0.png

98aa5f524dde9fd300f23f4b2f21b442.png

c087eb3925a27cfd8705d0bca8d69c1e.png

ccad621f41412079acf62a4c901f2151.png

结果分析:在单峰值函数与多峰值函数的测试中可以看到,改进的北方苍鹰优化算法表现还是不错滴。

未改进的北方苍鹰(NGO)源代码展示:

%% 
function [Score,Best_pos,NGO_curve]=NGO(Search_Agents,Max_iterations,Lowerbound,Upperbound,dimensions,objective)
Lowerbound=ones(1,dimensions).*(Lowerbound);                              % Lower limit for variables
Upperbound=ones(1,dimensions).*(Upperbound);                              % Upper limit for variables
X=[];
X_new=[];
fit=[];
fit_new=[];
NGO_curve=zeros(1,Max_iterations);
for i=1:dimensions
    X(:,i) = Lowerbound(i)+rand(Search_Agents,1).*(Upperbound(i) -Lowerbound(i));              % Initial population
end
for i =1:Search_Agents
    L=X(i,:);
    fit(i)=objective(L);                    % Fitness evaluation (Explained at the top of the page. )
end
for t=1:Max_iterations  % algorithm iteration   
    %%  update: BEST proposed solution
    [best , blocation]=min(fit);
    if t==1
        xbest=X(blocation,:);                                           % Optimal location
        fbest=best;                                           % The optimization objective function
    elseif best<fbest
        fbest=best;
        xbest=X(blocation,:);
    end
    %% UPDATE Northern goshawks based on PHASE1 and PHASE2
    for i=1:Search_Agents
        %% Phase 1: Exploration
        I=round(1+rand);
        k=randperm(Search_Agents,1);
        P=X(k,:); % Eq. (3)
        F_P=fit(k);
        if fit(i)> F_P
            X_new(i,:)=X(i,:)+rand(1,dimensions) .* (P-I.*X(i,:)); % Eq. (4)
        else
            X_new(i,:)=X(i,:)+rand(1,dimensions) .* (X(i,:)-P); % Eq. (4)
        end
        X_new(i,:) = max(X_new(i,:),Lowerbound);X_new(i,:) = min(X_new(i,:),Upperbound);
        % update position based on Eq (5)
        L=X_new(i,:);
        fit_new(i)=objective(L);
        if(fit_new(i)<fit(i))
            X(i,:) = X_new(i,:);
            fit(i) = fit_new(i);
        end
        %% END PHASE 1
        %% PHASE 2 Exploitation
        R=0.02*(1-t/Max_iterations);% Eq.(6)
        X_new(i,:)= X(i,:)+ (-R+2*R*rand(1,dimensions)).*X(i,:);% Eq.(7)
        
        X_new(i,:) = max(X_new(i,:),Lowerbound);X_new(i,:) = min(X_new(i,:),Upperbound);
        
        % update position based on Eq (8)
        L=X_new(i,:);
        fit_new(i)=objective(L);
        if(fit_new(i)<fit(i))
            X(i,:) = X_new(i,:);
            fit(i) = fit_new(i);
        end
        %% END PHASE 2
    end% end for i=1:N
    %%
    %% SAVE BEST SCORE
    best_so_far(t)=fbest; % save best solution so far
    average(t) = mean (fit);
    Score=fbest;
    Best_pos=xbest;
    NGO_curve(t)=Score;
end
en

改进的北方苍鹰部分代码展示

clear all 
clc
close all


PD_no=100;      %Number of sand cat
F_name='F10';     %Name of the test function
Max_iter=1000;    %Maximum number of iterations
[LB,UB,Dim,F_obj]=CEC2005(F_name); %Get details of the benchmark functions




%% BWO    
[Best_pos,Best_score, BWO_cg_curve ] = BWO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call BWO
fprintf ('Best solution obtained by BWO: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by BWO  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% DBO    
[Best_pos,Best_score, DBO_cg_curve ] = DBO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call DBO
fprintf ('Best solution obtained by DBO: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by DBO  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% GEO
options.PopulationSize = PD_no;
options.MaxIterations  = Max_iter;
[Best_pos,Best_score, GEO_cg_curve ] =  GEO (F_obj,Dim,LB,UB,options);  % Call GEO
fprintf ('Best solution obtained by GEO: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by GEO  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% RIME    
[Best_pos,Best_score, RIME_cg_curve ] = RIME(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call RIME
fprintf ('Best solution obtained by RIME: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by RIME  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% NGO
[Best_PD,PDBest_P,NGO_cg_curve]=NGO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call NGO
fprintf ('Best solution obtained by NGO: %s\n', num2str(Best_PD,'%e  '));
display(['The best optimal value of the objective funciton found by NGO  for ' [num2str(F_name)],'  is : ', num2str(PDBest_P)]);


%% SCNGO
[BsSCNGO,BpSCNGO,SCNGO_cg_curve]=SCNGO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call MSCNGO
fprintf ('Best solution obtained by SCNGO: %s\n', num2str(BsSCNGO,'%e  '));
display(['The best optimal value of the objective funciton found by SCNGO  for ' [num2str(F_name)],'  is : ', num2str(BpSCNGO)]);




CNT=40;
k=round(linspace(1,Max_iter,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:Max_iter;
figure('Position',[154   145   894   357]);
subplot(1,2,1);
func_plot(F_name);     % Function plot
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([F_name,'( x_1 , x_2 )'])
subplot(1,2,2);       % Convergence plot
h2 = semilogy(iter(k),DBO_cg_curve(k),'b-*','linewidth',1);
hold on
h3 = semilogy(iter(k),GEO_cg_curve(k),'k-s','linewidth',1);
hold on
h4 = semilogy(iter(k),RIME_cg_curve(k),'r-o','linewidth',1);
hold on
h5 = semilogy(iter(k),BWO_cg_curve(k),'y-+','linewidth',1);
hold on
h6 = semilogy(iter(k),NGO_cg_curve(k),'m-^','linewidth',1);
hold on
h1 = semilogy(iter(k),SCNGO_cg_curve(k),'g-p','linewidth',1);
xlabel('Iteration#');
ylabel('Best fitness so far');
legend('DBO','GEO','RIME','BWO','NGO','SCNGO');

完整代码获取方式,后台回复关键词:

SCNGO

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

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

相关文章

【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试

**本文由博主本人整理自第六届字节跳动青训营&#xff08;后端组&#xff09;&#xff0c;首发于稀土掘金&#xff1a;&#x1f517;Go语言工程实践之测试 | 青训营 目录 一、概述 1、回归测试 2、集成测试 3、单元测试 二、单元测试 1、流程 2、规则 3、单元测试的例…

AQS抽象同步队列核心原理

CLH自旋锁 JUC中显式锁基于AQS抽象队列同步器&#xff0c;而AQS是CLH锁的一个变种。队列头结点可以获得锁&#xff0c;其他节点排队等候。 在争夺锁激烈的情况下&#xff0c;为了减少CAS空自旋&#xff08;CAS需要CPU进行内部通信保证缓存一致性造成流量过大引起总线风暴&…

【代码随想录day21】二叉搜索树中的众数

题目 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&am…

Git移除commit过的大文件

前言&#xff1a;在提交推送本地更改至仓库时&#xff0c;误将大文件给提交了&#xff0c;导致push时报错文件过大&#xff0c;因此需要将已经commit的大文件移除后再push 若已知要删除的文件或文件夹路径&#xff0c;则可以从第4步开始 1.对仓库进行gc操作 $ git gc 2.查询…

ThinkPHP 一对多关联

用一对多关联的前提 多的一方的数据库表有一的一方数据库表的外键。 举例&#xff0c;用户获取自己的所有文章 数据表结构如下 // 用户表 useruser_id - integer // 用户主键name - varchar // 用户名称// 文章表 articlearticle_id - integer // 文章主键title - varchar …

WSL2安装google chrome浏览器

一. 环境: Windows 11 Ubuntu-22.04 二. 安装google-chrome步骤&#xff08;官方文档&#xff09;&#xff1a; 1. 创建文件夹&#xff1a;mkdir chrome 2. 进入目录&#xff1a;cd chrome/ 3. 下载chrome压缩包&#xff1a;sudo wget https://dl.google.com/linux/direct/go…

学习 NestJs 的第一步

安装 NestJS 的先决条件和安装 NestJS NodeJS 的版本需要大于等于 16。 安装 NestJS 的命令是&#xff1a;npm i -g nestjs/cli。 使用命令创建项目 使用 nest new <项目名称> 来创建项目&#xff0c;假如要开启 TS 的严格语法功能的话&#xff0c;可以把--strict 标…

【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块15

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

OSPF的拓展配置

OSPF的拓展配置 1.手工认证 --- 在OSPF数据包交互中&#xff0c;邻居之间的数据报中将携带认证口令&#xff0c;两边认证口令相同&#xff0c;则意味着身份合法 OSPF的手工认证总共分为三种&#xff1a; 1.接口认证 [r5-GigabitEthernet0/0/0]ospf authenticati…

GB/T 25000.51解读——软件产品的性能效率怎么测?

GB/T 25000.51-2016《软件产品质量要求和测试细则》是申请软件检测CNAS认可一定会用到的一部国家标准。在前面的文章中&#xff0c;我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容以及对软件产品的八大质量特性中的功能性…

fastposter v2.16.0 让海报开发更简单

fastposter v2.16.0 让海报开发更简单 &#x1f525;&#x1f525;&#x1f525; fastposter海报生成器是一款快速开发海报的工具。只需上传一张背景图&#xff0c;在对应的位置放上组件&#xff08;文字、图片、二维&#x1f434;、头像&#xff09; 点击代码直接生成各种语言…

个人信息的编写以及头像的联动

下面这个是导航栏通过on触发的事件 与图片联动 <template><div><ul><li>{{obj.account}}</li><li>{{obj.ctime|dataFormat}}</li><li>{{obj.id}}</li><li>{{obj.userGroup}}</li><div><!-- acti…

VIOOVI精益管理:实现高效运营和持续改进的关键

关于什么是精益化管理这个问题&#xff0c;从字面上理解&#xff0c;“精”为“精良”&#xff0c;“益”为“利益”&#xff0c;意在产品更加精良&#xff0c;利益更加丰厚。而从丰田精益生产中我们可以看出精益化管理绝不是以偏概全的管理&#xff0c;而是全面的结合内部、外…

Linux操作系统~必考面试题⑧

1、pwd 命令 pwd 命令用于查看当前工作目录路径。 实例&#xff1a; 查看当前路径 pwd 查看软链接的实际路径 pwd -P 2、rmdir 命令 从一个目录中删除一个或多个子目录项&#xff0c;删除某目录时也必须具有对其父目录的写权限。 注意&#xff1a;不能删除非空目录实例&…

Java面试笔记

JAVA基础知识 语法结构 1.类 2.属性 3.方法 4.静态代码块 构造器 构造函数&#xff0c;构造类的对象&#xff0c;默认隐式&#xff0c;创建对象&#xff0c;先执行父类构造函数&#xff0c;再执行子类构造函数 父类的super必须在第一行 代码块 优先级最高&#xff0c;只…

pyspark笔记:读取 处理csv文件

pyspark cmd上的命令 1 读取文件 1.1 基本读取方式 注意读取出来的格式是Pyspark DataFrame&#xff0c;不是DataFrame&#xff0c;所以一些操作上是有区别的 1.1.1 format DataFrame spark.read.format("csv").option(name,value).load(path) format表示读取…

硬盘数据恢复怎么做?5步快速恢复数据!

“我的电脑刚买回来没多久&#xff0c;不知为啥硬盘就出现问题了&#xff0c;我很多的数据都丢失了&#xff0c;这种情况进行硬盘数据恢复还有希望吗&#xff1f;希望各位老师给我点意见&#xff01;感谢&#xff01;” 在数字化时代&#xff0c;数据已经成为我们生活中不可或缺…

美团面试官热爱考察的问题:你真的会判断链表环吗?

大家好&#xff0c;我是小米&#xff01;今天我要和大家一起来解析美团面试中经常会遇到的一道经典问题&#xff1a;如何判断链表是否为环形链表&#xff1f;这是一道考察数据结构与算法基础的问题&#xff0c;也是面试中的常客。相信通过这篇文章的学习&#xff0c;你将能够更…

【决策树-鸢尾花分类】

决策树算法简介 决策树是一种基于树状结构的分类与回归算法。它通过对数据集进行递归分割&#xff0c;将样本划分为多个类别或者回归值。决策树算法的核心思想是通过构建树来对数据进行划分&#xff0c;从而实现对未知样本的预测。 决策树的构建过程 决策树的构建过程包括以…

C#,中国福利彩票《刮刮乐》的数学算法(02)——时来运转

1 中国福利彩票 中国福利彩票始于1987年7月27日&#xff0c;以“团结各界热心社会福利事业的人士&#xff0c;发扬社会主义人道主义精神&#xff0c;筹集社会福利资金&#xff0c;兴办残疾人、老年人、孤儿福利事业和帮助有困难的人”、即“扶老、助残、救孤、济困”为宗旨。随…