1、学习目标

局部搜索不从全局一次性构造答案,而是从一个可行解出发,通过局部修改不断改进。它适合解空间巨大、精确算法困难、但局部改进容易定义的问题。

模块 要掌握的内容
解空间 可行解、邻域、目标函数
局部最优 邻域内无法继续改进
最大割 翻转顶点、改进割边数
终止性 目标函数单调改善
博弈连接 Nash 均衡、稳定性代价

2、局部搜索框架

1
2
3
4
从任意可行解 S 开始
while 存在邻居 S' 比 S 更好:
S = S'
return S

要定义三件事:

项目 含义
可行解 什么样的解合法
邻域 一步可以改成哪些解
改进规则 什么叫更好

局部搜索的优点是简单、通用;缺点是可能停在局部最优,而不是全局最优。

3、优化地形

可以把所有可行解想象成山地地形:

1
2
3
点 = 一个可行解
高度 = 目标函数值
边 = 两个解互为邻居

最大化问题中,局部搜索像爬山:只要附近有更高的点就走过去。最后停在一个周围都不更高的位置。

局部最优不一定全局最优:

1
附近没有更好解,不代表远处没有更好解。

4、最大割问题

给定无向图,把顶点分成两组,使跨组边数量最大。

局部搜索策略:

  1. 初始随机或任意划分。
  2. 若存在某个顶点,翻转它所在组能增加割边数,就翻转。
  3. 直到没有顶点能改善。
1
2
while exists v with gain(v) > 0:
move v to the other side

每次翻转至少让割边数增加 1,因此在无权图中一定终止。

5、最大割的近似保证

当局部搜索停止时,每个顶点跨组边数不少于同组边数。否则翻转它会增加割。

把所有顶点的不等式加起来:

1
跨组贡献 >= 同组贡献

因此当前割边数至少占总边数一半。

最优割最多是所有边,所以局部最优解至少是最优值的 1/2

1
cut >= OPT / 2

这是一个简单的 2-近似。

6、局部搜索的终止问题

局部搜索未必总是快。即使每次都改善,改善次数也可能很多。

常见处理:

方法 作用
限制迭代次数 工程上防止跑太久
随机重启 跳出坏的局部区域
模拟退火 允许偶尔接受更差解
改进阈值 小收益不再移动
更大邻域 一次做更复杂的局部修改

7、Nash 均衡

在博弈中,Nash 均衡指每个参与者在其他人策略不变时,都没有动力单方面改变策略。

这和局部最优很像:

1
2
局部最优:没有一个局部改动能改善目标函数
Nash 均衡:没有一个玩家单方面改策略能改善自己的收益

很多系统行为可以看成“个体局部优化”产生的稳定状态。

8、稳定性代价

稳定性代价关注:

1
最好的 Nash 均衡 / 全局最优

无政府代价关注:

1
最坏的 Nash 均衡 / 全局最优

它们衡量个体理性和整体效率之间的差距。比如交通路由中,每个人选自己最快路线,整体可能比统一调度更拥堵。

9、局部搜索适用场景

场景 说明
解空间巨大 全枚举不可行
可行解容易构造 任意初始解即可
邻域容易计算 能快速判断局部改进
接受近似解 不强求全局最优
工程优化 排班、聚类、布局、参数搜索

10、易错点

易错点 修正
局部最优当全局最优 局部搜索通常不能保证全局最优
没定义邻域 邻域决定算法行为
忘记证明终止 需要目标函数单调改善且有界
最大割翻转条件写反 翻转后跨边增加才移动
Nash 均衡理解成社会最优 均衡只是个体无动力改变

11、复盘清单

检查项 状态
能写出局部搜索三要素 待复盘
能解释局部最优和全局最优区别 待复盘
能手动模拟最大割翻转过程 待复盘
能证明最大割局部搜索的 1/2 保证 待复盘
能说明随机重启和模拟退火的作用 待复盘
能用局部最优类比 Nash 均衡 待复盘