龍卷風優化算法(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巖石聲發射信號降噪算法