智能优化算法:蝠鲼觅食优化算法 - 附代码

本文介绍蝠鲼觅食优化算法(MRFO),该算法模仿蝠鲼觅食过程,通过数学建模实现最优解搜索,求解精度与鲁棒性优于传统算法。MRFO有链式、螺旋、翻滚三种觅食行为,文中给出对应数学模型及算法流程,还列出实验结果、参考文献和Matlab代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

智能优化算法:蝠鲼觅食优化算法


摘要:蝠鲼觅食优化 (Manta ray foraging optimization,
MRFO)是由 Zhao 等,在 2019 年提出的新型智能仿生群体算法。具有寻优能力强,收敛快的特点。

1.算法原理

该算法是模仿蝠鲼在海洋中的觅食过程,针对不同捕食策略进行数学建模,对蝠鲼个体位置更新的方式进行数学描述,从而实现在复杂解空间中对最优解的搜索。由于位置更新方式的独特性,MRFO 的求解精度与鲁棒性相比于传统群体智能仿生算法也有显著的提升。MRFO 可描述为 3 种觅食行为,包括链式觅食、螺旋觅食以及翻滚觅食。

1.1 链式觅食

链式捕食过程中,蝠鲼种群从头到尾排成一条捕食链。蝠鲼个体下一位置的移动方向与步长是由当前最优解与前一个体位置共同决定。该种位置更新方式数学模型如下:
x i d ( t + 1 ) = { x i d ( t ) + r ( x b e s t d ( t ) − x i d ( t ) ) + α ( x b e s t d − x i d ( t ) ) , i = 1 x i d ( t ) + r ( x i − 1 d ( t ) − x i d ( t ) ) + α ( x b e s t d − x i d ( t ) ) , i = 2 , 3 , . . . , N (1) x_i^d(t+1)=\begin{cases} x_i^d(t) + r(x_{best}^d(t)-x_i^d(t))+\alpha(x_{best}^d - x_i^d(t)),i=1\\ x_i^d(t) + r(x_{i-1}^d(t)-x_i^d(t))+\alpha(x_{best}^d - x_i^d(t)),i=2,3,...,N \end{cases}\tag{1} xid(t+1)={xid(t)+r(xbestd(t)xid(t))+α(xbestdxid(t)),i=1xid(t)+r(xi1d(t)xid(t))+α(xbestdxid(t)),i=2,3,...,N(1)

α = 2 r ∣ l o g ( r ) ∣ (2) \alpha = 2r\sqrt{|log(r)|}\tag{2} α=2rlog(r) (2)

式中, x i d ( t ) x_i^d(t) xid(t)表示第 t t t 代、第 i i i 个个体在 d d d 维上的位置;r表示在[0,1]上均匀分布的随机数; x b e s t d ( t ) x_{best}^d(t) xbestd(t)表示第 t t t 代最优个体在第 d d d 维上的位置; N N N表示个体数量。

1.2 螺旋觅食

当蝠鲼个体发现某猎物之后,其会采用螺旋的方式向其靠近。MRFO 中蝠鲼个体由于链式捕食方式的存在,其在向当前解螺旋移动的过程中,同样还受到前一个个体的影响。该种位置更新方式数学模型如下:

t / T > r a n d t/T>rand t/T>rand,描述蝠鲼螺旋状运动的数学方程可以定义为:
x i d ( t + 1 ) = { x b e s t d ( t ) + r ( x b e s t d ( t ) − x i d ( t ) ) + β ( x b e s t d − x i d ( t ) ) , i = 1 x b e s t d ( t ) + r ( x i − 1 d ( t ) − x i d ( t ) ) + β ( x b e s t d − x i d ( t ) ) , i = 2 , 3 , . . . , N (3) x_i^d(t+1)=\begin{cases} x_{best}^d(t) + r(x_{best}^d(t)-x_i^d(t))+\beta(x_{best}^d - x_i^d(t)),i=1\\ x_{best}^d(t) + r(x_{i-1}^d(t)-x_i^d(t))+\beta(x_{best}^d - x_i^d(t)),i=2,3,...,N \end{cases} \tag{3} xid(t+1)={xbestd(t)+r(xbestd(t)xid(t))+β(xbestdxid(t)),i=1xbestd(t)+r(xi1d(t)xid(t))+β(xbestdxid(t)),i=2,3,...,N(3)

β = 2 e r 1 T − i + 1 T s i n ( 2 π r 1 ) (4) \beta = 2e^{r_1\frac{T-i+1}{T}}sin(2\pi r_1)\tag{4} β=2er1TTi+1sin(2πr1)(4)

中, T T T 为迭代总次数; r 1 r_1 r1 在[0,1]上均匀分布随机数。当
t / T ≤ r a n d t/T\leq rand t/Trand,描述蝠鲼螺旋状运动的数学方程可以定义为:
x i d ( t + 1 ) = { x r a n d d ( t ) + r ( x r a n d d ( t ) − x i d ( t ) ) + β ( x r a n d d − x i d ( t ) ) , i = 1 x r a n d d ( t ) + r ( x i − 1 d ( t ) − x i d ( t ) ) + β ( x r a n d d − x i d ( t ) ) , i = 2 , 3 , . . . , N (5) x_i^d(t+1)=\begin{cases} x_{rand}^d(t) + r(x_{rand}^d(t)-x_i^d(t))+\beta(x_{rand}^d - x_i^d(t)),i=1\\ x_{rand}^d(t) + r(x_{i-1}^d(t)-x_i^d(t))+\beta(x_{rand}^d - x_i^d(t)),i=2,3,...,N \end{cases} \tag{5} xid(t+1)={xrandd(t)+r(xrandd(t)xid(t))+β(xranddxid(t)),i=1xrandd(t)+r(xi1d(t)xid(t))+β(xranddxid(t)),i=2,3,...,N(5)

x r a n d d = L b d + r ( U b d − L b d ) (6) x_{rand}^d = Lb^d+r(Ub^d-Lb^d)\tag{6} xrandd=Lbd+r(UbdLbd)(6)

x r a n d d ( t ) x_{rand}^d(t) xrandd(t)表示第 t t t代、第 d d d维的随机位置。 U b d , L b d Ub^d,Lb^d Ubd,Lbd表示变量取值上、下界。

1.3 翻滚觅食

在翻滚捕食中,蝠鲼个体以当前最优解作为翻滚支点,翻滚至与其当前位置成镜像关系的另一侧。其数学模型表达如下:
x i d ( t + 1 ) = x i d ( t ) + S ( r 2 x b e s t d − r 3 x i d ( t ) ) , i = 1 , 2 , . . . , N (7) x_i^d(t+1) = x_i^d(t)+S(r_2x_{best}^d-r_3x_i^d(t)),i=1,2,...,N \tag{7} xid(t+1)=xid(t)+S(r2xbestdr3xid(t)),i=1,2,...,N(7)

S = 2 (7) S = 2\tag{7} S=2(7)

中, r 2 r_2 r2 r 3 r_3 r3都是在[0,1]上均匀分布的随机数。

算法流程

step1.设定算参数,初始化种群

step2. 计算适应度值

step3.判断rand<0.5。如果成立,则执行螺旋觅食。如果不成立则执行链式觅食。

step4.计算适应度值,更新最优位置

step5.执行翻滚觅食,更新位置

step6.计算适应度值,更新最优位置

step7.判断是否满足结束条件,如果满足则输出最优值,否则重复执行step2-step7.

2.实验结果

在这里插入图片描述

3.参考文献

[1]李璟楠,乐美龙.多种群蝠鲼觅食优化求解多跑道机场航班排序[J].航空计算技术,2020,50(06):47-51.

[1]Zhao Weiguo,Zhang Zhenxing,Wang Liying. Manta Ray Foraging Optimization:An Effective Bio-inspired Optimizer for Engineering Applications[J]. Engineering Applications of Artificial Intelligence,2020,87:103300.

4.Matlab代码

个人资料介绍

<think>嗯,用户想了解Excel中的VLOOKUP函数的用法和参数含义。首先,我需要回忆一下VLOOKUP的基本结构。VLOOKUP是垂直查找函数,用于在表格的首列查找指定的值,然后返回该行中指定列的数据。它的四个参数分别是查找值、表格范围、列索引号和匹配模式。 接下来,我得确认每个参数的具体作用。第一个参数是lookup_value,也就是用户要查找的值,比如产品ID或者姓名。第二个参数是table_array,即查找的范围,这里要注意的是,查找值必须位于这个范围的第一列,否则函数无法正确工作。第三个参数是col_index_num,也就是用户想要返回的数据在表格范围中的第几列,这个列数是从表格范围的第一列开始算起的,不是整个工作表的列。第四个参数是range_lookup,决定是精确匹配还是近似匹配,通常用FALSE或0来指定精确匹配,避免错误。 然后,用户可能需要一个具体的例子来理解如何使用。比如,假设有一个产品价格表,用户想根据产品ID查找对应的价格。这时候,VLOOKUP就可以在ID列查找,然后返回价格列的数据。同时,要提醒用户注意表格范围最好使用绝对引用,比如$A$2:$C$100,这样在拖动公式时范围不会变化。 可能遇到的问题也需要考虑。比如,如果查找值不在表格的第一列,或者列索引号超过了表格的列数,函数会返回错误。此外,数据格式不一致也可能导致问题,比如查找值是数字,而表格中是文本格式的数字,这时候需要统一格式。还有,当出现#N/A错误时,可能是查找值不存在,或者匹配模式设置不正确,需要检查参数是否正确。 用户可能还会问到如何避免常见的错误,比如部分数据匹配出错的情况。这时候需要检查是否有多余的空格,或者数据格式不一致,或者表格范围没有锁定导致拖动时偏移。此外,XLOOKUP作为VLOOKUP的升级版,可能在某些情况下更方便,比如可以向左查找或者返回多列数据,这也是可以提及的内容。 最后,整理步骤,从基础语法到参数说明,再到具体案例,逐步引导用户理解如何使用VLOOKUP函数。同时,提供常见错误和解决方法,帮助用户在实际应用中避免问题。如果有必要,还可以比较VLOOKUP和其他查找函数的区别,比如HLOOKUP或XLOOKUP,但根据用户的问题,主要集中在VLOOKUP本身即可。</think>### Excel VLOOKUP函数详解 #### 一、基础语法与参数说明 VLOOKUP函数的语法为: $$=VLOOKUP(lookup\_value, table\_array, col\_index\_num, [range\_lookup])$$ 包含4个参数: 1. **lookup_value**(必填):要查找的值(如单元格引用或具体值) 2. **table_array**(必填):包含数据的表格范围(必须包含查找列和返回列) 3. **col_index_num**(必填):返回值所在列的序号(从table_array第一列开始计数) 4. **range_lookup**(可选):匹配类型 - `TRUE`/`1`:近似匹配(默认值,需数据升序排列) - `FALSE`/`0`:精确匹配(常用选项) [^1][^2] #### 二、使用步骤演示(工资表查询案例) 假设需要根据员工编号查询工资: 1. 建立查询单元格(如`B12`) 2. 输入公式: ```excel =VLOOKUP(A12, $A$2:$D$100, 4, 0) ``` - `A12`:待查询的员工编号 - `$A$2:$D$100`:锁定数据区域(绝对引用) - `4`:返回第4列(工资列) - `0`:精确匹配 [^2][^3] #### 三、常见错误与解决方法 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | #N/A | 查找值不存在 | 检查数据源或改用`IFERROR`容错 | | #REF! | 列序号超出范围 | 确认col_index_num ≤ 表格列数 | | 部分匹配失败 | 数据格式不一致 | 统一数值/文本格式 | | 结果错位 | 表格未锁定 | 使用`$`符号固定区域引用 | [^3][^4] #### 四、进阶技巧 1. **多条件查询**: 使用辅助列合并多个条件字段 ```excel =VLOOKUP(A2&B2, $D$2:$F$100, 3, 0) ``` 2. **通配符匹配**: `"*"`匹配任意字符,`"?"`匹配单个字符 ```excel =VLOOKUP("张*", $A$2:$C$100, 3, 0) ``` 3. **跨表查询**: 引用其他工作表数据 ```excel =VLOOKUP(A2, Sheet2!$A$2:$D$100, 4, 0) ``` [^1][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能算法研学社(Jack旭)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值