基于线性规划的图最小顶点覆盖问题的半定规划松弛与随机舍入算法求解示例
好的,我们来看一个图论中的经典问题——最小顶点覆盖(Minimum Vertex Cover, MVC),并探讨如何通过更强大的半定规划(Semidefinite Programming, SDP)松弛和随机舍入(Randomized Rounding) 技术来设计近似算法。
问题描述
给定一个无向图 \(G = (V, E)\),其中 \(V\) 是顶点集(|V| = n),\(E\) 是边集。一个顶点覆盖(Vertex Cover)是一个顶点子集 \(S \subseteq V\),使得图 \(G\) 中的每一条边至少有一个端点在 \(S\) 中。最小顶点覆盖问题要求找到一个顶点数最少的顶点覆盖。
这是一个经典的NP难问题。我们希望能找到一个多项式时间的算法,总能返回一个规模不超过最优解某个常数倍的顶点覆盖。这就是近似算法的目标。
解题思路
我们将采用以下步骤:
- 整数规划建模:首先将问题表述为一个0-1整数规划。
- 线性规划松弛及其局限性:将其松弛为线性规划(LP),并指出标准LP舍入算法的近似比。
- 半定规划(SDP)松弛建模:构造一个更紧的半定规划松弛。
- 求解SDP松弛:在多项式时间内求得SDP的最优解(一个向量集合)。
- 随机舍入:基于SDP解中的向量,设计一个随机舍入策略,将向量解映射回一个顶点覆盖。
- 近似比分析:证明该随机舍入算法能以高概率得到一个顶点覆盖,且其期望大小不超过最优解大小的某个倍数(近似比)。
详细解题过程
步骤1:整数规划建模
为每个顶点 \(i \in V\) 引入一个0-1变量 \(x_i\):
- \(x_i = 1\) 表示顶点 \(i\) 被选入覆盖集合 \(S\)。
- \(x_i = 0\) 表示顶点 \(i\) 未被选中。
最小顶点覆盖的整数规划(IP)模型为:
\[\begin{aligned} \min \quad & \sum_{i \in V} x_i \\ \text{s.t.} \quad & x_i + x_j \geq 1, \quad \forall (i, j) \in E \\ & x_i \in \{0, 1\}, \quad \forall i \in V \end{aligned} \]
约束 \(x_i + x_j \geq 1\) 确保对于边 \((i, j)\),至少有一个端点被选中。目标是最小化选中的顶点总数。
步骤2:线性规划松弛与标准舍入
将IP松弛为线性规划(LP),即允许 \(0 \leq x_i \leq 1\):
\[\begin{aligned} \min \quad & \sum_{i \in V} x_i \\ \text{s.t.} \quad & x_i + x_j \geq 1, \quad \forall (i, j) \in E \\ & 0 \leq x_i \leq 1, \quad \forall i \in V \end{aligned} \]
一个简单的舍入算法是:对于LP的最优解 \(x^*\),令 \(S = \{ i \in V : x_i^* \geq 0.5 \}\)。对于任何边 \((i, j)\),因为 \(x_i^* + x_j^* \geq 1\),所以 \(x_i^*\) 和 \(x_j^*\) 中至少有一个 \(\geq 0.5\),从而边被覆盖。目标值满足 \(\sum_{i \in S} 1 \leq \sum_{i \in V} 2x_i^* = 2 \cdot \text{LP-OPT}\)。由于 LP-OPT ≤ IP-OPT(最优整数解),这个算法的近似比为2。这是已知的LP松弛下最好的确定性结果。
步骤3:半定规划(SDP)松弛建模
半定规划可以编码更丰富的几何关系。我们引入一个向量变量 \(v_i \in \mathbb{R}^{n+1}\)(维度可以更高,但n+1已足够)。同时引入一个特殊的单位向量 \(v_0\)。我们要求所有向量 \(v_0, v_1, ..., v_n\) 都是单位向量(长度为1)。将整数变量 \(x_i\) 解释为向量 \(v_i\) 与 \(v_0\) 的“距离”或“角度”的一种度量。
一种聪明的编码方式是:
- 我们希望 \(x_i = 0\) 对应 \(v_i\) 与 \(v_0\) “方向一致”(内积大)。
- \(x_i = 1\) 对应 \(v_i\) 与 \(v_0\) “方向相反”(内积小)。
具体地,我们关联:\(x_i = \frac{1 - v_0 \cdot v_i}{2}\)。注意:
- 如果 \(v_i = v_0\),则 \(v_0 \cdot v_i = 1\),那么 \(x_i = 0\)。
- 如果 \(v_i = -v_0\),则 \(v_0 \cdot v_i = -1\),那么 \(x_i = 1\)。
- 由于向量是单位向量,内积在 \([-1, 1]\) 之间,所以 \(x_i \in [0, 1]\)。
如何表达边约束 \(x_i + x_j \geq 1\)?
将 \(x_i + x_j \geq 1\) 用内积表示:
\[\frac{1 - v_0 \cdot v_i}{2} + \frac{1 - v_0 \cdot v_j}{2} \geq 1 \implies 2 - (v_0 \cdot v_i + v_0 \cdot v_j) \geq 2 \implies v_0 \cdot v_i + v_0 \cdot v_j \leq 0 \]
目标函数呢?
\[\sum_{i \in V} x_i = \sum_{i \in V} \frac{1 - v_0 \cdot v_i}{2} = \frac{n}{2} - \frac{1}{2} \sum_{i \in V} v_0 \cdot v_i \]
最小化 \(\sum x_i\) 等价于最大化 \(\sum_{i \in V} v_0 \cdot v_i\)。
还需要约束所有向量是单位向量。这等价于对于所有 \(i \in \{0\} \cup V\),有 \(v_i \cdot v_i = 1\)。
于是,我们得到半定规划松弛(SDP):
\[\begin{aligned} \max \quad & \sum_{i \in V} v_0 \cdot v_i \\ \text{s.t.} \quad & v_0 \cdot v_i + v_0 \cdot v_j \leq 0, \quad \forall (i, j) \in E \\ & v_i \cdot v_i = 1, \quad \forall i \in \{0\} \cup V \end{aligned} \]
这个SDP的变量是向量 \(v_0, v_1, ..., v_n\)。它可以等价地写成一个关于半正定矩阵 \(Y\) 的标准SDP形式,其中 \(Y_{ij} = v_i \cdot v_j\)。求解SDP可以在多项式时间内完成(例如,使用内点法),我们得到一组最优的单位向量 \(\{v_i^*\}\)。
这个SDP松弛比LP更紧,因为它强制了向量间的几何关系(如三角不等式隐含的约束),这些关系在LP模型中缺失。
步骤4:随机舍入算法(基于SDP解)
我们现在有一组单位向量 \(v_0^*, v_1^*, ..., v_n^*\) 满足SDP约束。关键思想:利用向量间的几何关系(夹角)来指导随机选择。
一个非常著名的随机舍入策略是超平面舍入(Random Hyperplane Rounding),由Goemans和Williamson提出:
- 在单位球面上均匀随机地选取一个方向向量 \(r\)(即 \(r\) 是一个随机单位向量)。
- 对于每个顶点 \(i \in V\),计算 \(v_i^*\) 在随机方向 \(r\) 上的“符号”:如果 \(v_i^* \cdot r \geq 0\),则将顶点 \(i\) 标记为“正侧”;否则标记为“负侧”。
- 这等价于用一个随机穿过原点的超平面 \(\{ x : r \cdot x = 0 \}\) 来划分所有向量。
- 构造候选覆盖集合 \(S\):选择所有标记为“正侧”的顶点。但这样能保证覆盖所有边吗?
- 检查边 \((i, j)\)。约束 \(v_0^* \cdot v_i^* + v_0^* \cdot v_j^* \leq 0\) 意味着这两个向量不能都“靠近” \(v_0^*\)(即与 \(v_0^*\) 有大的正内积)。但仅凭此,\(v_i^*\) 和 \(v_j^*\) 可能都落在超平面的负侧,导致边未被覆盖。
- 因此,简单的“取正侧”不行。我们需要一个不对称的策略。
一个针对顶点覆盖的改进舍入策略如下:
- 将随机超平面法与一个依赖于 \(v_0^*\) 的阈值结合起来。
- 考虑顶点 \(i\) 的“投影值” \(v_0^* \cdot v_i^*\)。回忆 \(x_i^* = (1 - v_0^* \cdot v_i^*) / 2\)。
- 我们以一定的概率将顶点 \(i\) 放入覆盖,这个概率是其LP值 \(x_i^*\) 的某个单调递增函数。一个经典方法是:
- 计算角度 \(\theta_i = \arccos(v_0^* \cdot v_i^*)\),即向量 \(v_i^*\) 与 \(v_0^*\) 的夹角。
- \(x_i^* = (1 - \cos \theta_i)/2 = \sin^2(\theta_i / 2)\)。
- 随机舍入规则:对于每个顶点 \(i\),独立地将其选入覆盖 \(S\) 的概率设为 \(\min(1, 2 \cdot x_i^*) = \min(1, 1 - \cos \theta_i)\)。
步骤5:近似比分析
我们需要证明两点:
-
可行性:算法产生的集合 \(S\) 总是一个顶点覆盖吗?由于我们的选择是独立的,一条边有可能两个端点都没被选中。但我们可以证明,对于任何边 \((i, j)\),该边未被覆盖的概率很小,并且通过简单的“补丁”可以保证覆盖。
- 边 \((i, j)\) 未被覆盖的概率是 \((1 - p_i)(1 - p_j)\),其中 \(p_i = \min(1, 1 - \cos \theta_i)\)。
- 利用边约束 \(v_0^* \cdot v_i^* + v_0^* \cdot v_j^* \leq 0\),可以推导出 \(\cos \theta_i + \cos \theta_j \leq 0\)。
- 通过分析,可以证明 \((1 - p_i)(1 - p_j) \leq \exp(- (p_i + p_j)/2)\) 或其他上界。更重要的是,我们可以证明每条边被覆盖的概率至少是某个常数(例如,可以证明至少为 \(1 - 1/e\) 或类似)。
- 一个标准的处理方法是:在独立舍入之后,检查哪些边未被覆盖,然后将其两个端点都加入 \(S\)。这最多使集合大小加倍。更精巧的分析(如条件概率法,即去相关性)可以直接得到一个期望意义上的覆盖而不需要事后修补。
-
近似比:算法输出覆盖的期望大小 \(\mathbb{E}[|S|]\) 与SDP最优值(进而与整数最优值IP-OPT)的关系。
- 在舍入中,顶点 \(i\) 被选中的期望概率是 \(p_i = \min(1, 1 - \cos \theta_i)\)。
- 注意,当 \(\theta_i\) 较大时,\(p_i\) 可能大于 \(2x_i^*\),但分析需要建立 \(p_i\) 和 \(x_i^*\) 的联系。
- 一个核心的近似比分析依赖于函数 \(F(\theta) = \min(1, 1 - \cos \theta)\) 与 \((1 - \cos \theta)/2\) 的比值。即比较舍入概率 \(p_i\) 与SDP/LP值 \(x_i^*\) 的关系。
- 可以证明,对于所有满足边约束的 \(\theta_i, \theta_j\),存在一个常数 \(\alpha \approx 1.138\)(即 \(2 - \Theta(1/\sqrt{\log n})\) 的极限改进),使得算法的期望代价与SDP最优值之比不超过 \(\alpha\)。
- 更具体地,Goemans和Williamson在1995年的里程碑工作中,针对最大割问题给出了0.878的近似比。对于最小顶点覆盖,Kleinberg和Goemans等人利用SDP松弛和随机舍入,将近似比从2改进到了 2 - Θ(1/√log n),这是一个渐进意义上的改进,虽然对于固定n,比2小一个很小的量,但在理论上打破了“2的屏障”。后续有更复杂的算法能达到更好的常数近似比(如~1.5)。
总结
我们探讨了最小顶点覆盖问题的一个高级求解框架:
- 整数规划模型清晰地定义了问题。
- 线性规划松弛提供了简单的2-近似算法。
- 半定规划(SDP)松弛通过将变量提升到向量空间,编码了更强的几何约束,从而得到了比LP更紧的松弛。
- 随机舍入算法(如结合超平面舍入和概率映射)巧妙地利用SDP解中的向量夹角信息,以一定的概率选择顶点。
- 近似比分析表明,基于SDP的算法其期望性能比优于经典的LP舍入算法,理论上能获得小于2的近似比,展示了半定规划和随机舍入技术在近似算法设计中的强大能力。
这个示例说明了如何将组合优化问题“提升”到连续的向量空间,利用更强大的数学工具(SDP)获得更好的松弛,再通过概率技巧将其拉回离散解,是现代近似算法设计的典范。