【智能优化算法】矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)

矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)是期刊“COMPUTER METHODS IN APPLIED MECHANICS AND ENGINEERING”(IF 7.3)的2022年智能优化算法

01.引言

矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)模仿矮猫鼬的觅食行为。猫鼬捕食的限制性模式极大地影响了猫鼬的社会行为和生态适应,以补偿高效的家庭营养。猫鼬的代偿性行为适应包括猎物大小、空间利用、群体大小和食物供应。提出的算法中使用了矮猫鼬的三个社会群体:阿尔法群体、保姆群体和侦察兵群体。整个家族以觅食为单位,雌性首领发起觅食,决定觅食路径、覆盖的距离和睡觉的土丘。一定数量的猫鼬(通常是雄性和雌性的混合)充当保姆。它们一直陪伴着幼崽,直到企鹅群中午或傍晚返回。保姆被交换为第一个与群体一起觅食的人(开发阶段)。矮猫鼬不为幼崽筑巢;它们把它们从一个熟睡的土堆移到另一个,不会回到之前觅食的地方。矮猫鼬在一块足以支持整个群体的领土上采用了半游牧的生活方式(探索阶段)。这种游牧行为防止了对某一特定地区的过度开发。它还确保了对整个领土的探索,因为以前参观过的沉睡的土丘不会被归还。

02.优化算法的流程

03.论文中算法对比图

04.部分代码

function [BEF,BEP,BestCost]=DMOA(nPop,MaxIt,VarMin,VarMax,nVar,F_obj)
%nVar=5;             % Number of Decision Variables
VarSize=[1 nVar];   % Decision Variables Matrix Size
%VarMin=-10;         % Decision Variables Lower Bound
%VarMax= 10;         % Decision Variables Upper Bound
%% ABC Settings
% MaxIt=1000;              % Maximum Number of Iterations
% nPop=100;               % Population Size (Family Size)
nBabysitter= 3;         % Number of babysitters
nAlphaGroup=nPop-nBabysitter;         % Number of Alpha group
nScout=nAlphaGroup;         % Number of Scouts
L=round(0.6*nVar*nBabysitter); % Babysitter Exchange Parameter 
peep=2;             % Alpha female痴 vocalization 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Empty Mongoose Structure
empty_mongoose.Position=[];
empty_mongoose.Cost=[];
% Initialize Population Array
pop=repmat(empty_mongoose,nAlphaGroup,1);
% Initialize Best Solution Ever Found
BestSol.Cost=inf;
tau=inf;
Iter=1;
sm=inf(nAlphaGroup,1);
% Create Initial Population
for i=1:nAlphaGroup
    pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
    pop(i).Cost=F_obj(pop(i).Position);
    if pop(i).Cost<=BestSol.Cost
        BestSol=pop(i);
    end
end
% Abandonment Counter
C=zeros(nAlphaGroup,1);
CF=(1-Iter/MaxIt)^(2*Iter/MaxIt);
% Array to Hold Best Cost Values
BestCost=zeros(MaxIt,1);
%% DMOA Main Loop
for it=1:MaxIt
    
    % Alpha group
     F=zeros(nAlphaGroup,1);
     MeanCost = mean([pop.Cost]);
    for i=1:nAlphaGroup
        
        % Calculate Fitness Values and Selection of Alpha
        F(i) = exp(-pop(i).Cost/MeanCost); % Convert Cost to Fitness
    end
        P=F/sum(F);
      % Foraging led by Alpha female
    for m=1:nAlphaGroup
        
        % Select Alpha female
        i=RouletteWheelSelection(P);
        
        % Choose k randomly, not equal to Alpha
        K=[1:i-1 i+1:nAlphaGroup];
        k=K(randi([1 numel(K)]));
        
        % Define Vocalization Coeff.
        phi=(peep/2)*unifrnd(-1,+1,VarSize);
        
        % New Mongoose Position
        newpop.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);
        
        % Evaluation
        newpop.Cost=F_obj(newpop.Position);
        
        % Comparision
        if newpop.Cost<=pop(i).Cost
            pop(i)=newpop;
        else
            C(i)=C(i)+1;
        end
        
    end   
    
    % Scout group
    for i=1:nScout
        
        % Choose k randomly, not equal to i
        K=[1:i-1 i+1:nAlphaGroup];
        k=K(randi([1 numel(K)]));
        
        % Define Vocalization Coeff.
        phi=(peep/2)*unifrnd(-1,+1,VarSize);
        
        % New Mongoose Position
        newpop.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);
        
        % Evaluation
        newpop.Cost=F_obj(newpop.Position);
        
        % Sleeping mould
        sm(i)=(newpop.Cost-pop(i).Cost)/max(newpop.Cost,pop(i).Cost);
        
        % Comparision
        if newpop.Cost<=pop(i).Cost
            pop(i)=newpop;
        else
            C(i)=C(i)+1;
        end
        
    end    
    % Babysitters
    for i=1:nBabysitter
        if C(i)>=L
            pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
            pop(i).Cost=F_obj(pop(i).Position);
            C(i)=0;
        end
    end    
     % Update Best Solution Ever Found
    for i=1:nAlphaGroup
        if pop(i).Cost<=BestSol.Cost
            BestSol=pop(i);
        end
    end    
        
   % Next Mongoose Position
   newtau=mean(sm);
   for i=1:nScout
        M=(pop(i).Position.*sm(i))/pop(i).Position;
        if newtau>tau
           newpop.Position=pop(i).Position-CF*phi*rand.*(pop(i).Position-M);
        else
           newpop.Position=pop(i).Position+CF*phi*rand.*(pop(i).Position-M);
        end
        tau=newtau;
   end
       
   % Update Best Solution Ever Found
    for i=1:nAlphaGroup
        if pop(i).Cost<=BestSol.Cost
            BestSol=pop(i);
        end
    end
    
    % Store Best Cost Ever Found
    BestCost(it)=BestSol.Cost;
    BEF=BestSol.Cost;
    BEP=BestSol.Position;
    % Display Iteration Information
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
    
end
end
function i=RouletteWheelSelection(P)
    r=rand;
    
    C=cumsum(P);
    
    i=find(r<=C,1,'first');
end

04.本代码效果图

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

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

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

相关文章

【论文阅读笔记】MAS-SAM: Segment Any Marine Animal with Aggregated Features

1.论文介绍 MAS-SAM: Segment Any Marine Animal with Aggregated Features MAS-SAM&#xff1a;利用聚合特征分割任何海洋动物 Paper Code(空的) 2.摘要 最近&#xff0c;分割任何模型&#xff08;SAM&#xff09;在生成高质量的对象掩模和实现零拍摄图像分割方面表现出卓越…

有没有什么app能提醒事情的?能提醒做事的软件有哪些?

在繁忙的现代社会&#xff0c;我们每天都面临着众多的事项和压力。很容易在快节奏的生活和工作中遗漏一些重要事务&#xff0c;而这种遗忘往往会给我们带来诸多不必要的困扰。要想把所有事项都牢记在心&#xff0c;仅靠人脑显然是难以实现的。幸运的是&#xff0c;我们可以借助…

接口测试用例设计思路(通俗易懂)

一、接口测试的流程&#xff1a; 需求分析(需求文档、开发提供接口文档)→测试设计→测试用例评审→测试执行→验收→预发布→上线 二、基本功能流程测试&#xff1a; 冒烟测试(主业务的正向流程)、正常流程覆盖测试(正常分支的业务流程进行覆盖→分支覆盖、路径覆盖、业务场…

十大排序算法之->希尔排序

一、希尔排序简介 希尔排序&#xff0c;也称为缩小增量排序&#xff0c;是由D.L. Shell于1959年提出的。它的核心思想是将整个待排序的记录序列分割成若干个子序列&#xff0c;这些子序列的元素是相隔一定“增量”的。然后对这些子序列分别进行直接插入排序。随着增量的逐步减…

Pycharm 执行pytest时,会遇见某些case Empty suite

我这边的情况是有些case就是执行不了&#xff0c;百度了很多&#xff0c;有说设置选pytest的&#xff0c;有命名规范的&#xff0c;都没有成功。后面问了同事之后才发现&#xff0c;pytest 的框架&#xff0c;pytest.ini 执行的时候&#xff0c;加了个标签&#xff0c;主动把某…

Linux 安装JDK和Idea

安装JDK 下载安装包 下载地址&#xff1a; Java Downloads | Oracle (1) 使用xshell 上传JDK到虚拟机 (2) 移动JDK 包到/opt/environment cd ~ cd /opt sudo mkdir environment # 在 /opt下创建一个environment文件夹 ls# 复制JDK包dao /opt/environment下 cd 下载 ls jd…

短信群发公司通道有哪些要求

短信群发公司通道有哪些要求 网络稳定性 短信群发公司的通道在进行时需要具备良好的网络稳定性。这意味着通道需要能够稳定连接到互联网&#xff0c;并具备高速传输能力。在网络不稳定或者传输速度慢的情况下&#xff0c;可能会受到影响&#xff0c;甚至导致失败。 高可靠性 …

【竞技宝】欧冠:欧洲三大赛事决赛对阵出炉

本赛季欧洲三级赛事的决赛对阵均已出炉:皇马与多特蒙德相聚欧冠决赛;勒沃库森将会和亚特兰大争夺欧联杯冠军;奥林匹亚科斯则要与佛罗伦萨争夺欧协联的冠军。在6支决赛球队中,德甲和意甲都有两支球队,而西甲的皇马则是夺冠最大热门,近几个赛季战斗力极强的英超在欧战方面彻底失败…

pydev debugger: process **** is connecting

目录 解决方案一解决方案二 1、调试时出现pydev debugger: process **** is connecting 解决方案一 File->settings->build,execution,deployment->python debugger 下面的attach to subprocess automatically while debugging取消前面的勾选&#xff08;默认状态为勾…

python之并发编程

python之并发编程 线程的创建方式线程的创建方式(方法包装)线程的创建方式(类包装)join()【让主线程等待子线程结束】守护线程【主线程结束&#xff0c;子线程就结束】 锁多线程操作同一个对象(未使用线程同步)多线程操作同一个对象(增加互斥锁&#xff0c;使用线程同步)死锁案…

多线程-写入读取文件,使用同步逻辑

在一个进程中&#xff0c;创建一个子线程。 主线程负责:向文件中写入数据 子线程负责:从文件中读取数据 要求使用线程的同步逻辑&#xff0c;保证一定在主线程向文件中写入数据成功之后&#xff0c;子线程才开始运行&#xff0c;去读取文件中的数据 #include <stdio.h> …

(2024,SD,条件 GAN,蒸馏,噪声到图像翻译,E-LatentLPIPS)将扩散模型蒸馏为条件 GAN

Distilling Diffusion Models into Conditional GANs 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方法 3.1 用于一步生成的配对的噪声到图像翻译 3.2 用于潜在空间蒸馏…

Android 按钮Button点击音效

一、新建工程 编译运行&#xff0c;确保工程无误&#xff0c;这里不过多赘述。 二、UI布局 添加两个播放音效Button <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"…

eclipse创建web项目

前言&#xff1a;我是第一次写web项目&#xff0c;探索了很多天&#xff0c;今天就把我知道的分享给大家&#xff0c;希望大家能够少走弯路&#xff0c;早点写出属于自己的web项目。完成课程设计或毕业设计。 一.准备工作 首先&#xff0c;在这里推荐一个网站--菜鸟教程。这个…

知识图谱:人工智能的“核心驱动力”

知识图谱&#xff1a;人工智能的“核心驱动力” 一、人工智能与知识图谱二、知识图谱的定义与重要性三、知识图谱工程师的薪资情况四、知识图谱的应用领域六、知识图谱的未来展望七、总结 一、人工智能与知识图谱 人工智能&#xff08;AI&#xff09;作为21世纪的前沿技术&…

Hive Windows Functions 窗口函数

Hive Windows Functions 窗口函数 在 Hive 中&#xff0c;窗口函数&#xff08;Window Functions&#xff09;用于在查询结果中执行聚合、排序和分析操作&#xff0c;而无需将数据分组。窗口函数允许你在查询结果中的一组行上执行计算&#xff0c;而不会改变原始数据的行数&am…

信息系统架构模型_1.单机应用模式和客户机/服务器模式

1.单机应用模式&#xff08;Standalone&#xff09; 单机应用系统是最简单的软件结构&#xff0c;是指运行在一台物理机器上的独立应用程序。这些软件系统&#xff0c;从今天的软件架构上来讲&#xff0c;是很简单&#xff0c;是标准的单机系统。当然至今&#xff0c;这种复杂的…

岩点×数说故事×小红书 | 发布《中国攀岩行业分析报告》

从下班健身到下班攀岩&#xff0c;从“鸡娃”到岩馆“溜娃”&#xff0c;被奥运“正名”的攀岩运动&#xff0c;在国内熬过了萌芽阶段&#xff0c;悄然开出了花。2023年&#xff0c;各类重磅攀岩赛事重启、线下岩馆疯狂扩张&#xff0c;小众攀岩正式进入大众视野&#xff0c;风…

【系统架构师】-案例篇(七)信息安全

某软件公司拟开发一套信息安全支撑平台&#xff0c;为客户的局域网业务环境提供信息安全保护。该支撑平台的主要需求如下&#xff1a; 1.为局域网业务环境提供用户身份鉴别与资源访问授权功能&#xff1b; 2.为局域网环境中交换的网络数据提供加密保护&#xff1b; 3.为服务…

CAPL如何实现TLS握手认证

CAPL有专门的章节介绍如何实现TLS握手认证的函数: CAPL调用哪些函数实现TLS握手认证,需要了解TLS在整个通信过程的哪个阶段。 首先TCP需要建立连接,这是TLS握手的前提。当TLS握手认证完成后,可以传输数据。 所以TLS握手开始前需要确保TCP建立连接,TCP传输数据前需要确保…