跳转至

Local Search

  • Local:定义邻居解
  • Search:在邻居解中搜索最优解

Neighbor Relation

  • \(S \sim S'\)\(S'\)\(S\) 的相邻解,通过 \(S\) 转化得到
  • \(N(S) = \{S' \mid S \sim S'\}\)\(S\) 的邻居解集合

Vertex Cover

给定图 \(G = (V, E)\),找到最小的顶点集合 \(S \subseteq V\),使得每条边至少有一个端点在 \(S\) 中。

初始从 \(S\) 开始,每次随机选择一个顶点 \(v \in S\),将其从 \(S\) 中移除,直到 \(S\) 不再是顶点覆盖。

The Metropolis Algorithm

每次若 \(S'\) 更优,则接受 \(S'\) 作为新的解,否则以一定概率 \(e^{-\Delta \text{cost} / (kT)}\) 接受 \(S'\)

其中 \(\Delta \text{cost} = \left| \text{cost}(S) - \text{cost}(S') \right|\)\(k, T\) 为超参数。

Hopfield Neural Network

\(G = (V, E)\) 每条边有边权,给每个点设置状态 \(s_i \in \{-1, 1\}\)

  • 如果 \(w_i < 0\),则希望两端点状态相同
  • 如果 \(w_i > 0\),则希望两端点状态不同
  • \(|w_i|\) 越大,约强调这个约束

定义:

  • \(e = (u, v)\) 是 good 的,如果 \(w_e s_u s_v < 0\),否则是 bad 的。(即满足约束时为 good)
  • \(v\) 被满足,如果:

    \[ \sum_{v: e = (u, v) \in E} w_e s_u s_v \geq 0 \]
  • 如果所有点都被满足了,那么定义这个分配是 stable 的。

State-flipping Algorithm

初始给每个点随机状态,如果当前分配不是 stable 的,则随机选择一个没有被满足的点,将其状态翻转。

Proof

评估解 \(S\) 的好坏:\(\Phi(S) = \sum_{e \text{ is good}} |w_e|\)\(\Phi(S)\) 越大越好。

翻转了一个点 \(u\) 后,原本的好边变为坏边,坏边变为好边,所以:

\[ \Phi(S') = \Phi(S) - \sum_{e: u \in e, e \text{ is good in } S} |w_e| + \sum_{e: u \in e, e \text{ is bad in } S} |w_e| \]

由于 \(u\) 是没有被满足的点,所以:

\[ \sum_{e: u \in e, e \text{ is bad}} |w_e| \geq \sum_{e: u \in e, e \text{ is good}} |w_e| \]

所以 \(\Phi(S') \geq \Phi(S)\),即每次翻转都能使得解更优。

近似比为 \(2\)\(w(A, B) \geq \frac{1}{2} w(A^*, B^*)\)