黏菌优化算法MATLAB实战[免费]

一、算法原理

黏菌算法(Slime mould algorithm,SMA)是模拟黏菌捕食行为的一种仿生算法。黏菌根据气味识别到食物后,通过细胞质的流动形成多个叶脉,同时向多个食物进行移动,当叶脉接近食物源时,黏菌的生物振荡器产生一种传播 波,增加细胞质流动速度,细胞质流动越快,叶脉就越厚。这种正反馈机制,使得黏菌能以一种较优的方式建立连接食物的路径。SMA具有收敛速度快,寻优能力强的优点。

借鉴黏菌的生物行为,可以抽象出三个规则:

寻找食物:黏菌通过空气中的气味接近食物,黏菌接近食物时呈圆形与扇形结构运动。

包围食物:黏菌静脉接触的食物浓度越高,生物振荡器产生的传播波越强,细胞质流动越快。

抓取食物:黏菌在食物浓度低时更慢地接近食物,找到优质食物时更快地接近食物。

二、代码实战

%%
clear
clc
close all
addpath(genpath(pwd))
number='F10'; %选定优化函数,自行替换:F1~F23
[lb,ub,dim,y]=CEC2005(number);  % [lb,ub,D,y]:下界、上界、维度、目标函数表达式
MaxIteration=1000;  %最大迭代次数
Solution_no=50;  %种群规模
%调用SMA算法
[Destination_fitness,bestPositions,Convergence_curve]=SMA(Solution_no,MaxIteration,lb,ub,dim,y);
​
disp(['最佳适应度值',num2str(Destination_fitness)])
disp(['最佳粒子位置',num2str(bestPositions)])
%% 绘图
subplot(1,2,1)
func_plot(number)
title(number)
xlabel('x')
ylabel('y')
zlabel('z')
subplot(1,2,2)
CNT=50;
k=round(linspace(1,MaxIteration,CNT)); %随机选50个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:MaxIteration;
semilogy(iter(k),Convergence_curve(k),'m-x','linewidth',1);
grid on;
title(['函数收敛曲线',number])
xlabel('Iterations');
ylabel('Objective function value');
box on
legend('SMA')
set (gcf,'position', [200,300,700,300])
​
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,:):)=(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:Nfor j=1:dimif i<=(N/2) weight(SmellIndex(i),j) = 1+rand()*log10((bestFitness-SmellOrder(i))/(S)+1);elseweight(SmellIndex(i),j) = 1-rand()*log10((bestFitness-SmellOrder(i))/(S)+1);endendend%====更新最佳适应度值和最佳位置=====if bestFitness < Destination_fitnessbestPositions=X(SmellIndex(1),:);Destination_fitness = bestFitness;enda = atanh(-(it/Max_iter)+1);  b = 1-it/Max_iter;%====更新搜索代理的位置=====for i=1:Nif rand:) = (ub-lb)*rand+lb;elsep =tanh(abs(AllFitness(i)-Destination_fitness)); vb = unifrnd(-a,a,1,dim); vc = unifrnd(-b,b,1,dim);for j=1:dimr = rand();A = randi([1,N]);  % 从总体中随机选择两个位置B = randi([1,N]);if r
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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读 BERT GPT - transformer在NLP领域的延伸

文章目录 不会写的很详细&#xff0c;只是为了帮助我理解在CV领域transformer的拓展1 摘要1.1 BERT - 核心1.2 GPT - 核心 2 模型架构2.1 概览 3 区别3.1 finetune和prompt 3.2 transformer及训练总结 不会写的很详细&#xff0c;只是为了帮助我理解在CV领域transformer的拓展 …

寒武纪显卡实现softmax算子

寒武纪显卡实现softmax基本逻辑 寒武纪实现softmax包括下面5个步骤&#xff0c;我们也采取5个kernel来实现softmax&#xff1a; unionMaxKernel(float* middle, float* source1, int num)&#xff0c;这个kernel使用的任务类型是union1&#xff0c;其中middle的长度为taskDim&…

【mysql】—— 用户管理

目录 &#xff08;一&#xff09;为什么要有用户管理&#xff1f; &#xff08;二&#xff09;用户 2.1 查看用户信息 2.2 创建用户 2.3 删除用户 2.4 修改用户密码 &#xff08;三&#xff09;数据库的权限 3.1 给用户授权 3.2 回收权限 &#xff08;一&#xff09;为…

查看服务器的yum 源

1、cd /etc/yum.repos.d 2、编辑 CentOS-Stream-Sources.repo 3、 查看里面的yum源地址 4、更新yum源&#xff0c;执行下面指令 yum clean all # 清除系统所有的yum缓存 yum makeacache # 生成新的yum缓存 yum repolist

wind万得P0级故障回顾

万得信息技术股份有限公司&#xff08;简称wind&#xff09;是中国大陆领先的金融数据、信息和软件服务企业&#xff0c;总部位于上海陆家嘴金融中心。在国内市场&#xff0c;Wind的客户包括超过90%的中国证券公司、基金管理公司、保险公司、银行和投资公司等金融企业&#xff…

JAVA毕业设计118—基于Java+Springboot的宠物寄养管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的宠物寄养管理系统(源代码数据库)118 一、系统介绍 本系统分为管理员、用户两种角色 1、用户&#xff1a; 登陆、注册、密码修改、宠物寄养、寄养订单、宠物…

公司内部核心文件数据\资料防泄密软件系统,防止未经授权文件、文档、图纸、源代码、音视频...等数据资料外泄,自动智能透明加密保护!

为了保护公司内部的核心文件和数据资料&#xff0c;防止未经授权的外泄&#xff0c;使用自动智能透明加密保护软件系统是非常重要的。 这样的系统可以通过以下方式实现防泄密&#xff1a; 自动智能加密&#xff1a;该系统可以对公司内部的核心文件和数据资料进行自动智能加密&…

二线厂商-线上测评-大数据开发

曾经投递过一些中级岗位&#xff0c;在面试之前&#xff0c;会通过邮件的方式把性格测试的题目发给你让你做一下。 一般分为单选题&#xff0c;多选题&#xff0c;性格测试题&#xff0c;认知理解题等等。 大概做了一个小时吧。 单选题&#xff1a; 感觉就是类似于以前高中时候…

大型语言模型与知识图谱的完美结合:从LLMs到RAG,探索知识图谱构建的全新篇章

最近,使用大型语言模型(LLMs)和知识图谱(KG)开发 RAG(Retrieval Augmented Generation)流程引起了很大的关注。在这篇文章中,我将使用 LlamaIndex 和 NebulaGraph 来构建一个关于费城费利斯队(Philadelphia Phillies)的 RAG 流程。 我们用的是开源的 NebulaGraph 来…

工业智能网关如何保障数据通信安全

工业智能网关是组成工业物联网的重要设备&#xff0c;不仅可以起到数据交换、通信、边缘计算的功能&#xff0c;还可以发挥数据安全保障功能&#xff0c;保障工业物联网稳定、可持续。本篇就为大家简单介绍一下工业智能网关增强和确保数据通信安全的几种措施&#xff1a; 1、软…

真心建议,幼师姐妹刷到一定要存下啊

幼师姐妹还不知道&#xff1f;但凡早点发现这个好东西&#xff0c;我也不至于天天加班写各种报告了啊&#xff0c;真的写什么都行&#xff0c;什么总结&#xff0c;教案&#xff0c;评语&#xff0c;日报等等 都能写啊&#xff01;&#xff01;&#xff01;

入驻抖店的费用是多少?最新具体费用详情!

我是电商珠珠 抖店的入驻费用是新手比较关心的问题&#xff0c;网上的说法不一&#xff0c;有说开店要几w的&#xff0c;还有的说不要钱的&#xff0c;什么说法都有。 搞得想要开店的人&#xff0c;心有点慌&#xff0c;害怕超出自己的预算。 接下来我就跟大家详细讲一下&am…