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

news2025/4/22 3:31:34

龙卷风优化算法(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 population
 
y=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 TOC
     
   nu  =(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:nw
    for j = 1:dim
         if rand > 0.5
           
          delta1=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);
              end
          end
          
           CFl =(((f^2*Rl^2)/4) -Rl* 1 *phi(i,j));
            
            if sign(CFl)< 0 
                 CFl= -CFl;
            end
            
            vel_storm(i,j)= eta*  (mu*vel_storm(i,j) - c* (f*Rl)/2 +(sqrt(CFl)));
          
         else
          delta1=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);
               end
         end
         
        omega =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)))  ;        
         end
     end
        
end 
               
%% %% Exploration - Evolution of windstorms to Tornadoes
  
for i=1:nWT1
          rand_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 positions
               if WindstormsCost(i)<bWindstormsCost(i)
                    bWindstormsposition(i,:)=Windstormsposition(i,:) ; % Best solutions
                    bWindstormsCost(i)=WindstormsCost(i);   % Best cost
              end
      
end
      [minTornadoCost,in]=min(bWindstormsCost); % finding out the best Pos
   if (minTornadoCost<TornadoCost)
         TornadoCost=minTornadoCost;
         Tornadoposition = bWindstormsposition(in,:); % Update the global best positions
   end 
   
%% ================ Exploitation -  Evolution of windstorms to thunderstorms ================ 
%% ================  Combining windstorms together to form thunderstorms ================  
    for i=1:nt
        for 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 
            
             
        end
    end   
    
%
   [minTornadoCost, in]=min(ThunderstormsCost); % finding out the best Pos
   if (minTornadoCost<TornadoCost)
         TornadoCost=minTornadoCost;
         Tornadoposition = bThunderstormsposition(in,:); % Update the global best positions
  end 
 
    
%% ================  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);
     	end
                
  end
   [minTornadoCost,in]=min(bThunderstormsCost); % finding out the best Pos
   if (minTornadoCost<TornadoCost)
         TornadoCost=minTornadoCost;
         Tornadoposition = bThunderstormsposition(in,:); % Update the global best positions
  end 
  
 
%%   ================  Random formation of windstorms, tornadoes and thunderstorms ================ 
   % Check windstorms formation for windstorms and tornadoes
 for i=1:nWT1
        if  ((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 thunderstorms
      
for i=1:nt
         if  ((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;
 
          end
        end
end 
 
%% Results and Plot   
    
    disp(['Iteration: ',num2str(t),'   minTornadoCost= ',num2str(TornadoCost)]);
    ccurve(t)=TornadoCost;
  
 %{
 if t>2
        line([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;
    
end
 
end

✅作者简介:信号处理方向在校博士研究生,目前专研于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.coloradmin.cn/o/2321451.html

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

相关文章

3.24-3 接口测试断言

一.postman 断言 1.断言再test中 #状态码是否等于200 tests["Status code is 200"] responseCode.code 200; #断言响应时间小于200ms tests["Response time is less than 200ms"] responseTime < 200; #断言响应体包含内容 tests["Body…

DeepSeek面试——模型架构和主要创新点

本文将介绍DeepSeek的模型架构多头潜在注意力&#xff08;MLA&#xff09;技术&#xff0c;混合专家&#xff08;MoE&#xff09;架构&#xff0c; 无辅助损失负载均衡技术&#xff0c;多Token 预测&#xff08;MTP&#xff09;策略。 一、模型架构 DeepSeek-R1的基本架构沿用…

Python----计算机视觉处理(Opencv:图像亮度变换)

一、图像亮度变换 亮度调整&#xff1a;图像像素强度整体变高或者变低。 对比度调整&#xff1a;图像暗处像素强度变低&#xff0c;图像亮处像素强度变高&#xff0c;从而拉大中间某个区域范围的显示精 度。 A&#xff1a;原图 …

无人机动平衡-如何在螺旋桨上添加或移除材料

平衡无人机螺旋桨是一项精细的工作&#xff0c;直接影响飞行稳定性和组件寿命。不同的方法适用于不同的情况&#xff0c;螺旋桨的材料和尺寸以及所需调整的幅度都会影响选择的方法。 本文将深入探讨添加如胶水和胶带等材料的方法&#xff0c;以及通过打磨和修剪来移除质量的方…

基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行步骤

该项目是基于python/django/vue开发的房屋租赁系统/租房平台&#xff0c;作为本学期的课程作业作品。欢迎大家提出宝贵建议。给师弟开发的课程作业&#xff0c;技术学习可以留言哦 功能介绍 平台采用B/S结构&#xff0c;后端采用主流的PythonDjango进行开发&#xff0c;前端采…

涨薪技术|k8s设计原理

01k8s介绍 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化 工作负载和服务&#xff0c;有助于实现声明性配置和自动化。它有一个庞大、快速增长的生态系统。Kubernetes 服务、支持和工具广泛可用。Kubernetes 这个名字起源于希腊语&#xff0c;意思是舵…

基于FPGA的16QAM+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 16QAM调制解调原理 2.2 帧同步 3.Verilog核心程序 4.完整算法代码文件获得 1.算法仿真效果 vivado2019.2仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 设置SNR12db 将FPGA数据导入到MATLAB显…

QuecPython 外设接口之GPIO应用指南

基础知识 了解GPIO基础知识更有益于我们使用它。 框图 GPIO&#xff08;通用输入输出&#xff09;是指一种通用的数字输入/输出接口&#xff0c;用于与外部电子元件或设备进行通信。它通常存在于微处理器、微控制器和其他嵌入式系统中。 物理电路结构如下图所示&#xff1a…

Spring Boot 整合 Nacos 注册中心终极指南

在微服务架构中&#xff0c;配置管理和动态路由是核心需求。Nacos 作为阿里巴巴开源的动态服务发现、配置管理和服务管理平台&#xff0c;能够帮助开发者实现配置热更新、多环境共享配置以及动态路由管理。本文将结合 Spring Boot 和 Spring Cloud Gateway&#xff0c;手把手教…

SQLServer列转行操作及union all用法

1.创建测试表及数据sql如下 create table ScoresTable( Name varchar(50), ChineseScore int, MathScore int ) insert into ScoresTable values(小张,90,95) insert into ScoresTable values(小王,98,99) 2.表中查询结果如下 3.现需列转行显示&#xff0c;每行显示 姓名…

【GL010】C++

1.C中的const关键字有哪些用法&#xff1f; 1.修饰变量&#xff1a;表示变量的值不可修改。 const int a 10; 2.修饰指针&#xff1a; const int* p&#xff1a; // 指针指向的内容不可修改。 int* const p&#xff1a; // 指针本身不可修改。 const int* const…

(Arxiv-2025)MagicDistillation:用于大规模人像少步合成的弱到强视频蒸馏

MagicDistillation&#xff1a;用于大规模人像少步合成的弱到强视频蒸馏 paper是HKUST发布在Arxiv 2025的工作 paper title&#xff1a;MagicDistillation: Weak-to-Strong Video Distillation for Large-Scale Portrait Few-Step Synthesis Project page&#xff1a;地址 Abst…

Excel(进阶篇):powerquery详解、PowerQuery的各种用法,逆透视表格、双行表头如何制作透视表、不规则数据如何制作数据透视表

目录 PowerQuery工具基础修改现有数据理规则PowerQuery抓取数据的两种方式多文件合并透视不同表结构多表追加数据透视追加与合并整理横向表格:逆透视 数据用拆分工具整理数据算账龄 不等步长值组合合并文件夹中所有文件PowerQuery处理CSV文件双行表头、带合并单元格如何做数据…

Simple-BEV的bilinear_sample 作为view_transformer的解析,核心是3D-2D关联点生成

文件路径models/view_transformers 父类 是class BiLinearSample(nn.Module)基于https://github.com/aharley/simple_bev。 函数解析 函数bev_coord_to_feature_coord的功能 将鸟瞰图3D坐标通过多相机&#xff08;针孔/鱼眼&#xff09;内外参投影到图像特征平面&#xff0…

同一个局域网的话 如何访问另一台电脑的ip

在局域网内访问另一台电脑&#xff0c;可以通过以下几种常见的方法来实现&#xff1a; ‌直接通过IP地址访问‌&#xff1a; 首先&#xff0c;确保两台电脑都连接在同一个局域网内。获取目标电脑的IP地址&#xff0c;这可以通过在目标电脑上打开命令提示符&#xff08;Windows系…

基于SpringBoot的名著阅读网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

Excel(实战):INDEX函数和MATCH函数、INDEX函数实战题

目录 经典用法两者嵌套查值题目解题分析 INDEX巧妙用法让数组公式&#xff0c;自动填充所有、有数据的行/列INDEX函数和SEQUENCE函数 经典用法两者嵌套查值 题目 根据左表查询这三个人的所有数据 解题分析 INDEX函数的参数&#xff1a;第1个参数是选定查找范围&#xff0c…

uniapp超简单ios截屏和上传app store构建版本方法

​ 假如使用windows开发ios的应用&#xff0c;上架的时候&#xff0c;你会发现&#xff0c;上架需要ios应用多种尺寸的ios设备的截图&#xff0c;和需要xcode等工具将打包好的ipa文件上传到app store的构建版本。 大部分情况下&#xff0c;我们的公司都没有这么多款ios设备来…

Netty源码—5.Pipeline和Handler一

大纲 1.Pipeline和Handler的作用和构成 2.ChannelHandler的分类 3.几个特殊的ChannelHandler 4.ChannelHandler的生命周期 5.ChannelPipeline的事件处理 6.关于ChannelPipeline的问题整理 7.ChannelPipeline主要包括三部分内容 8.ChannelPipeline的初始化 9.ChannelPi…

MySQL小练习

目录 一、单表查询 二、多表查询 一、单表查询 素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float…