2023年智能优化算法之——增长优化器Growth Optimizer(GO),附MATLAB代码

news2024/11/25 16:29:08

增长优化器的主要设计灵感来源于个人在社会成长过程中的学习和反思机制。学习是个体通过从外部世界获得知识而成长的过程。反思是检查个人自身不足并调整个人学习策略以帮助个人成长的过程。参考文献如下:

Zhang, Qingke, et al. “Growth Optimizer: A Powerful Metaheuristic Algorithm for Solving Continuous and Discrete Global Optimization Problems.” Knowledge-Based Systems, vol. 261, Elsevier BV, Feb. 2023, p. 110206,DOI:http://10.1016/j.knosys.2022.110206

该代码的源码编写有两种方式,一种是常规的,以最大迭代次数为目标进行寻优,一种是设置了一个标识符,当适应度值不再增长,且循环已经超过了最大标识符时,会终止寻优。

以CEC2017函数为例,进行结果展示:

 接下来上关键代码:

function [gbestX,gbestfitness,gbesthistory]= GO_FEs(popsize,dimension,xmax,xmin,MaxFEs,Func,FuncId)
% This version is an evaluation version of GO
%% Parameter setting
FEs=0;P1=5;P2=0.001;P3=0.3;
%% Initialization
x=unifrnd(xmin,xmax,popsize,dimension);
newx=x;
fitness=inf(1,popsize);
gbesthistory=inf(1,MaxFEs);
gbestfitness=inf;
for i=1:popsize
    fitness(i)=Func(x(i,:)',FuncId);
    FEs=FEs+1;
    if gbestfitness>fitness(i)
        gbestfitness=fitness(i);
        gbestX=x(i,:);
    end
    gbesthistory(FEs)=gbestfitness;
end
%% Enter iteration
while 1
    [~, ind]=sort(fitness);
    Best_X=x(ind(1),:);   % Note the difference between Best_X and gbestX
    %% Learning phase
    for i=1:popsize
        Worst_X=x(ind(randi([popsize-P1+1,popsize],1)),:);
        Better_X=x(ind(randi([2,P1],1)),:);
        random=randperm(popsize,3);
        random(random==i)=[];
        L1=random(1);L2=random(2);
        Gap1=(Best_X-Better_X); Gap2=(Best_X-Worst_X); Gap3=(Better_X-Worst_X); Gap4=(x(L1,:)-x(L2,:));
        Distance1=norm(Gap1); Distance2=norm(Gap2); Distance3=norm(Gap3); Distance4=norm(Gap4);
        SumDistance=Distance1+Distance2+Distance3+Distance4;
        LF1=Distance1/SumDistance; LF2=Distance2/SumDistance; LF3=Distance3/SumDistance; LF4=Distance4/SumDistance;
        SF=fitness(i)/max(fitness);
        KA1=LF1*SF*Gap1; KA2=LF2*SF*Gap2; KA3=LF3*SF*Gap3; KA4=LF4*SF*Gap4;
        newx(i,:)=x(i,:)+KA1+KA2+KA3+KA4;
        % Clipping
        newx(i,:)=max(newx(i,:),xmin);
        newx(i,:)=min(newx(i,:),xmax);
        newfitness=Func(newx(i,:)',FuncId);
        FEs=FEs+1;
        % Real time update
        if fitness(i)>newfitness
            fitness(i)=newfitness;
            x(i,:)=newx(i,:);
        else
            if rand<P2&&ind(i)~=ind(1)
                fitness(i)=newfitness;
                x(i,:)=newx(i,:);
            end
        end
        if gbestfitness>fitness(i)
            gbestfitness=fitness(i);
            gbestX=x(i,:);
        end
        gbesthistory(FEs)=gbestfitness;
    end
    fprintf("FEs: %d, fitness error: %e\n",FEs,gbestfitness);
    if FEs>=MaxFEs
        break;
    end
    %% Reflection phase
    for i=1:popsize
        newx(i,:)=x(i,:);
        for j=1:dimension
            if rand<P3
                R=x(ind(randi(P1)),:);
                newx(i,j) = x(i,j)+(R(:,j)-x(i,j))*rand;
                AF=(0.01+(0.1-0.01)*(1-FEs/MaxFEs));
                if rand<AF
                    newx(i,j)=xmin+(xmax-xmin)*rand;
                end
            end
        end
        % Clipping
        newx(i,:)=max(newx(i,:),xmin);
        newx(i,:)=min(newx(i,:),xmax);
        newfitness=Func(newx(i,:)',FuncId);
        FEs=FEs+1;
        % Real time update
        if fitness(i)>newfitness
            fitness(i)=newfitness;
            x(i,:)=newx(i,:);
        else
            if rand<P2&&ind(i)~=ind(1)
                fitness(i)=newfitness;
                x(i,:)=newx(i,:);
            end
        end
        if gbestfitness>fitness(i)
            gbestfitness=fitness(i);
            gbestX=x(i,:);
        end
        gbesthistory(FEs)=gbestfitness;
    end
    fprintf("FEs: %d, fitness error: %e\n",FEs,gbestfitness);
    if FEs>=MaxFEs
        break;
    end
end
%% Deal with the situation of too little or too much evaluation
 if FEs<MaxFEs
     gbesthistory(FEs+1:MaxFEs)=gbestfitness;
 else
     if FEs>MaxFEs
         gbesthistory(MaxFEs+1:end)=[];
     end
 end
end

 下方小卡片回复关键词:GO,免费获取代码。

后续会继续发布2023年其他最新优化算法,敬请关注。

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

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

相关文章

二维码在固定资产实物盘点中的应用

很多企业为了掌握固定资产的后续使用情况和状态&#xff0c;会定期对投入使用的固定资产进行盘点&#xff0c;然而固定资产常会出现分散情况&#xff0c;在这种情况下让财务人员到达每个固定资产的所在处进行实地盘点显得极为不现实。 也有不少企业会在盘点过程中使用到固定资…

聊天室(一)___常见的基本功能实现

最近搞聊天室的人还挺多&#xff0c;正好自己也弄就总结自己遇到必不可少的一些功能&#xff0c;本篇文章主要为自己和看到我文章的人一种思路&#xff0c;希望大家不要把聊天室想的太复杂。 上图是我自己做的一个聊天室&#xff0c;类似微信的单聊群聊收藏等功能&#xff0c;根…

python+requests接口自动化框架详解,没有比这个更详细的了

目录 为什么要做接口自动化框架 正常接口测试的流程是什么&#xff1f; 一、接口框架如下&#xff1a; 二、接口的数据规范设计---Case设计 2.1注册接口用例 2.2登录接口用例 三、创建utils包&#xff1a;用来存放公共的类 3.1 ParseExcel.py 操作封装excel的类&#xf…

【AI工具】-Stable Diffusion本地化部署教程

前言 今天我们要介绍的是时下最流行的AI绘图软件Stable Diffusion&#xff0c;虽然Diffusion.ai已经开放api&#xff0c;但是长时间的商业化调用我们需要购买很多的金币。所以我们需要找一个平替的AI绘图平台&#xff0c;现在主流市场中AI绘图软件主要就是OpenAI的DALLE、midj…

SSM会议管理系统

SSM会议管理系统 后端基于SSM、前端基于Freemarker写的会议管理系统、使用JDK8、mysql使用5.7版本 技术栈 Spring SpringMVC MyBatis Mysql Freemarker jqueryajax[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JGo0luHu-1687163482019)(img.png)] …

【Python 随练】打印水仙花数

题目&#xff1a; 打印出所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个经典的数学问题&#xff1a;打印出所有的水仙花数。水仙花数是指一…

Unity核心5——Tilemap

Tilemap 一般称之为瓦片地图或者平铺地图&#xff0c;是 Unity2017 中新增的功能&#xff0c;主要用于快速编辑 2D 游戏中的场景&#xff0c;通过复用资源的形式提升地图多样性 ​ 工作原理就是用一张张的小图排列组合为一张大地图 ​ 它和 SpriteShape 的异同 共同点&#x…

浅析GPT2中的autoregressive和BERT的autoencoding源码实现

经常使用BERT来做研究&#xff0c;因此对Encoder的架构较为熟悉&#xff0c;但是从来没有了解过GPT这样的Decoder架构&#xff0c;尤其对自回归的形式不知道源码是如何实现的。 为了方便对比和讨论&#xff0c;接来下所探讨的源码都是基于HuggingFace这个框架的。 Bert注意力…

基于亚马逊云科技Serverless,朝夕光年和Second Dinner携手打造年度手游

经典的漫威IP&#xff0c;酷炫的卡牌对战&#xff0c;丰富的故事情节&#xff0c;这款移动游戏《MARVEL SNAP》一经上线就深得全球玩家喜爱。在The Game Awards 2022的年度颁奖典礼上&#xff0c;它更是以出色的表现&#xff0c;一举斩获最佳移动游戏奖项。 其研发公司Second …

【ElasticSearch】中文分词器

ES默认的analyzer&#xff08;分词器&#xff09;&#xff0c;对英文单词比较友好&#xff0c;对中文分词效果不好。不过ES支持安装分词插件&#xff0c;增加新的分词器。 1、如何指定analyzer&#xff1f; 默认的分词器不满足需要&#xff0c;可以在定义索引映射的时候&#…

Python自动办公之合并多个PDF文件

本文基于使用pycharm平台&#xff0c;使用glob库和PyPDF2库实现 首先将需要合并的文件放于一个文件中 如下图 addpdf文件夹为需要合并的文件位置 good.py为代码块 代码如下 print(这个小代码仅仅用于合并pdf文件数量小于10的情况) print() from PyPDF2 import PdfMerger,P…

深度解析DuckDB的ScheduleEvents

深度解析DuckDB的ScheduleEvents 1.ScheduleEventData2.ScheduleEventsInternal3.SchedulePipeline 3.1 Event3.2 PipelineEventStack3.3 主逻辑4.可视化总结 书接上回熬夜三晚之深度解析DuckDB MetaPipeline&#xff0c;MetaPipeline在初始化的时候会构建出下面几个&#xff1…

【ARMv8/v9 异常模型入门及渐进2 - 系统控制寄存器 SCTRL_ELx 介绍】

文章目录 SCTRL_ELx 介绍背景ARMv8 SCTLR_ELx 介绍ARMv9 SCTLR_ELx 介绍 SCTRL_ELx 介绍背景 由于在做DFD 测试过程中需要测试 EL1 状态下的 self-hosted trace 功能&#xff0c;但是这个测试是在UEFI中做的&#xff0c;在开发验证阶段UEFI默认是运行在EL3 下的&#xff0c;所…

mac安装VsCode遇到的问题

万事开头难&#xff0c;头一次在安装生产工具的时候&#xff0c;就遇到了这么棘手的问题。百度和Google都试过了&#xff0c;网上的所有方式对我都没效果。最终自己阴差阳错解决了&#xff0c;我看内外网反馈这个问题的还挺多&#xff0c;在这里记录一下&#xff0c;希望可以帮…

Docker专题系列之十三:docker容器内安装vim编辑器

在使用docker时&#xff0c;有时候我们需要编辑配置文件&#xff0c;需要使用vim或者vi命令&#xff0c;但是会发现&#xff1a; root20ab69bedcdb:/etc/mysql# vim my.cnf bash: vim: command not found这是因为vim没有安装&#xff0c;使用如下命令安装&#xff1a; apt-ge…

Tomcat架构设计

Servlet规范 Servlet是JavaEE规范中的一种&#xff0c;主要是为了扩展Java作为Web服务的功能&#xff0c;统一定义了对应的接口&#xff0c;如Servlet接口&#xff0c;HttpRequest接口&#xff0c;HttpResponse接口&#xff0c;Filter接口。然后由具体的服务厂商来实现这些接口…

adroit java反编译

环境准备 靶机链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;4e5y 虚拟机网络链接模式&#xff1a;桥接模式 攻击机系统&#xff1a;kali linux 2021.1 信息收集 1.探测目标靶机ip地址 arp-scan -l 2.用nmap探测靶机开放端口和服务情况 nmap -p- -A -T4 19…

二分类结局变量Logistic回归临床模型预测—— 模型评价(一)

本节讲的是二分类结局变量的临床模型预测,与之前讲的Cox回归不同,https://lijingxian19961016.blog.csdn.net/article/details/124088364https://lijingxian19961016.blog.csdn.net/article/details/124088364https://lijingxian19961016.blog.csdn.net/article/details/1240…

基于springboot+Redis的前后端分离项目(二)-【黑马点评】

&#x1f381;&#x1f381;资源文件分享 链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码&#xff1a;eh11 商户查询缓存&#xff0c;缓存更新策略&#xff0c;缓存穿透 商户查询缓存a.什么是缓存1.为什么要使用缓存2.如何使用缓存 b.添加商…

一文读懂ISM频段

ISM&#xff08;工业、科学、医疗&#xff09;频段为国际电信联盟&#xff08;ITU&#xff09;《无线电规则》定义的指定无线电频段。这些频段是为电信之外的其他射频用途挪出的频段。因此&#xff0c; ISM频段虽然理论上可用于电信用途&#xff0c;但使用ISM频段的电信设备必须…