首页/文章/ 详情

2-21MFO / MVO / SSA / WOA 四种智能优化算法怎样寻找最优解?

44分钟前浏览0
一句话介绍: 这套工程包含 4 种典型群智能优化算法——蛾火焰优化 MFO、多元宇宙优化 MVO、樽海鞘群优化 SSA 和鲸鱼优化 WOA。程序可以在给定变量范围内不断搜索,使目标函数值尽量减小,并输出找到的最佳变量位置、最佳目标值和收敛过程。

先看它解决什么问题

很多优化问题都可以写成:

给定变量 x → 计算目标函数 f(x) → 在允许范围内寻找让 f(x) 尽可能小的 x

如果变量只有一个,而且函数很简单,可以直接求导。

但当:

变量很多;函数非线性;

存在很多局部极值;很难得到解析梯度;

就需要依靠搜索算法不断尝试新的候选解。

这套程序提供 4 种不同的搜索机制:

随机初始化候选解 → 计算目标函数 → 根据各算法规则更新位置 → 保存当前最好解 → 反复迭代 → 输出最优位置和最优目标值

它最大的学习价值是:同一个连续优化框架,可以用 4 种完全不同的自然启发机制实现。

1. 这个工程真正包含哪 4 种算法?

算法

中文名称

核心搜索思想

MFO

蛾火焰优化算法

蛾围绕优良“火焰”做对数螺旋搜索

MVO

多元宇宙优化算法

白洞/黑洞交换信息,并利用虫洞靠近最优宇宙

SSA

樽海鞘群算法

领导者向食物搜索,跟随者形成链式跟随

WOA

鲸鱼优化算法

包围猎物、随机搜索与螺旋气泡网捕食

每种算法位于自己的文件夹中,并有独立的:main.m

算法核心函数

Get_Functions_details.m

initialization.m

func_plot.m

所以这不是一个统一调用 4 种算法的比较程序,而是 4 套可以分别运行的优化算法 Demo

2. 程序优化的对象是什么?

四个工程都使用 Get_Functions_details.m 提供测试问题。

用户只需要指定:Function_name = F1~F23

程序就会自动得到:

变量下界 lb、变量上界 ub、问题维数 dim、目标函数 fobj

因此算法本身和具体优化问题是分开的。

整体关系是:

选择测试函数 → 获取搜索范围与维数 → 算法搜索 → 计算 f(x) → 保存较小目标值

如果要换成自己的优化问题,也可以把 fobj 换成自己的目标函数,并重新指定维数和上下界。

3. F1 为什么很适合验证优化算法?

MFO、SSA 和 WOA 的主程序默认都使用:

F1(x) = Σᵢ xᵢ²

当前维数为:dim = 10

每个变量范围:-100 ≤ xᵢ ≤ 100

这是一个非常经典的 Sphere 测试函数。

它的理论最优点非常明确:

x *= [0,0,…,0]

对应:

F1(x) *= 0

所以运行算法以后,可以直接观察:搜索到的最佳目标值能否不断逼近 0。

它的形状比较简单,因此特别适合先验证算法基本搜索过程是否正常。

4. MVO 默认为什么和另外 3 个算法不一样?

MVO 的 main.m 默认设置:Function_name = F17

F17 的源码公式对应经典 Branin 测试函数,搜索范围为:

-5 ≤ x₁ ≤ 10

0 ≤ x₂ ≤ 15

问题维数只有 2。

它的理论全局最小值约为:F17_min ≈ 0.397887

而且存在多个等价全局最优位置。

因此当前工程的默认设置其实是:

算法

默认函数

维数

迭代次数

搜索个体

MFO

F1

10

1000

30

MVO

F17

2

500

60

SSA

F1

10

1000

30

WOA

F1

10

500

30

所以不能直接比较四个默认运行得到的最终函数值。

如果要做公平算法对比,应该先把四个 main.m 的:

Function_name

搜索个体数、最大迭代次数统一。

5. MFO:为什么“蛾围着火焰转”能够搜索最优值?

MFO 中:

蛾 Moth 表示当前候选解;

火焰 Flame 表示当前排序后较优秀的位置。

每轮先计算所有蛾的目标函数值,再按照从小到大排序,让较好的位置成为火焰。

随后蛾沿对数螺旋靠近对应火焰:

X_new = D × exp(b·t) × cos(2πt) + Flame

其中:

D:当前蛾到火焰的距离;

b = 1;

t:随机螺旋参数。

这种更新不是沿一条直线直接冲向最好解,而是:

围绕优秀位置进行螺旋式接近,在靠近和绕行之间保留搜索空间。

6. MFO 为什么会逐渐从“多目标搜索”变成“集中搜索”?

MFO 每一代使用的火焰数量并不固定。

源码按照迭代进度逐渐把火焰数量:

从 N 减少到 1

前期有很多不同火焰,蛾群可以围绕多个优秀区域搜索;

后期火焰数量越来越少,搜索逐渐集中到当前最好的区域。

因此它天然形成:

前期扩大探索 → 后期加强开发

这也是群智能算法中非常重要的“探索与开发平衡”。

7. MVO:怎样用“多元宇宙”寻找最优解?

MVO 把每一个候选解看成一个“宇宙”。

目标函数值在程序中叫:

Inflation rate,膨胀率

程序会先按照目标函数从小到大排序,并始终保存目前最好的宇宙。

MVO 的位置更新主要有两部分:

白洞 / 黑洞交换

不同宇宙之间可以交换变量,使较优宇宙中的变量有机会传播到其他候选解。

这种机制负责:让种群共享目前搜索到的有价值信息。

虫洞搜索

其他宇宙还会围绕当前最佳宇宙进行随机移动。

所以 MVO 既有:

不同个体之间的信息交换

也有:

围绕全局最好位置的局部搜索。

8. MVO 怎样从探索逐渐转向精细搜索?

程序定义两个随迭代变化的量:

WEP = 0.2 + 0.8 × t / T_max

以及:

TDR = 1 - (t / T_max)^(1/6)

其中:

WEP:虫洞存在概率;

TDR:虫洞移动距离比例。

随着迭代进行:

WEP 从 0.2 逐渐增加到 1;

TDR 从较大值逐渐下降到 0。

简单来说:

后期更频繁地围绕最好宇宙搜索,但每次移动距离越来越小。

这使搜索从大范围探索逐渐变成最优区域附近的精细调整。

9. SSA:一群樽海鞘怎样组成搜索链?

SSA 把当前最优解称为:

Food Position,食物位置

种群被分成两部分:

前半部分负责主动围绕食物搜索;

后半部分作为跟随者形成链式移动。

领导部分的位置更新受到一个重要系数控制:

c₁ = 2 × exp[-(4t / T_max)²]

随着迭代次数增加,c₁ 会快速减小。

因此前期领导者可以在食物附近进行较大范围移动,后期移动幅度逐渐收缩。

10. SSA 的跟随者为什么使用“平均位置”?

对于后半部分的樽海鞘,程序采用:

Xᵢ_new = (Xᵢ + Xᵢ₋₁) / 2

也就是说,当前跟随者会向前一个个体靠近。

这样整个种群形成类似链条的结构:

食物位置 ← 前部搜索个体 ← 后部跟随个体

领导者负责产生新的搜索方向,跟随者则让群体信息沿链条传播。

因此 SSA 的核心可以概括成:前部探索 + 后部平滑跟随。

11. WOA:鲸鱼怎样模拟“包围猎物”?

WOA 中当前最好解就是“猎物位置”。

程序定义:

A = 2a·r₁ - a

C = 2r₂

其中:

r₁、r₂:0~1 随机数;

a:从 2 线性下降到 0。

当:

|A| < 1

鲸鱼主要围绕当前最好解移动:

X_new = X_best - A × |C·X_best - X|

这意味着随着 a 逐渐减小,鲸鱼越来越倾向在目前最好的位置附近进行开发搜索。

12. WOA 为什么还需要随机鲸鱼和螺旋运动?

如果算法永远只朝当前最好位置靠近,很容易过早集中到局部最优。

所以 WOA 还设计了两种机制。

随机搜索

当:|A| ≥ 1

程序不再参考当前最好鲸鱼,而是随机选择另一只鲸鱼作为搜索目标。

这主要负责扩大探索范围。

螺旋气泡网

另一种更新方式为:

X_new = D × exp(b·l) × cos(2πl) + X_best

它模拟座头鲸围绕猎物螺旋收缩的捕食过程。

因此 WOA 实际在三种状态之间切换:

随机探索 → 包围最优解 → 螺旋开发

13. 四种算法最核心的区别是什么?

虽然它们最后都在寻找更小的 f(x),但搜索机制完全不同。

算法

优秀信息来自哪里

位置怎样更新

MFO

排序后的多个火焰

围绕火焰做对数螺旋

MVO

最佳宇宙 + 其他宇宙

白/黑洞交换 + 虫洞移动

SSA

当前食物位置

前部主动搜索 + 后部链式跟随

WOA

当前最好鲸鱼

包围、随机个体搜索、螺旋捕食

所以这套工程非常适合用来理解:

群智能优化不是只有“随机搜索”,而是通过不同的信息共享和位置更新规则,引导随机搜索逐渐向好解集中。

14. 为什么这些算法不用目标函数梯度?

四个算法调用目标函数时都只需要:

fitness = fobj(position)

也就是说,只要能够输入一组变量并返回一个目标值,就能进行搜索。

程序不需要用户提供:

一阶导数;Hessian 矩阵;解析最优条件。

这使它们特别适合:

目标函数复杂、不可导、难求梯度或者只能够通过仿真得到结果的优化问题。

15. 为什么不能只随机生成很多点,然后选最小值?

纯随机搜索每次产生的新点之间几乎没有经验传递。

而这 4 种算法都会利用历史或群体中的优秀信息:

MFO 利用优秀火焰;

MVO 利用最佳宇宙和宇宙交换;

SSA 利用食物位置和链式结构;

WOA 利用最好鲸鱼和群体 位置。

因此搜索过程不是每一代“重新猜一次”,而是:

根据之前找到的好位置继续调整下一步搜索。

这就是启发式优化相对于纯随机采样的重要区别。

16. F1~F23 有什么作用?

四个算法都配有一套测试函数库。

其中包含不同形式的目标函数,例如:

F1:平方和函数;

F5:具有狭长谷底的非线性函数;

F9:含有大量周期性局部极值;

F10:多峰指数/余弦结构;

F11:平方项与余弦乘积组合;

F17:二维多极值测试函数。

不同测试函数能够考察算法不同能力:

简单单峰函数 → 看收敛速度

多峰函数 → 看跳出局部最优能力

高维函数 → 看维数增加后的搜索能力

所以用户不需要只运行默认 F1 或 F17,可以直接修改 Function_name 在 F1~F23 之间切换。

17. 程序最终会输出什么?

每个算法最终都会给出三个核心结果:

最佳位置

也就是:Best_pos

表示当前找到的最优变量组合。

最佳目标值

例如:Best_score

表示把最佳位置代入目标函数后得到的最小值。

收敛曲线

记录:每次迭代以后,目前找到的最好目标值。

对于默认 F1:

最佳目标值越接近 0,说明搜索结果越接近理论最优点。

对于 MVO 默认 F17:

最佳值越接近约 0.397887,说明越接近该测试函数的全局最优。

18. 这套程序适合用在哪里?

群智能优化算法教学

四种方法结构独立,可以直接比较它们的位置更新机制和收敛逻辑。

测试函数优化实验

F1~F23 已经集成在程序中,可以研究不同算法面对单峰、多峰和不同维数函数时的搜索行为。

工程参数优化的基础模板

只要把 fobj 换成实际工程目标,就可以把搜索变量改成:

控制器参数;结构尺寸;模型超参数;能耗参数;设计变量。

前提是能够给出明确的变量上下界和目标函数。

算法对比课程设计

把 4 个 main.m 的测试函数、种群数量和迭代次数统一以后,可以进一步统计:

最优值;平均值;标准差;多次运行稳定性。

19. 怎么运行?

工程分为 MFOMVOSSAWOA 四个独立目录。

使用某一种算法时:

进入对应算法文件夹;

打开该目录中的 main.m;

设置 Function_name;

直接运行;

查看输出的最佳位置、最佳目标值和收敛过程。

如果要公平比较 4 种算法,建议先统一 Function_name、搜索个体数量和 Max_iteration

最值得调整的内容其实只有 测试函数、种群规模和迭代次数。这三项分别决定“优化什么问题”“每轮同时搜索多少候选解”和“搜索持续多久”。

20. 一句话看懂这个项目

这是一个 MATLAB 四种群智能连续优化算法合集:MFO 让候选解围绕优秀火焰做螺旋搜索,MVO 通过宇宙交换和虫洞向最佳宇宙靠近,SSA 用领导者与跟随者组成搜索链,WOA 则在随机搜索、包围最优解和螺旋捕食之间切换;四套程序都可以调用 F1~F23 测试函数并输出最佳位置、最佳目标值和收敛过程,但默认实验条件并不统一,因此如果要比较算法优劣,应先把测试函数、种群规模和迭代次数设置一致。



来源:MATLAB学习与应用
非线性MATLAB参数优化理论控制数控
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-09-05
最近编辑:44分钟前
explicit-z
硕士 工种号:MATLAB学习与应用
获赞 212粉丝 78文章 303课程 5
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈