跳转至

Local Search

1 Vertex Cover Problem

Metropolis 算法:该算法与梯度下降法最大的不同在于,如果新的顶点覆盖集合\(S'\)的成本更大,不会立马被放弃而是以\(e^{\frac{\Delta cost}{kT}}\)

Info

  • 匹配问题: 边集E的一个子集,这个子集中的任意两边没有共同的顶点
  • 柯尼希定理: 在任意二分图中,最大匹配的边数等于最小覆盖的顶点数

2 Hopfield Neural Networks

状态翻转算法(state-flipping)算法:

Text Only
ConfigType State_flipping() {
    Start from an arbitrary configuration S;
    while (!IsStable(S)) {
        u = GetUnsatisfied(S);
        s_u = -s_u;
    }

    return S;
}
只要这个布局不是稳定的,算法就会找出不满意点并翻转它的状态,这样就能使其变成满意点

该算法在之多\(W=\sum|w_e|\)次迭代后终止

3 Maximum Cut Problem

给定一张无向图,每条边都有正整数权重,找到一种顶点划分,值得割之间所有边的权重和最大

局部最优的划分至少是全局最优的一半,状态翻转算法在本题是一种2-近似算法

  • 能否在多项式时间内得到结果呢?

    • 一种策略是:如果算法找不到有“足够大”提升的解,那么算法就会终止迭代,称这种算法为大提升翻转(big-improvement-flip)。具体来说,该算法挑选那些能够提升至少\(\dfrac{2\varepsilon}{|V|}w(A, B)\)割值的顶点来翻转
    • 相关结论:
      • 算法中止后会返回一个割集\((A, B)\),满足:\((2 + \varepsilon)w(A, B) \ge w(A^_, B^_)\)

        • 因此该算法是一个\((2 + \varepsilon)\)-近似算法 - 该算法能够在至多\(O(\dfrac{n}{\varepsilon} \log W)\)次翻转后终止
  • 是否存在一种更好的「局部」?

    • 一个好的「局部」需要满足:
      • 解的邻居需要足够大,使得算法不会陷入局部最优解而“出不来”
      • 但解的邻居也不能太大,因为我们希望能够在有限的步数内,在邻居集中高效地寻找最优解
    • 改进方法:\(k\)翻转算法(一种启发式算法),时间复杂度为\(\Theta(n^k)\),下面来看一下执行步骤:
      • 第1步:对整个顶点集使用状态翻转算法(单顶点的翻转),此时得到的最优解为\((A_1, B_1)\),被翻转的那个顶点记为\(v_1\)
        • 时间复杂度:\(O(n)\)
      • 第k步:对尚未翻转过的顶点集使用状态翻转算法,此时得到的最优解为\((A_k, B_k)\),被翻转的顶点有\(v_1, \dots, v_k\)
        • 时间复杂度:\(O(n - k + 1)\)
      • 第n步:\((A_n, b_n) = (B, A)\)
      • 因此,划分\((A, B)\)的邻居集为\({(A_1, B_1), \dots, (A_{n - 1}, B_{n - 1})}\),时间复杂度为\(O(n^2)\)