自适应t分布变异的黏菌优化算法,MATLAB代码

news2024/10/9 4:23:09

本期为大家带来的是:自适应t分布变异的黏菌优化算法。分别在CEC2005,CEC2017,CEC2021和CEC2022上进行测试,自适应t分布变异的黏菌优化算法(DTSMA)均有非常不错的表现!大家可以将此文章中提到的改进策略用于别的智能算法的改进。

参考文献:Yin S,Luo Q,DU Y.DTSMA: Dominant Swarm with Adaptive T-distribution Mutation-based Slime Mould Algorithm.Mathematical Biosciences and Engineering : MBE, 01 Jan 2022, 19(3):2240-2285https://doi.org/10.3934/mbe.2022105

文献原文已打包放在压缩包中,后台回复关键词获取。

原理详解

黏菌算法(SMA)是受黏菌振动的启发而提出的一种元启发式算法。与其他算法相似,SMA算法也存在着探索与开发不够平衡、容易陷入局部最优等缺点。此文献提出了一种改进的基于自适应t分布突变的黏菌算法。在DTSMA中,利用优势群体提高了SMA的收敛速度,利用自适应t分布突变平衡增强了算法的探索和开发能力。此外,还混合了一种新的开发机制,增加了种群的多样性。

改进点有三处:

改进点1

在求解优化问题的过程中,SMA没有利用黏菌个体最优位置的信息来更新解,可能会错过寻找全局最优的好机会。在DTSMA中,为了记录个体历史最优位置信息,定义优势群体X及其适应度值S来存储历史最优信息。位置更新后,将更新后的位置X与优势群体中的位置Xgood进行比较,采用贪婪选择策略将较优的位置保留给优势群体。在探索阶段,DTSMA使用迄今为止找到的个体历史最优和种群历史最优共同更新搜索个体位置X。更新黏菌位置的公式如式所示。

fe1d314f3728958ddf99efd8fa5d6d7a.png

SMA对每次迭代中的个体适应度值进行排序,以找到最优和最差适应度。排序过程很耗时,为了更好地利用排序后的个体位置和适应度值,DTSMA将排序后的种群分为两个子种群,适应度值排名上半部分的种群为goodA X,另一个种群为goodB X。取A和B的值为:

facb4c543ff26d20370973be83bb6efc.png

97f8da4b28f2ff3d24f7004e743bf71c.png

改进点2

SMA具有较强的开发能力,但较弱的勘探能力。该算法容易陷入局部最优,出现过早收敛现象。为了平衡探索和开发,在优势群体再生后增加了突变机制。将高斯突变和柯西突变之间的t分布突变切换应用于SMA。t分布突变的自由度随迭代次数自适应变化,可以很好地平衡SMA的探索和利用。当自由度较大时,t分布接近高斯分布,当自由度为1时,为柯西分布。

83244312428100d3d3aed6e86b824a47.png

t分布突变算子的数学表达式为

a8c35d30697ea07ca46f0d5ec732f7b0.png

在DTSMA中,自由度参数tn随迭代次数t呈非线性增长。

ca16935e8eeb334c51ae9e676aae5bac.png

自由度参数tn使DTSMA能够在早期迭代中近似使用柯西突变来增强探测能力,在后期迭代中近似使用高斯突变来集中开发能力。在DTSMA迭代过程中,随着自由度tn的增加,算法逐渐从关注全局探索能力向关注局部开发能力转变。

改进点3

在DTSMA的开发阶段增加搜索算子,以增加黏菌种群的多样性。开发算子表示为

c4799096b102a75e4425ed2b0bfd12ce.png

该算子给出了黏菌的搜索代理最终会停在当前找到的最优位置,并且在某些情况下,个别最优可能收敛到当前全局最优位置goodb X之外。基于上述原理,位置更新的数学公式为:

512f5952ef7ffb5751ad3e01563068d6.png

结果展示

本期分别在CEC2005,CEC2017,CEC2021和CEC2022进行详细测试。测试结果如下。

CEC2005: 这里直接上几个比较经典的测试函数。

c0ef78f0d8ab3e1963be5b7cf4a2df01.png

6e6a9b694f3cb291431257f79ea5e482.png

d1e2593d06683659a53ca32cab05fde2.png

e33542c3425351be24b7d3f97ac62daf.png

5ee5a33a7a7ac7a79e76bb1d39ff918e.png

CEC2017: 

b6fe7bd1cc0ccc4bd51d8914c66353af.png

f634fc9744dc25f1e1635b9a08272746.png

065d260207ca197be7df4b3edc820ce4.png

CEC2021: 

254d5da69a5838b668292e8862be8619.png

b6ce3cb3cdd7cee5be9c8932d133f171.png

c2905c78bad2b19a31cb61eb9d2089a6.png

CEC2022:

c08448a3b9f7f58f338ccc23f7347e2f.png

42d26b93d91666e4f7dbacbebcfee2d8.png

a66df8c225fa4344f9dc3188965f4a90.png

3663d1abd193f88af5f9cae4f7347ab6.png

f5aeeee7befadc742420240989affb09.png

可以看到不论是CEC的哪个测试集,改进的黏菌算法表现都还不错!

代码展示

下面附上黏菌算法的matlab代码

% 黏菌优化算法(SMA)
% max _ iter:最大迭代次数,N:种群大小,收敛曲线:收敛曲线,
function [Destination_fitness,bestPositions,Convergence_curve]=SMA(N,Max_iter,lb,ub,dim,fobj)


%% 初始化位置
bestPositions=zeros(1,dim);
Destination_fitness=inf;%将此更改为 -inf 以解决最大化问题
AllFitness = inf*ones(N,1);%记录所有粘菌的适应度
weight = ones(N,dim);%每个粘菌的适应度权重
%% 初始化随机解集
X=initialization(N,dim,ub,lb);
Convergence_curve=zeros(1,Max_iter);
it=1;  %迭代次数
lb=ones(1,dim).*lb; % 变量下限
ub=ones(1,dim).*ub; % 变量上限
z=0.03; % 参数


%% 主循环
while  it <= Max_iter
    
    %=====适应度排序======
    for i=1:N
        % 检查解决方案是否超出搜索空间并将其带回
        Flag4ub=X(i,:)>ub;
        Flag4lb=X(i,:)<lb;
        X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
        AllFitness(i) = fobj(X(i,:));
    end
    
    [SmellOrder,SmellIndex] = sort(AllFitness); 
    worstFitness = SmellOrder(N);
    bestFitness = SmellOrder(1);


    S=bestFitness-worstFitness+eps;  %加上 eps 以避免分母为零


    %====计算每个粘菌的适应度权重=====
    for i=1:N
        for j=1:dim
            if i<=(N/2) 
                weight(SmellIndex(i),j) = 1+rand()*log10((bestFitness-SmellOrder(i))/(S)+1);
            else
                weight(SmellIndex(i),j) = 1-rand()*log10((bestFitness-SmellOrder(i))/(S)+1);
            end
        end
    end
    
    %====更新最佳适应度值和最佳位置=====
    if bestFitness < Destination_fitness
        bestPositions=X(SmellIndex(1),:);
        Destination_fitness = bestFitness;
    end
    
    a = atanh(-(it/Max_iter)+1);  
    b = 1-it/Max_iter;
    
    %====更新搜索代理的位置=====
    for i=1:N
        if rand<z    
            X(i,:) = (ub-lb)*rand+lb;
        else
            p =tanh(abs(AllFitness(i)-Destination_fitness)); 
            vb = unifrnd(-a,a,1,dim); 
            vc = unifrnd(-b,b,1,dim);
            for j=1:dim
                r = rand();
                A = randi([1,N]);  % 从总体中随机选择两个位置
                B = randi([1,N]);
                if r<p    
                    X(i,j) = bestPositions(j)+ vb(j)*(weight(i,j)*X(A,j)-X(B,j));
                else
                    X(i,j) = vc(j)*X(i,j);
                end
            end
        end
    end
    Convergence_curve(it)=Destination_fitness;
     % display(['At iteration ', num2str(it), ' the best solution fitness is ', num2str(Destination_fitness)]);
    it=it+1;   
end
end

完整代码获取

自适应t分布变异的黏菌优化算法MATLAB代码,参考文献和四种CEC函数集测试均已打包在压缩包中了,目录展示如下:

31a512df3d756c957bdd0bbcdc873467.png

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

DTSMA

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

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

相关文章

arduino的包含库文件定义配合vsCode查看最初定义

记录这个方式是一个意外发现 一个工程例子说明情况 这个示例工程是一个再oled显示屏上显示的arduino程序。font.h中包含的是字符和图片的取模数组&#xff0c;也就是很多点亮led阵列的数组 下面的就是16*8点阵的字模矩阵&#xff0c;矩阵的值的来历可以参考资料 使用vs cod…

nodejs下载指定版本

1.搜索nodejs打开官网nodejs官网&#xff08;除了去官网下载之外还可以使用nvm下载&#xff09; 2.点击downloads 3.往下滑点击Previous Releases(以前的版本) 4.找到你想下载的版本点开&#xff08;此处可能没你想要的具体版本&#xff0c;没关系找到大版本号相同的点开就行了…

用“居委会”实现差异化竞争,蔚来的品牌社区是怎样创造价值的?|新能源车专题研究...

主笔&#xff1a;浣芳黛 出品&#xff1a;增长黑盒研究组 增长黑盒近期开展的新能源车专题研究&#xff0c;旨在深入挖掘新势力们营销与运营的“真经”&#xff0c;上一期研究了极氪之后&#xff0c;马上有热心读者在后台求写蔚来。毋庸置疑&#xff0c;在造车新势力这条竞争日…

黑马JVM总结(二)

&#xff08;1&#xff09;栈 栈帧对应一次方法的调用&#xff0c;线程是要执行代码的&#xff0c;这些代码都是由一个个方法组成&#xff0c;线程运行的时候每个方法需要的内存叫做一个栈帧 &#xff08;2&#xff09;栈的演示 Frames&#xff1a;相当有栈 方法相当于栈帧…

大数据导论 笔记

一、大数据方向 1、技术发展 计算机网络云计算大数据时代人工智能&#xff08;本科&#xff1a;使用&#xff0c;研究生&#xff1a;推导&#xff0c;博士&#xff1a;创新&#xff09; 2023年 大数据模型 人工智能元年 2、基础课程 hadoop 大数据基础 三大件&#xff1a;HDF…

计算机网络原理 网络层

一&#xff0c;网络层的几个重要概念 1&#xff0c;网络层提供的两种服务 在计算机网络领域&#xff0c;网络层应该向运输层提供怎样的服务&#xff08;“面向连接”还是“无连接”&#xff09;引起了长期的争论。争论的焦点就是&#xff1a;在计算机通信中&#xff0c;可靠交…

Kafka3.0.0版本——消费者(RoundRobin分区分配策略以及再平衡)

目录 一、RoundRobin 分区分配策略原理二、RoundRobin分区分配策略代码案例2.1、创建带有7个分区的sixTopic主题2.3、创建三个消费者 组成 消费者组2.3、创建生产者2.4、测试2.5、RoundRobin分区分配策略代码案例说明 三、RoundRobin 分区分配再平衡案例3.1、停止某一个消费者后…

MySQL--MySQL表的增删改查(进阶)

check 聚合查找 count sum average max min 我们这里先构造出多张表 查询lisi同学的成绩 来自student和来自score c 增加名字这一条件 查询所有同学的总成绩以及个人信息 来自score和来自student 查询所有同学的各科成绩以及个人信息 来自student&#xff0c;course和…

数据分享|SAS数据挖掘EM贷款违约预测分析:逐步Logistic逻辑回归、决策树、随机森林...

全文链接&#xff1a;http://tecdat.cn/?p31745 近几年来&#xff0c;各家商业银行陆续推出多种贷款业务&#xff0c;如何识别贷款违约因素已经成为各家商业银行健康有序发展贷款业务的关键&#xff08;点击文末“阅读原文”获取完整数据&#xff09;。 相关视频 在贷款违约预…

Python开源项目周排行 2023年第33周

#2023年第33周2023年9月9日1feapder款上手简单&#xff0c;功能强大的 Python 爬虫框架&#xff0c;内置 AirSpider、Spider、TaskSpider、BatchSpider 四种爬虫解决不同场景的需求。命名源于 fast-easy-air-pro-spider 缩写。 支持断点续爬、监控报警、浏览器渲染、海量数据去…

【洛谷 P1105】平台 题解(结构体+暴力枚举)

平台 题目描述 空间中有一些平台。给出每个平台的位置&#xff0c;请你计算从每一个平台的边缘落下之后会落到哪一个平台上。注意&#xff0c;如果某两个平台的某个两边缘横坐标相同&#xff0c;物体从上面那个平台落下之后将不会落在下面那个平台上。平台可能会重叠。 如果…

使用GPU虚拟化技术搭建支持3D设计的职校学生机房(云教室)

背景 学校为职业学校&#xff0c;计算机教室需要进行Maya、Adobe Illustrator、Adobe Dreamweaver、Adobe PhotoShop等软件的教学。每个教室为35用户。资源需求为4核、8G内存、80G硬盘。 基于桌面虚拟化VDI技术的机房在成本、可管理性方面&#xff0c;相对于传统胖终端的机房…

004微信小程序云开发API数据库-插入记录-删除记录-更新记录

文章目录 1.微信小程序云开发API数据库-插入记录案例代码 2.微信小程序云开发API数据库-删除记录案例代码 3.微信小程序云开发API数据库-更新记录案例代码 1.微信小程序云开发API数据库-插入记录 微信小程序云开发API数据库是一个方便快捷的数据库解决方案&#xff0c;可以让开…

lv4 嵌入式开发-1 Linux文件IO

目录 1 文件的概念和类型 2 如何理解标准IO 3 流(FILE)的含义 3.1 流 3.2 文本流和二进制流 3.3 流的缓冲类型 4 小结 5 缓存区实验 1 文件的概念和类型 概念&#xff1a;一组相关数据的有序集合 文件类型&#xff1a; 常规文件 r 目录文件 d 字符设备文件 …

电力社区电力故障,潜在风险如何避免?

在现代社会中&#xff0c;电力已经成为我们日常生活不可或缺的一部分。它驱动着我们的家庭设备、照明系统、电子设备和许多其他关键基础设施。然而&#xff0c;电力的可靠性和安全性对于确保我们的住宅社区运行顺畅至关重要。 在这个背景下&#xff0c;配电柜监控成为了一个至关…

Python项目打包与部署(三):打包与部署的实际操作流程

其它章节 Python项目打包与部署(一)&#xff1a;模块与包的概念与关系Python项目打包与部署(二): init.py的作用及内容各类Python项目的项目结构及代码组织最佳实践 在实际项目开发过程中&#xff0c;标准化的项目打包与部署流程&#xff0c;对于开源项目&#xff0c;可以帮助你…

[移动通讯]【Carrier Aggregation-4】【LTE-2】

前言&#xff1a; 参考&#xff1a; 4G/LTE - LTE Advanced 参考&#xff1a; 《Carrier Aggregation Explained In 101 Seconds》 Qualcomm 《Carrier aggregation (CA) in LTE-Advanced by TELCOMA Global》 《Carrier Aggregation _CA_Part1》 《Carrier Aggregation _CA_Pa…

手动开发-简单的Spring基于XML配置的程序--源码解析

手动开发-简单的Spring基于XML配置的程序 文章目录 手动开发-简单的Spring基于XML配置的程序思路分析完整代码&&#xff1a; 本文带着大家写一个简单的Spring容器&#xff0c;通过读取beans.xml配置文件&#xff0c;获取第一个JavaBean&#xff1a;Monster的对象&#xff0…

光源控制器光源亮度调节操作说明

光源控制器光源亮度调节操作说明 光源亮度的调节在许多应用中都扮演着至关重要的角色&#xff0c;不仅影响图像质量&#xff0c;还能改善工作环境。下面是关于光源控制器光源亮度调节的详细操作步骤&#xff0c;帮助您轻松实现亮度的合适调整。 步骤一&#xff1a;登录系统 …

MySQL——常见问题

NULL和空值的区别 1、空值不占空间&#xff0c;NULL值占空间。当字段不为NULL时&#xff0c;也可以插入空值。 2、当使用 IS NOT NULL 或者 IS NULL 时&#xff0c;只能查出字段中没有不为NULL的或者为 NULL 的&#xff0c;不能查出空值。 3、判断NULL 用IS NULL 或者 is no…