当前位置: 首页 > news >正文

2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)

龙卷风优化算法(Tornado optimizer with Coriolis force)是发表在中科院二区期刊“ARTIFICIAL INTELLIGENCE REVIEW”(IF:11.7)的2025年智能优化算法

01.引言

当自然界的狂暴之力,化身数字世界的智慧引擎:龙卷风,自然界最神秘的力量之一——雷暴盘旋、风切变激荡、科里奥利力牵引,最终凝聚成摧毁万物的旋转风暴。科学家们从这场“天地博弈”中捕捉灵感,打造出​「Tornado Optimizer with Coriolis Force (TOC)」​算法,将风暴形成的动态过程转化为优化问题的终极解法。无需复杂数学模型,不依赖初始参数,仅凭对自然规律的模拟,即可在浩瀚解空间中精准捕获最优答案!

传统算法的困局:为什么我们需要一场“风暴革命”?

在人工智能与工程优化领域,经典算法正面临三大挑战:

​梯度陷阱:传统方法依赖精确的数学梯度,面对噪声数据或非线性问题时束手无策。

​早熟收敛:元启发式算法常陷入局部最优,如同探险者被困山谷,错失远方高峰。

​维度灾难:高维问题中,解空间呈指数级膨胀,计算资源如泥牛入海。

TOC算法的突破,在于用自然界的混沌之力对抗数学的确定性困局——龙卷风的形成、旋转与消散,恰好映射了优化过程中探索、聚焦与迭代的智慧。

02.优化算法的流程

所提出的具有科里奥利力 (TOC) 的龙卷风优化器的想法是基于对龙卷风形成和消散以及风暴和雷暴如何在自然界中演变形成龙卷风的观察而受到启发。为了进一步澄清,关于龙卷风如何产生并向陆地移动的一些基本知识,它们遵循可识别的生命周期,如下所述:当风暴系统内的风速和风向发生变化时,该周期就开始了。这会产生一种旋转效果,该效果由穿过雷云的上升气流垂直倾斜。在这种情况下,风暴通常会发生在那个点。当风暴增强时,它通常会变成超级单体雷暴。另一种说法是,强大的雷暴在大气层几英里高的地方发展出一个旋转系统,成为超级单体或雷云单体。这些超级单体雷暴是独特的、孤立的单体,不属于风暴线的一部分。超级单体风暴是兜兜转转的风暴。当旋转的垂直气柱和超级单体雷暴一起时,风暴云可能会产生龙卷风。龙卷风形成过程的各个阶段可以在图下中观察到。

1. 风暴初生:种群的混沌与秩序

算法初始化时,随机生成三类“风暴个体”:

​普通风暴​(随机探索者):广泛散布在解空间,寻找潜力区域。

​雷暴​(精英个体):当前较优解,吸引周围风暴向其靠拢。

​龙卷风​(全局最优):吞噬能量,成为局部区域的绝对核心。

​自然隐喻:就像真实风暴需要温度、湿度与风切变的配合,算法通过动态调整“风暴能量”,平衡搜索的广度与深度。

​2. 科里奥利效应:给优化加上“地球自转”的智慧

龙卷风在北半球逆时针旋转、南半球顺时针旋转的现象,被抽象为方向扰动机制:

​北半球模式:解向量向右偏转,增强对未知区域的探索。

​南半球模式:解向量向左偏转,强化对已知优势区域的挖掘。

这种动态偏转有效避免了算法“原地打转”,仿佛为搜索过程装上导航罗盘。

​3. 气旋平衡方程:暴力美学中的数学优雅

借鉴流体力学中的梯度风速模型,TOC将气压梯度力、离心力与科里奥利力的平衡关系转化为迭代公式:

​高压区​(局部最优解):离心力主导,推动个体逃离“舒适区”。

​低压区​(潜力区域):科里奥利力牵引,引导种群螺旋式逼近。

整个过程宛如一场精心编排的“风暴之舞”,在破坏与重建中逼近全局最优。

​4. 消散与重生:劣解的淘汰与新星的崛起

当风暴能量衰减(适应度不再提升),算法自动触发“消散机制”:

淘汰停滞个体,释放计算资源。

随机生成新风暴,注入新鲜血液。

这一机制完美复刻自然界的物竞天择,确保种群永葆进化活力。

论文伪代码:

3.论文中算法对比图

04.本代码效果图

05.部分代码

function [TornadoCost,Tornadoposition,ccurve]=TOC(n,max_it,lb,ub,dim,fobj,nto,nt)
%% Convergence curve
ccurve=zeros(1,max_it);%% Generate initial population for the Tornado Optimizer with Coriolis force (TOC) 
% Create initial population for Tornado, thunderstorms, and windstorms, and initialize the positions of populationy=initialization(n,dim,ub,lb);
% Evaluate the fitness of initial population for Tornado, thunderstorms, and windstorms 
fit = zeros(size(y,1),1);
for i=1:size(y,1)fit(i,1)=fobj(y(i,:));
end
[~,index]=sort(fit) ;
%% Forming Windstorms, Thunderstorms, and Tornado of the Tornado Optimizer with Coriolis force (TOC) 
% nto: Number of thunderstorms and tornadoes
% Nt : Number of thunderstorms
% To:  Number of tornadoes
% nw: number of windstorms
To= nto - nt;% Tornadoes
nw=n-nto; % Windstorms
%================ Forming and evaluating the population of the Tornadoes ================
Tornadoposition=y(index(1:To),:) ; % 
TornadoCost=fit(index(1:To)); %================ Forming and evaluating the population of the Thunderstorms ================
Thunderstormsposition(1:nto-1,:)=y(index(2:nto),:);
ThunderstormsCost(1:nto-1)=fit(index(2:nto));
bThunderstormsCost = ThunderstormsCost;
gThunderstormsCost=zeros(1,nto-1);[~,ind]=min(ThunderstormsCost);
bThunderstormsposition = Thunderstormsposition; % Initial best Thunderstorms position
gThunderstormsCost = Thunderstormsposition(ind,:); % Initial global Thunderstorms position
%================ Forming and evaluating the population of the Windstorms ================Windstormsposition(1:nw,:)=y(index(nto+1:nto+nw),:) ; 
WindstormsCost(1:nw)=fit(index(nto+1:nto+nw)) ;  
gWindstormsposition=zeros(1,nw);
bWindstormsCost = WindstormsCost;
[~,ind]=min(WindstormsCost);
bWindstormsposition = Windstormsposition; % % Initial best windstorms position (Update the best positions of windstorms)
gWindstormsposition = Windstormsposition(ind,:); % Initial global windstorms position%% Velcity term of TOC 
vel_storm = 0.1*Windstormsposition; % Velocity of windstorms
%%  Designate windstorms to thunderstorms and Tornadoes 
nwindstorms=1:nw;nwindstorms=nwindstorms(sort(randperm(nw,nto)));% Combining windstorms to tornado
nWT=diff(nwindstorms)';
nWT(end+1)= nw-sum(nWT);
% nWT1=sort(nWT1,'descend');
nWT1 = nWT(1);
% Combining windstorms to thunderstorms
nWH=nWT(2:end);
%% Parameter setting s for TOC
b_r=100000;  
fdelta=[-1,1];
%% Key functions of Tornado Optimizer with Coriolis force (TOC) 
chi=4.10;
eta=2/abs(2-chi-sqrt(chi^2-4*chi)) ;
%% ================  Main Loop for TOC ================ 
disp('================  Tornado Optimizer with Coriolis force (TOC) ================ ');
t=1;while t<=max_it%% Key adaptive functions (Adaptive parameters) of TOCnu  =(0.1*exp(-0.1*(t/max_it)^0.1))^16;mu = 0.5 + rand/2;ay=(max_it-(t^2/max_it))/max_it ;Rl = 2/(1+exp((-t+max_it/2)/2)) ;  Rr = -2/(1+exp((-t+max_it/2)/2)) ;  %%  Evolution of windstorms to Tornadoes% Update velocity     
for i=1:nwfor j = 1:dimif rand > 0.5delta1=fdelta(ceil(2*rand()));zeta=ceil((To).*rand(1,To))'; %  wmin=1; wmax=4.0; rr=wmin+rand()*(wmax-wmin);wr= (((2*rand()) - (1*rand()+rand()))/rr); c=b_r*delta1*wr;omega = 0.7292115E-04; 
%            w_r = sin(-1 + 2.*rand(1,1));f= 2*omega*sin(-1 + 2.*rand(1,1));phi(i,j) = Tornadoposition(zeta,j) - Windstormsposition(i,j);if sign(Rl)>=0 if sign(phi(i,j))>=0 phi(i,j) = -phi(i,j);endendCFl =(((f^2*Rl^2)/4) -Rl* 1 *phi(i,j));if sign(CFl)< 0 CFl= -CFl;endvel_storm(i,j)= eta*  (mu*vel_storm(i,j) - c* (f*Rl)/2 +(sqrt(CFl)));elsedelta1=fdelta(ceil(2*rand()));zeta=ceil((To).*rand(1,To))'; %  rmin=1; rmax=4.0; rr=rmin+rand()*(rmax-rmin);wr= (((2*rand()) - (1*rand()+rand()))/rr); c=b_r*delta1*wr; phi(i,j) = Tornadoposition (zeta,j)-Windstormsposition(i,j);if sign(Rr)<=0 if sign(phi(i,j))<=0 phi(i,j) = -phi(i,j);endendomega =0.7292115E-04;% s�1
%          w_r = sin(-1 + 2.*rand(1,1));f= 2*omega*sin(-1 + 2.*rand(1,1));CFr =(((f^2*Rr^2)/4) -Rr* 1 *phi(i,j));if sign(CFr)<0 CFr= -CFr;end vel_storm(i,j)= eta  *(mu* vel_storm(i,j) - c* (f*Rr)/2 +(sqrt(CFr)))  ;        endendend %% %% Exploration - Evolution of windstorms to Tornadoesfor i=1:nWT1rand_index = floor((nWT1).*rand(1,nWT1))+1;rand_w = Windstormsposition(rand_index, :);alpha=abs(2*ay*rand-1*rand)   ;Windstormsposition(i,:)=Windstormsposition(i,:)+2*alpha*(Tornadoposition  - rand_w(i,:)) + vel_storm(i,:);
%  ub_=Windstormsposition(i,:)>ub; lb_=Windstormsposition(i,:)<lb;Windstormsposition(i,:)=(Windstormsposition(i,:).*(~(ub_+lb_)))+ub.*ub_+lb.*lb_;WindstormsCost (i)=fobj(Windstormsposition(i,:));%%% Finding out the best positionsif WindstormsCost(i)<bWindstormsCost(i)bWindstormsposition(i,:)=Windstormsposition(i,:) ; % Best solutionsbWindstormsCost(i)=WindstormsCost(i);   % Best costendend[minTornadoCost,in]=min(bWindstormsCost); % finding out the best Posif (minTornadoCost<TornadoCost)TornadoCost=minTornadoCost;Tornadoposition = bWindstormsposition(in,:); % Update the global best positionsend %% ================ Exploitation -  Evolution of windstorms to thunderstorms ================ 
%% ================  Combining windstorms together to form thunderstorms ================  for i=1:ntfor j=1:nWH(i)rand_index = floor((nt).*rand(nt))+1;rand_w = Windstormsposition(rand_index, :);c1=abs(2*ay*rand-1*ay); c2=abs(ay - 2*ay*rand);Windstormsposition((j+sum(nWT(1:i))),:)=Windstormsposition((j+sum(nWT(1:i))),:)+2*rand*(Thunderstormsposition(i,:)-Windstormsposition((j+sum(nWT(1:i))),:))+...+ 2*rand*(Tornadoposition (1,:)-Windstormsposition((j+sum(nWT(1:i))),:));ub_=Windstormsposition((j+sum(nWT(1:i))),:)>ub; lb_=Windstormsposition((j+sum(nWT(1:i))),:)<lb;Windstormsposition((j+sum(nWT(1:i))),:)=(Windstormsposition((j+sum(nWT(1:i))),:).*(~(ub_+lb_)))+ub.*ub_+lb.*lb_;WindstormsCost((j+sum(nWT(1:i))))=fobj(Windstormsposition((j+sum(nWT(1:i))),:));if WindstormsCost((j+sum(nWT(1:i))))<ThunderstormsCost(i)              bThunderstormsposition(i,:) =Windstormsposition((j+sum(nWT(1:i))),:);Thunderstormsposition(i,:)=Windstormsposition((j+sum(nWT(1:i))),:);ThunderstormsCost(i)=WindstormsCost((j+sum(nWT(1:i))));end endend   %[minTornadoCost, in]=min(ThunderstormsCost); % finding out the best Posif (minTornadoCost<TornadoCost)TornadoCost=minTornadoCost;Tornadoposition = bThunderstormsposition(in,:); % Update the global best positionsend %% ================  Evolution of thunderstorms to tornado ================ for i=1:nt        zeta=ceil((To).*rand(1,To)); %  alpha=abs(2*ay*rand-1*rand)    ; p = floor((nt).*rand(1,nt))+1;rand_w = Thunderstormsposition(p, :);Thunderstormsposition(i,:)=Thunderstormsposition(i,:)+2.*alpha*(Thunderstormsposition(i,:) - Tornadoposition(zeta,:))+...+2.*alpha*(rand_w(i,:) - Thunderstormsposition(i,:));ub_=Thunderstormsposition(i,:)>ub; lb_=Thunderstormsposition(i,:)<lb;Thunderstormsposition(i,:)=(Thunderstormsposition(i,:).*(~(ub_+lb_)))+ub.*ub_+lb.*lb_;ThunderstormsCost(i) =fobj(Thunderstormsposition(i,:));if ThunderstormsCost(i)<bThunderstormsCost(i)         bThunderstormsposition(i,:) =Thunderstormsposition(i,:);bThunderstormsCost(i) =ThunderstormsCost(i);endend[minTornadoCost,in]=min(bThunderstormsCost); % finding out the best Posif (minTornadoCost<TornadoCost)TornadoCost=minTornadoCost;Tornadoposition = bThunderstormsposition(in,:); % Update the global best positionsend %%   ================  Random formation of windstorms, tornadoes and thunderstorms ================ % Check windstorms formation for windstorms and tornadoesfor i=1:nWT1if  ((norm(Windstormsposition(i,:)-Tornadoposition)<nu))delta2=fdelta(floor(2*rand()+1));Windstormsposition(i,:)=  Windstormsposition(i,:) - (2*ay*(rand*(lb-ub) - lb))*delta2;end
end  % Check windstorms formation for windstorms and thunderstormsfor i=1:ntif  ((norm(Windstormsposition(i,:)-Thunderstormsposition(i,:))<nu))for j=1:nWH(i)delta2=fdelta(floor(2*rand()+1)) ;Windstormsposition((j+ sum(nWT(1:i))),:)=  Windstormsposition((j+ sum(nWT(1:i))),:) - (2*ay*(rand*(lb-ub) - lb))*delta2;endend
end %% Results and Plot   disp(['Iteration: ',num2str(t),'   minTornadoCost= ',num2str(TornadoCost)]);ccurve(t)=TornadoCost;%{if t>2line([t-1 t], [ccurve(t-1) ccurve(t)],'Color','b'); title({'Convergence characteristic curve'},'interpreter','latex','FontName','Times','fontsize',12);xlabel('Iteration');ylabel('Best score obtained so far');drawnow end 
%}t=t+1;endend

✅作者简介:信号处理方向在校博士研究生,目前专研于MATLAB算法及科学绘图等,熟知各种信号分解算法、神经网络时序、回归和分类预测算法、数据拟合算法以及滤波算法。提供一个可以相互学习相互进步的平台

🚩技术信仰:知行合一,让每一行代码都成为解决问题的利器

🔍后台私信备注个人需求(比如TOC-BP)定制以下TOC算法优化模型(看到秒回):

1.回归/时序/分类预测类:BP、RF、XGBoost、RBF、LSSVM、SVM、ELM、DELM、ESN、RELM等等均可,优化算法优化BP为例,可达到以下效果:

(1)优化BP神经网络的数据时序预测

(2)优化BP神经网络的数据回归(多输入多输出)预测

(3)优化BP神经网络的数据回归预测

2.分解类:EEMD、VMD、REMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可,优化算法优化VMD/ICEEMDAN为例,可达到以下效果:

(1)基于改进天鹰优化算法(IAO)优化的VMD参数

(2)基于改进天鹰优化算法(IAO)优化ICEEMDAN参数

3.去噪算法算法类:VMD/CEEMDAN/ICEEMDAN/SVMD+小波阈值/SVD去噪,可在去噪算法前加智能优化算法优化参数以VMD-WT/SVD为例,可达到以下效果:

(1)基于VMD-SpEn(样本熵)联合小波阈值去噪

(2)基于SVMD-SVD的信号去噪算法

(3)基于ZOA优化VMD-IAWT岩石声发射信号降噪算法


http://www.mrgr.cn/news/95299.html

相关文章:

  • 高级java每日一道面试题-2025年3月07日-微服务篇[Eureka篇]-Eureka Server和Eureka Client关系?
  • Docker和Dify学习笔记
  • 详细介绍VUE,带你了解VUE!!!
  • AI对话框实现
  • HarmonyOS开发,A持有B,B引用A的场景会不会导致内存泄漏,看这里!
  • 电机控制常见面试问题(十四)
  • 软件设计师笔记持续更新-看学以致知视频笔记
  • 前后端项目
  • Django之旅:第三节--templates模版的使用
  • 在 Spring Boot 中调用 AnythingLLM 的发消息接口
  • Kafka自定义分区机制
  • Java后端开发技术详解
  • 详解string类+迭代器
  • Java并发编程面试代码练习
  • 【AIGC】Win10系统极速部署Docker+Ragflow+Dify
  • Rust与Java对比
  • 关于运行 npm run serve/dev 运行不起来,node_modules Git忽略不了等(问题)
  • 【C++语言】继承和多态常见的面试问题
  • AI大白话(三):深度学习——AI的‘大脑‘是如何构建的?
  • python3 -m http.sever 8080加载不了解决办法