迭代局部搜索(Iterated Local Search, ILS)
迭代局部搜索在同一套局部搜索子程序上套一层外循环:从当前点先做扰动(或 kick、突变链)以离开正在收敛的吸引域,再对扰动后解做局搜直至局部最优,如此反复,使搜索在多个局部最优间迁移。思想与实现都相对单纯,是大量组合优化实践中的基线元启发式。见 元启发式总览。
与单轮局搜、VNS 的区分
- 若只做一次邻域下降直到不能改进,常停在某个局部最优。
- ILS 用「扰动 → 再局搜」在局部最优间跳跃;扰动要足够离开当前盆地、又不必是全局重采样。
- 变邻域搜索强调多类邻域与抖动/换结构;ILS 通常固定一条局搜子程序、重点在扰动与接受/重启如何配合。两者可结合(多邻域的局搜 + 不同 kick)。
记号与三模块
当前解与最优: 为外循环的当前点(多处在某局部优); 为迄今最优。目标最小化,记 。
局部搜索: 在指定邻域族上单调改进直到达到局部最优(或达到步数/时间等工程终止)。实现上即你问题上的 hill climbing、Tabu 短程、-opt 子过程等,同一套在 ILS 内复用。
扰动: 对 作随机或启发式移动若干步,不保证改善 。强度上可对照:
- 过弱:易仍落在同一吸引域、局搜白跑。
- 过强:接近「当作全新随机点」,局搜的局部性利用不足。
以能离开刚到达的谷、又不至于全程随机为宜。
外圈接受:外圈要规定的是「下一轮 从哪个点出发」。与「历史最优 如何按 维护」无必然绑定,实现里常分开写。常见取法包括:
- 接在本轮局优之后:令 ,下一扰动为 ,在局部最优之间形成马尔可夫链。
- 从全局最优扰动:,再 ,便于在迄今最好解附近再探。
- 混合或随机重启:按概率/调度在 、 或新构造可行点之间选扰动中心;长程无改进时可加大从 或随机点出发的比例。
历史最优 的更新一般仍用「若 更优则刷新」,与上列「下一轮从谁扰动」可独立定稿,主循环框里二者分别对应不同步即可。
主循环(最小化、示意框)
、 的接口与上节一致;下框用「以本轮局优为下一轮起点」的写法;若实现为「从 扰动」等,在文档与代码中统一即可。