1. 简介

在本教程中,我们将深入探讨一种相对较新的、受自然启发的元启发式优化技术。它灵感来源于深海中常见的樽海鞘(salp)群体行为。

这是一种活跃的研究领域,已经在特定优化问题中展现出了实用价值。

2. 什么是 Salp(樽海鞘)

Salp 是一种桶状的浮游被囊动物,属于樽海鞘科(Salpidae)。它是动物界中喷射推进效率最高的例子之一。这种推进方式是通过收缩身体,将水从体内泵出以实现移动。

一个有趣的行为是,当它们聚集在一起时,会形成一条链状的群体:

Salp Chain 1

从生物学角度看,目前尚不清楚这种群体行为的具体原因。但研究者推测这可能有助于它们更好地移动和觅食。我们把这种群体称为“salp chain”,有时它们可以非常庞大!

3. 为什么我们要关注它?

Salp 是一种迷人的生物,关于它们的自然行为还有许多研究正在进行中。但就优化问题而言,我们更关注的是它们的群体行为。关键在于模仿这种行为来解决复杂的优化问题

群体智能(Swarm Intelligence)是指由去中心化、自组织系统所表现出的集体行为。这些系统可以是自然的,也可以是人工的,通常由简单的个体组成,这些个体通过局部交互以及与环境的互动,表现出全局的智能行为。

现实世界中的优化问题通常非常复杂。它们产生的搜索空间往往非常庞大,传统的数学规划方法在有限的时间和资源下难以找到全局最优解。这时,元启发式方法(metaheuristics)可以在更少的计算资源下找到较优解。虽然不能保证找到全局最优解,但能显著提升效率。

像蚂蚁、蝗虫、鲸鱼、蜜蜂、萤火虫等生物的群体行为多年来被研究者建模,用于解决复杂的优化问题。它们通过协作可以解决个体无法完成的任务。例如,蚂蚁可以协同找到远离巢穴的食物源:

Ant Colony Optimization

有趣的是,某些元启发式算法在某些问题上表现良好,但在其他问题上可能效果不佳。这也正是这个领域持续发展的原因。我们想探讨的是:是否可以通过建模 salp 的群体行为,来更高效地解决某些优化问题?

4. 数学建模

虽然这个概念本身很吸引人,但如果不进行数学建模,就无法将其用于实际。几年前,S. Mirjalili 等人在其研究论文中首次尝试对 salp 的群体行为进行建模。他们提出将 salp 群体分为“领导者”和“跟随者”两类:

Salp

如图所示,单个 salp(a)组成一个链式结构(b)。在数学建模中,我们将运动方向上的第一个 salp 定义为“leader”,其余为“followers”。

我们假设所有 salp 处于一个 n 维搜索空间中,其中 n 是问题中变量的个数。我们可以用一个二维矩阵 x 来存储所有 salp 的位置,食物源(最优解)记为 F。

4.1 领导者 salp 的位置更新公式:

$$ x_{j}^{1} = \begin{cases} F_{j} + c_{1}((ub_{j} - lb_{j})c_{2} + lb_{j}) & c_{3} \geq 0 \ F_{j} - c_{1}((ub_{j} - lb_{j})c_{2} + lb_{j}) & c_{3} < 0 \end{cases} $$

其中:

  • $ x_{j}^{1} $:leader 在第 j 维的位置
  • $ F_j $:食物源在第 j 维的位置
  • $ ub_j $ 和 $ lb_j $:第 j 维的上下界
  • $ c_1, c_2, c_3 $:随机变量

其中 $ c_1 $ 最为关键,它控制算法在“探索”和“开发”之间的平衡。其更新公式如下:

$$ c_1 = 2e^{-(\frac{4l}{L})^2} $$

其中:

  • $ l $:当前迭代次数
  • $ L $:总迭代次数

$ c_2 $ 和 $ c_3 $ 是在 [0,1] 区间内随机生成的数。

4.2 跟随者 salp 的位置更新公式:

$$ x_{j}^{i} = \frac{1}{2}(x_{j}^{i} + x_{j}^{i-1}) \quad i \geq 2 $$

其中:

  • $ x_{j}^{i} $:第 i 个 follower 在第 j 维的位置

这些公式使得我们可以在数学上模拟 salp 的群体行为,从而用于构建优化算法。

5. Salp Swarm 算法

有了数学模型后,我们可以基于它构建用于优化问题的算法。根据优化目标的不同,可以分为单目标和多目标两类算法。

5.1 单目标优化问题

单目标优化问题只有一个目标函数,可以是最大化或最小化问题,可能还包含等式或不等式约束。其数学形式如下:

$$ \text{Minimize: } F(\vec{x}) = f_1(\vec{x}) $$ $$ \text{Subject to: } g_i(\vec{x}) \geq 0, \quad i=1,2,...,m $$ $$ h_i(\vec{x}) = 0, \quad i=1,2,...,p $$ $$ lb_i \leq \vec{x} \leq ub_i, \quad i=1,2,...,n $$

使用 salp 群体模型解决此类问题时,我们把食物源设为当前最优解,并假设整个群体在追逐它。我们称该算法为 **Single-objective Salp Swarm Algorithm (SSA)**。

算法伪代码如下:

algorithm SSAAlgorithm(n, ub, lb):
    // 输入:salp 数量、变量上下界
    // 输出:最优解 F

    初始化 salp 群体 x[1..n]

    while 未满足终止条件:
        计算每个 salp 的适应度
        F = 当前最优解
        更新 c1
        
        for 每个 salp:
            if 是 leader:
                按照公式更新 leader 位置
            else:
                按照公式更新 follower 位置
        根据变量边界修正 salp 位置

    return F

5.2 多目标优化问题

多目标优化问题需要同时优化多个目标函数,其数学形式如下:

$$ \text{Minimize: } F(\vec{x}) = {f_1(\vec{x}), f_2(\vec{x}), ..., f_o(\vec{x})} $$ 其余约束条件与单目标相同。

在多目标优化中,我们使用 Pareto 最优支配(Pareto optimal dominance)概念来比较候选解。若解 x 在所有目标上不差于 y,且至少在一个目标上更优,则 x 支配 y。

我们维护一个 Pareto 最优解集合(也称非支配解集合),并从中选择食物源进行迭代。

我们称该算法为 **Multi-objective Salp Swarm Algorithm (MSSA)**,其伪代码如下:

algorithm MSSAAlgorithm(n, ub, lb):
    // 输入:salp 数量、变量上下界
    // 输出:非支配解集合 repository

    初始化 salp 群体 x[1..n]

    while 未满足终止条件:
        计算每个 salp 的适应度
        找出非支配解并更新 repository
        
        if repository 已满:
            执行维护策略移除一个解
            添加新非支配解
        
        F <- 从 repository 中选择食物源
        更新 c1
        
        for 每个 salp:
            if 是 leader:
                更新 leader 位置
            else:
                更新 follower 位置
        根据变量边界修正 salp 位置

    return repository

与 SSA 相比,MSSA 主要区别在于维护一个非支配解集合,并从中选择食物源。这使得算法能更好地探索 Pareto 前沿的稀疏区域。

6. 实际应用

基于 salp swarm 的算法是当前活跃的研究方向,已经在多个实际问题中得到了应用。例如:

  • 经典优化问题:

    • 三杆桁架设计
    • 焊接梁设计
    • I 型梁设计
    • 悬臂梁设计
    • 拉压弹簧设计
  • 工程设计问题:

    • 二维翼型设计(SSA)
    • 船用螺旋桨设计(MSSA)

实验结果表明,SSA 和 MSSA 在这些问题中都能找到较优解。未来随着研究深入,这类算法有望在更多领域如极限机器学习(Extreme Machine Learning, ELM)中得到应用。

7. 总结

在本教程中,我们了解了 salp 的群体行为及其在优化问题中的应用潜力。我们学习了其数学建模方法,并基于此构建了用于解决单目标和多目标优化问题的元启发式算法。

✅ SSA 和 MSSA 都展现出良好的搜索能力和收敛性
✅ 它们分别适用于单目标和多目标优化问题
❌ 当前仍处于研究阶段,尚未广泛应用于工业场景
⚠️ 算法性能依赖于参数设置和问题类型,需根据具体问题调优

未来随着研究的深入,相信这类算法将在更多实际问题中展现其价值。


原始标题:Salp Swarm Algorithm

» 下一篇: 生成填字游戏