基于线性规划的图最大独立集问题的原始-对偶近似算法求解示例
题目描述
给定一个无向图 \(G = (V, E)\),其中 \(V\) 是顶点集,\(E\) 是边集。图的一个独立集是指一个顶点子集 \(S \subseteq V\),使得 \(S\) 中任意两个顶点之间都没有边相连。最大独立集问题要求找到一个顶点数最多的独立集。这个问题是NP难的,但我们可以通过线性规划松弛和原始-对偶方法设计一个近似算法,得到一个较小的独立集,并证明其近似比。本题将展示如何基于线性规划模型,通过原始-对偶技巧构造一个近似解,并分析其性能保证。
解题过程
- 整数规划建模
首先,为每个顶点 \(v \in V\) 引入一个0-1变量 \(x_v\):若顶点 \(v\) 被选入独立集,则 \(x_v = 1\),否则为0。独立集要求任意一条边 \((u,v) \in E\) 的两个端点不能同时被选,即 \(x_u + x_v \leq 1\)。目标是最大化所选顶点总数。整数规划模型为:
\[ \begin{aligned} \max \quad & \sum_{v \in V} x_v \\ \text{s.t.} \quad & x_u + x_v \leq 1, \quad \forall (u,v) \in E, \\ & x_v \in \{0,1\}, \quad \forall v \in V. \end{aligned} \]
- 线性规划松弛
将整数约束松弛为连续约束,得到线性规划(原始问题):
\[ \begin{aligned} \max \quad & \sum_{v \in V} x_v \\ \text{s.t.} \quad & x_u + x_v \leq 1, \quad \forall (u,v) \in E, \\ & x_v \geq 0, \quad \forall v \in V. \end{aligned} \]
注意,约束 \(x_v \leq 1\) 是冗余的(因为对于每条边 \((u,v)\),有 \(x_u, x_v \leq 1\)),故省略。
- 构造对偶问题
为每条边 \((u,v) \in E\) 引入对偶变量 \(y_{uv} \geq 0\)。根据线性规划对偶理论,得到对偶问题:
\[ \begin{aligned} \min \quad & \sum_{(u,v) \in E} y_{uv} \\ \text{s.t.} \quad & \sum_{u: (u,v) \in E} y_{uv} \geq 1, \quad \forall v \in V, \\ & y_{uv} \geq 0, \quad \forall (u,v) \in E. \end{aligned} \]
对偶约束的含义是:每个顶点 \(v\) 关联的边上的对偶变量之和至少为1。
-
原始-对偶近似算法设计
算法的核心思想是同步构造原始整数解(独立集)和对偶可行解,并利用互补松弛条件指导构造过程。步骤如下:- 初始化:设原始解 \(x_v = 0\)(所有顶点未选),对偶解 \(y_{uv} = 0\)(所有边未赋权),独立集 \(S = \emptyset\)。
- 迭代增加对偶变量:逐步增加某些边上的对偶变量 \(y_{uv}\),直到每个顶点 \(v\) 都满足对偶约束 \(\sum_{u: (u,v) \in E} y_{uv} \geq 1\)。具体地,每次选择一个未被“覆盖”的顶点 \(v\)(即关联边的对偶变量和小于1),同时增加与 \(v\) 关联的所有边 \((u,v)\) 上的对偶变量 \(y_{uv}\),直到某个关联边的和对偶变量和达到1。记录这些顶点为“被覆盖”。
- 构造原始解:在增加对偶变量的过程中,如果一条边 \((u,v)\) 的对偶变量 \(y_{uv}\) 变为正数(即被“激活”),则检查 \(u\) 和 \(v\) 是否已加入独立集。若两个端点都未加入,则任选其中一个(如编号较小的)加入独立集 \(S\),并设对应的原始变量 \(x_v = 1\)。这保证了不会同时选择一条边的两个端点。
- 终止条件:当所有顶点都被覆盖(对偶约束满足)时停止。此时 \(S\) 是一个可行独立集,对偶解 \(y\) 是可行的。
-
算法伪代码
输入:无向图 G=(V,E) 输出:独立集 S ⊆ V 1. 初始化:S = ∅, y_{uv}=0 ∀(u,v)∈E, covered(v)=false ∀v∈V 2. while 存在顶点 v 满足 covered(v)=false: 3. 选择这样一个顶点 v 4. 增加与 v 关联的所有边 (u,v) 上的 y_{uv},直到 ∑_{u:(u,v)∈E} y_{uv} = 1 5. 标记 covered(v)=true 6. 对于每条边 (u,v) 满足 y_{uv} 刚刚变为正数: 7. 如果 u∉S 且 v∉S: 8. 将 min(u,v) 加入 S # 选择编号较小的顶点 9. 返回 S -
近似比分析
设算法得到的独立集为 \(S\),对偶解为 \(y\)。由算法构造可知:- 对偶解 \(y\) 是可行的,因此对偶目标值 \(D = \sum_{e \in E} y_e\) 是对偶问题的一个可行解值。
- 原始整数解的目标值 \(P = |S| = \sum_{v \in S} 1\)。
对于每个被选入 \(S\) 的顶点 \(v\),在算法过程中,当 \(v\) 被覆盖时(对应边对偶变量和达到1),与 \(v\) 关联的边中至少有一条的对偶变量被增加。但由于独立集的性质,每条边至多只有一个端点在 \(S\) 中,因此每条边 \(e=(u,v)\) 的对偶变量 \(y_e\) 最多被“计入”一次(当 \(u\) 或 \(v\) 被覆盖时)。由此可得:
\[ P = |S| \geq \sum_{e \in E} y_e = D. \]
由弱对偶定理,原始线性规划的最优值 \(OPT_{LP} \leq D\),而整数最优解 \(OPT_{IP} \leq OPT_{LP}\),因此:
\[ |S| \geq D \geq OPT_{LP} \geq \frac{1}{2} \cdot OPT_{IP}. \]
最后一个不等式是因为对于最大独立集问题,线性规划松弛的最优值最多是整数最优值的2倍(例如,在三角形图中,线性规划最优值为1.5,整数最优值为1)。因此算法得到的独立集大小至少是 \(OPT_{IP}\) 的 \(1/2\),即这是一个2-近似算法。
- 示例演示
考虑一个简单路径图 \(V=\{1,2,3\}\),边为 \((1,2),(2,3)\)。运行算法:- 初始化:所有 \(y_e=0\),\(S=\emptyset\)。
- 选未覆盖顶点1,增加 \(y_{12}\) 直到1,标记顶点1覆盖。边 \((1,2)\) 激活,将顶点1加入 \(S\)。
- 选未覆盖顶点2,但顶点2已关联的 \(y_{12}=1\),已满足覆盖条件,直接标记覆盖。
- 选未覆盖顶点3,增加 \(y_{23}\) 直到1,标记顶点3覆盖。边 \((2,3)\) 激活,但顶点2已在 \(S\) 中,顶点3不加入。
最终 \(S=\{1\}\),大小1。最优独立集可为 \(\{1,3\}\) 大小2,近似比1/2,符合理论分析。
这个算法展示了如何利用原始-对偶框架为NP难问题设计简单且理论保证的近似解,无需直接求解线性规划。