2023年智能算法之淘金优化器,MATLAB代码免费获取

news2025/1/18 14:54:28

今天为大家带来一期淘金优化算法(Gold rush optimizer.,GRO)。

GRO算法是受淘金热启发,模拟了淘金者在淘金热时期如何利用淘金的三个关键概念进行淘金:迁移、协作和淘金。

原理详解

①金矿勘探阶段:

与大多数智能算法相似,就是随机生成一批淘金者:

b60b7235c632eb5c745f85f722434cea.png

MF是每个淘金者对应的适应度值

13ee513250665162bb1a66dea3bb45a2.png

②探矿者的迁移阶段

在发现金矿后,淘金者迁移到那里获取黄金。最富金矿的位置是元启发式算法执行过程中搜索空间的最佳点。由于其确切位置未知,因此使用最佳金矿勘探者的位置来估计最佳金矿的位置,如图所示:

3dad262e6db8dc9f25ad46602886f216.png

4a68358b395fb1da70a1c728d4c690a7.png

模拟金矿探矿者向金矿的迁移公式为:

21dd8678432b4d1b7323a8421efa1fcd.png

ddfe02baffeb4d07d4b7845277086b3b.png

ae72ba7dff508097ce2c2890c359526d.png

8a0921b3e2c2795f1a0ee3b30dd7cb02.png

③金矿开采

每个淘金者都会在金矿区开采更多的黄金。在数学建模中,每个金矿勘探者的位置都被视为金矿的大致位置。金矿开采的相关数学表达式:

073205e41e4311017e56c407447bfd36.png

9b3ddd3020938181bae7a6718cfa1a2c.png

④探矿者之间的合作

00ba516d97aa17c7524a74ba7924f0a0.png

dc95a9064654d982273c64a52ad89bf1.png

④探矿者搬迁

金矿勘探者不断移动,他们决策中的一个关键参数是获取更多的黄金。因此,为了决定探矿者是留在原来的位置还是搬到新的位置,通过评估功能对这两个位置进行比较。在这个过程中,如果目标函数的价值有所提高,金矿勘探者就会更新其位置;否则,它保留在先前的位置,该位置被建模为最小化问题中的方程:

463b698c726ad4900870b9a080d4abef.png

伪代码实现:

e6bf944f07b83c7a0bbe400dd8fe5bfa.png

什么!看到这里大家有没有感觉该算法与灰狼算法很像!好,作者就与灰狼算法比较一下,看看孰强孰弱!

结果展示

在CEC2005函数集进行测试:

GRO是本文的淘金优化器,GWO是灰狼算法

4b1bee5ad0828d91e3100ea44e08553e.png

5d3189a8b1ca4f246a70ee4d73fc304d.png

8111277df439a31dc2bd64881ea4712b.png

63ad8493418dbf7ef277b5c5ccf75870.png

16119f8f1260aa7b59fb7688b3871af4.png

411a4ecee151b87d50c0cd0406b0be5e.png

f87b644a7465e67a3d73183a6ed161bf.png

ead27d64a0fb12647d147c3c777d2de8.png

ad6ee430c51b903a33387df73b09ea78.png

测试了9个函数,不得不说,还是比灰狼算法有很大提升的!且该算法没有增加计算复杂度,因此大家也可以根据此算法的思路去浅浅改进一下灰狼算法,说不定会有质的飞跃!

代码展示

function [best_score,best_pos,Convergence_curve]=GRO(N,Max_iter,lb,ub,dim,fobj )
lb = lb .* ones(1, dim);
ub = ub .* ones(1, dim);
%% GRO parameter initialization
sigma_initial = 2; 
sigma_final = 1 / Max_iter ;
% Initialize best position X* (global best)
best_pos=zeros(1, dim);
best_score=inf; %change this to -inf for maximization problems
%Initialize the gold prospectors� population Xi, i = 1, 2, . . . , N
Positions=initialization(N, dim, lb, ub);
Fit = inf(1,N);
%Initialize the gold prospectors� new positions Xnewi = Xi , i = 1, 2, . . . , N
X_NEW = Positions;
Fit_NEW = Fit;
Convergence_curve=zeros(1, Max_iter);
Convergence_curve(1) = min(Fit);
iter = 1;% Loop counter
%% Main loop
while iter <= Max_iter


    for i= 1:N   
        %Calculate fitness of current search agent at new position XNewi
        Fit_NEW(i) =  fobj(X_NEW(i,:));     
        %Update position of current search agent Xi according to Equation (13)
        if Fit_NEW(i) < Fit(i)
            Fit(i) = Fit_NEW(i);
            Positions(i,:) = X_NEW(i,:);
        end   
        %Update best search agent X*
        if Fit(i) < best_score
            % new gold mine is found
            best_score = Fit(i); 
            best_pos   = Positions(i,:);
        end
    end   
   %Update l1, l2 by Equation (7)   
   l2 =  ((Max_iter - iter)/(Max_iter-1) )^(2 * (sigma_initial - sigma_final)) + sigma_final;
   l1 =  ((Max_iter - iter)/(Max_iter-1) )^(1 * (sigma_initial - sigma_final)) + sigma_final;
  
     
    %calculate the next position of current search agent XNewi with one of
    %... the migration, mining or collaboration methods
    for i = 1:size(Positions,1)


        coworkers = randperm(N-1,2);
        diggers = 1:N;
        diggers(i) = [];
        coworkers = diggers(coworkers);


        digger1 = coworkers(1);    %random prospector g1
        digger2 = coworkers(2);    %random prospector g2
        
        m = rand;
        %collaboration
        if m <  1/3
            for d  = 1:dim
                r1 = rand;                                         % r1 is a random number in [0,1]
                D3 = Positions(digger2,d) -  Positions(digger1,d); % Equation (11)
                X_NEW(i,d) = Positions(i,d) +  r1 * D3;            % Equation (12) 
            end
        %mining method
        elseif m < 2/3
            for d = 1:dim
                r1 = rand;                                          % r1 is a random number in [0,1]
                A2 = 2*l2*r1 - l2 ;                                 % Equation (10)               
                D2 = Positions(i,d) - Positions(digger1,d) ;        % Equation (8)
                X_NEW(i,d) = Positions(digger1,d) + A2*D2;          % Equation (9)                              
            end
        %migartion method    
        else
            for d = 1:dim
                r1 = rand; % r1 is a random number in [0,1]
                r2 = rand; % r2 is a random number in [0,1]
                C1 = 2 * r2;                                        % Equation (6)
                A1 = 1 + l1 * (r1 - 1/2);                           % Equation (5)
                D1 = C1 * best_pos(d) - Positions(i,d) ;            % Equation (3)
                X_NEW(i,d) = Positions(i,d) + A1 * D1;              % Equation (4)                      
            end
        end          
        %Domain control
        X_NEW(i,:) = boundConstraint(X_NEW(i,:),Positions(i,:), lb , ub);     
    end   
    Convergence_curve(iter) = best_score;  
    iter = iter+1;   
end
end

参考文献:

 K. Zolfi. Gold rush optimizer: A new population-based metaheuristic algorithm. Operations Research and Decisions 2023: 33(1), 113-150. DOI 10.37190/ord230108

文献原文已经放在代码压缩包里了。

2023智能算法合集代码免费获取方式

完整代码获取方式:后台回复关键字,不区分大小写。关键字:

2023

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

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

相关文章

MyBatis学习

一、Mybatis使用 1、新建mybatis配置文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configu…

由于cpu cache line机制在共享原子数据操作上带来的硬件干扰对多线程机制的性能影响

由于cpu cache line机制在共享原子数据操作上带来的硬件干扰会对对多线程性能造成影响。例如不同的原子数据&#xff0c;位于同一个cpu cache line&#xff0c;这时候一个处理器读取这个cpu cache line这段数据的时候&#xff0c;就会控制这段数据的所有权&#xff0c;其他想要…

WorkManager的基本使用

目录 一、WorkManager概述1. WorkManager的作用&#xff1a;2. WorkManager的各个角色 二、依赖库的导入三、WorkManager几种基本使用1. 单一任务的执行2. 数据 互相传递3. 多个任务 顺序执行4. 重复执行后台任务5. 约束条件6. 证明 app被杀掉之后&#xff0c;还在后台执行 四、…

中小企业常用的 IT 项目管理软件有哪些?

越热门&#xff0c;越贵的IT项目管理软件越好用吗&#xff1f;对于预算有限的中小型企业来说&#xff0c;如何选择一款适合自己的项目管理工具着实是个头疼的问题。 首先适用于中小型企业使用的 IT 项目管理软件需要具备哪些特点呢&#xff1f; 1、简单易用&#xff1a;中小企…

note_前端框架Vue的安装和简单入门(Windows 11)

1. Vue安装 (1) 下载安装node.js和npm # 下载msi安装包 https://nodejs.org/en# 点击安装包&#xff0c;按提示安装 # 默认安装nodejs, npm, 在线文档; PATH配置# 确认安装是否成功&#xff0c;在dos中输入 node -v # 验证nodejs是否安装成功 npm -v # 验证nodejs包管…

DSP应用技术学习笔记——第一讲

如果一项选择被分解为两个连续的选择&#xff0c;则原来的信息量H应该等于分解后的各个信息量H的加权和 DSP概念 DSP既是数字信号处理&#xff08;Digital Signal Processings&#xff09;的缩写也是数字信号处理器&#xff08;Digital Signal Processor&#xff09;的缩写。…

Lesson4-3:OpenCV图像特征提取与描述---SIFT/SURF算法

学习目标 理解 S I F T / S U R F SIFT/SURF SIFT/SURF算法的原理&#xff0c;能够使用 S I F T / S U R F SIFT/SURF SIFT/SURF进行关键点的检测 SIFT/SURF算法 1.1 SIFT原理 前面两节我们介绍了 H a r r i s Harris Harris和 S h i − T o m a s i Shi-Tomasi Shi−Tomasi…

城市白模三维重建

收费工具&#xff0c;学生党勿扰&#xff0c;闹眼子当勿扰 收费金额&#xff1a;2000元&#xff0c;不能开发票 1 概述 几个月前&#xff0c;一家小公司找我帮忙给他们开发一个程序&#xff0c;可以将一个城市进行白模的三维重建。 报酬大约5K。经过不懈的努力&#xff0c;终于…

亚马逊广告收入突破百亿美元,有望成为下一个收入支柱来源?

据外媒报道&#xff0c;亚马逊新兴的广告业务已经价值数百亿美元&#xff0c;很可能成为其下一个收入支柱来源。 市场研究公司Insider Intelligence的分析师Andrew Lipsman表示&#xff0c;按照目前的发展轨迹&#xff0c;亚马逊广告业务甚至可以与其云计算业务相互抗衡。“毫…

21 自定义miniweb框架|闭包装饰器|log输出

文章目录 前情知识介绍WSIG-miniWeb框架服务器动态资源请求浏览器请求动态页面的全流程WSGIWSGI接口的定义 静态服务器回顾以及改造web 服务器 和 逻辑处理代码 分离 web动态服务器的基本实现带参数的web动态服务器 闭包装饰器闭包闭包的基础使用函数、匿名函数、闭包、对象修改…

Locked勒索病毒:最新变种.locked袭击了您的计算机?

导言&#xff1a; 在今天的数字时代&#xff0c;勒索病毒已经不再是仅仅让数据变得不可访问的小威胁。 .locked 勒索病毒&#xff0c;作为其中的一种&#xff0c;以其高度复杂的加密算法和迅速变化的攻击手法而备受恶意分子喜爱。本文91数据恢复将带您深入了解 .locked 勒索病毒…

【Linux】简单的小程序:进度条

在学习进度条之前&#xff0c;需要学一点预备知识。 1. 预备知识 回车换行 现在的换行符&#xff08;\n&#xff09;其实就是回车式换行符&#xff0c;另起一行&#xff0c;光标指向最新一行的开头。回车符&#xff08;\r&#xff09;是光标指向这一行的开头。 缓冲区 &a…

springboot封装查询快递物流

目录 一、ApiClient代码解读二、ApiService代码解读三、HomeController代码解读四、整体代码五、结果展示 一、ApiClient代码解读 这是一个简单的Spring Boot的RestTemplate客户端&#xff0c;用于执行HTTP请求。 首先&#xff0c;这个类被Component注解标记&#xff0c;这意味…

销量蹭蹭上涨!亚马逊上这几款宿舍神器火爆了!

一、BedShelfie床边置物架 每年返校季&#xff0c;收纳工具都是最畅销的产品。在亚马逊床头柜热销榜单中&#xff0c;这款产品位居第二。过去一个月里&#xff0c;有1000多名用户购买了这件产品。 二、U Brands磁性干擦日历板 目前&#xff0c;亚马逊上这款产品已经卖到断货。…

ubuntu下Anaconda安装与使用教程

前言 好久没用anaconda了&#xff0c;还记得之前用anaconda的欢乐时光。pytorch和paddlepaddle(飞浆)&#xff0c;怀念&#xff0c;可生活&#xff08;换了ubuntu系统之后&#xff09;教会了我残忍&#xff08;可能很难有机会再用windows的anaconda了&#xff09;。找个时间&a…

C语言:动态内存(一篇拿捏动态内存!)

目录 学习目标&#xff1a; 为什么存在动态内存分配 动态内存函数&#xff1a; 1. malloc 和 free 2. calloc 3. realloc 常见的动态内存错误&#xff1a; 1. 对NULL指针的解引用操作 2. 对动态开辟空间的越界访问 3. 对非动态开辟内存使用free释放 4. 使用free释…

代码随想录—力扣算法题:24两两交换链表中的节点.Java版(示例代码与导图详解)

版本说明 当前版本号[20230903]。 版本修改说明20230903初版 24. 两两交换链表中的节点 力扣题目链接 更多内容可点击此处跳转到代码随想录&#xff0c;看原版文件 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变…

淘宝/天猫获得淘宝商品详情 API 接口文档

item_get-获得淘宝商品详情 API测试工具 注册开通 taobao.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_sear…

Google colab部署VITS——零门槛快速克隆任意角色声音

目录 序言 查看GPU配置 复制代码库并安装运行环境 选择预训练模型 上传视频链接&#xff08;单个不应长于20分钟&#xff09; 自动处理所有上传的数据 训练质量相关&#xff1a;实验发现目前使用CJ模型勾选ADD_AUXILIARY&#xff0c;对于中/日均能训练出最好的效果&#x…

【数据结构】 二叉树面试题讲解->叁

文章目录 &#x1f30f;引言&#x1f332;[根据二叉树创建字符串](https://leetcode.cn/problems/construct-string-from-binary-tree/submissions/)&#x1f431;‍&#x1f464;题目描述&#xff1a;&#x1f431;‍&#x1f409;示例&#xff1a;&#x1f4cc;示例一&#x…