1. 简介

在本篇文章中,我们将深入解析禁忌搜索(Tabu Search, TS)算法。这是一种用于解决组合优化问题的局部搜索元启发式算法。TS 的核心思想是通过引入“禁忌机制”来避免局部搜索过程中常见的陷入局部最优和循环问题。

2. 禁忌搜索与优化问题

优化方法通常分为精确算法近似算法两大类。而元启发式算法(Metaheuristics)是近似算法中非常重要的一类,常用于解决复杂优化问题。

常见的元启发式算法包括:

  • 遗传算法(Genetic Algorithm)
  • 蚁群优化(Ant Colony Optimization)
  • 粒子群优化(PSO)
  • 模拟退火(Simulated Annealing)

Tabu Search 属于局部搜索元启发式算法,专门用于求解组合优化问题(Combinatorial Optimization Problems),例如旅行商问题(TSP)、作业车间调度等。

2.1 局部搜索的局限性

局部搜索的基本思路是从一个初始解出发,搜索其邻域中的更优解,并不断迭代,直到满足停止条件或找到最优解。

但它存在两个明显问题:

陷入局部最优或平台区:搜索容易停留在局部最优解或目标函数值不变的区域
循环问题(Cycling):反复访问相同的解或解集合,导致无法继续探索

如下图所示,即使在单维搜索空间中,也可能出现这些问题:

local search

Tabu Search 正是为了解决这些问题而设计的。

3. Tabu Search 的核心要素

Tabu Search 在每次迭代中评估当前解的邻域样本,并选择其中最优的解作为下一步的起点,即使它比当前解更差。这种机制帮助算法跳出局部最优。

其核心机制包括:

  • 禁忌表(Tabu List)
  • 邻域定义(Neighborhood)
  • 期望准则(Aspiration Criteria)

3.1 禁忌表(Tabu List)

Tabu Search 每次迭代都会检查并更新禁忌表。禁忌表中包含的是被禁止访问的解,通常是最近访问过的解。

  • 如果一个解在禁忌表中停留超过预设的迭代次数 \ell,它将被移除
  • 禁忌表中也可以包含禁忌规则(Tabu Rules),比如某些特定操作或状态应被禁止

⚠️ 注意:一个解被标记为“禁忌”并不意味着它一定被访问过,它可能因为触发了某些规则而被禁止访问。

3.2 邻域(Neighborhood)

对于某个解 s,其邻域 N(s, k) 表示在第 k 次迭代中,与 s 邻近的解集合。

举个例子:

  • 可以定义 N(s, k) 为所有与 s 距离不超过 Delta(k) 的解
  • 如果 Delta(k) 随迭代变化,那么邻域是自适应的;否则它是固定的

3.3 期望准则(Aspiration Criteria)

期望准则是用于解除某个解的禁忌状态的规则。例如:

  • 如果某个解的目标函数值优于当前迭代中所有其他解,那么即使它在禁忌表中,也可以被选中

我们用 a(k, s) 来表示第 k 次迭代中解 s 是否满足期望准则。

Tabu Search 是否选择一个解取决于以下两个条件之一:

  • 该解不在禁忌表中 ✅
  • 该解虽然在禁忌表中,但满足期望准则 ✅

4. 算法伪代码

设目标函数为 f,最大迭代次数为 MaxIter,则 Tabu Search 的伪代码如下:

algorithm TabuSearch(S, maxIter, f, neighborhoods, aspirationCriteria):
    // S: 搜索空间
    // maxIter: 最大迭代次数
    // f: 目标函数
    // neighborhoods: 邻域定义
    // aspirationCriteria: 期望准则

    s ← 初始解
    s* ← s  // 当前最优解
    k ← 1
    T ← 空禁忌表

    while k ≤ maxIter:
        // 生成当前解的允许邻域 V(s, k)
        V(s, k) ← { s' ∈ N(s, k) | s' ∉ T 或 a(k, s') = true }

        // 从 V(s, k) 中选择最优解
        s ← V(s, k) 中使 f 最小的解

        // 更新全局最优解
        if f(s) < f(s*):
            s* ← s

        // 更新禁忌表和期望准则
        更新 T 和 a

        // 进入下一轮迭代
        k ← k + 1

    return s*

Tabu Search 的参数设置决定了算法在搜索过程中是更偏向集中化(Intensification)还是多样化(Diversification)。两者之间的平衡对于解决组合优化问题至关重要。

5. 总结

Tabu Search 是一种基于局部搜索的元启发式算法,通过引入禁忌机制和期望准则,有效避免了局部搜索中的局部最优和循环问题。

它的优势在于:

  • 不局限于当前最优解,允许向劣解移动
  • 通过禁忌表记忆搜索路径,防止重复搜索
  • 使用期望准则灵活解除禁忌限制,提高搜索效率

Tabu Search 广泛应用于 TSP、调度、资源分配等复杂组合优化问题中,是一种非常实用的启发式优化工具。


原始标题:Tabu Search