基于线性规划的图最小反馈边集问题的线性规划松弛与舍入算法求解示例
1. 问题描述
考虑一个有向图 \(G = (V, E)\)。一个反馈边集 是指一个边的子集,如果将其从图中移除,剩余的图将不包含任何有向环(即变为一个有向无环图,DAG)。我们的目标是寻找一个最小的反馈边集,即包含边数最少的反馈边集。这是一个经典的NP难优化问题。在本示例中,我们将展示如何通过线性规划松弛与舍入算法,为加权最小反馈边集问题(每条边有一个移除成本,目标是使移除边的总成本最小)设计一个近似算法。
输入:
- 有向图 \(G = (V, E)\),其中 \(n = |V|\), \(m = |E|\)。
- 每条边 \(e \in E\) 有一个非负权重(移除成本) \(w(e)\)。
- 目标:选择一个边的子集 \(F \subseteq E\),使得 \(G' = (V, E \setminus F)\) 是无环的,且最小化 \(\sum_{e \in F} w(e)\)。
输出:
- 一个反馈边集 \(F\),以及其总成本。
2. 整数规划建模
首先,为每条边 \(e\) 引入一个二进制决策变量:
\[x_e = \begin{cases} 1, & \text{如果边 $ e $ 被选中移除(即在反馈边集 $ F $ 中)}, \\ 0, & \text{否则}. \end{cases} \]
对于有向无环图(DAG),其顶点可以被赋予一个拓扑顺序,使得所有边都从序号较小的顶点指向序号较大的顶点。因此,如果 \(G\) 是一个 DAG,则存在一个函数 \(\pi: V \to \{1, 2, \dots, n\}\),使得对于每条边 \((u, v) \in E\),有 \(\pi(u) < \pi(v)\)。反之,如果存在这样一个函数,则图是无环的。
然而,为了构建线性规划,我们利用一个等价条件:一个图是无环的当且仅当它的边集合可以表示为若干个链(全序)的并的补集。但这不直接。更常用的一种线性规划建模方法是割条件。
思路: 在一个DAG中,对于任意顶点集合 \(S \subseteq V\),不可能存在一个定向圈完全包含在 \(S\) 中。但一个更简单的建模是利用“顶点排序”的想法,但此时会引入大量变量。另一种常见方法是圈不等式:对于每个有向圈 \(C \subseteq E\),至少需要从该圈中移除一条边以破坏这个圈。因此,我们有如下整数线性规划(ILP):
ILP模型:
\[\begin{aligned} \text{最小化} \quad & \sum_{e \in E} w(e) x_e \\ \text{满足} \quad & \sum_{e \in C} x_e \geq 1, \quad \forall \text{ 有向圈 } C \subseteq E, \\ & x_e \in \{0, 1\}, \quad \forall e \in E. \end{aligned} \]
解释:约束条件表示每个有向圈至少包含一条被选中的边(即至少移除一条边来破坏这个圈)。这个模型的可行解正好对应了反馈边集。
3. 线性规划松弛
由于圈的数量是指数级的,我们无法直接求解这个ILP。但我们可以考虑其线性规划松弛,并将变量松弛为连续变量:
\[\begin{aligned} \text{最小化} \quad & \sum_{e \in E} w(e) x_e \\ \text{满足} \quad & \sum_{e \in C} x_e \geq 1, \quad \forall \text{ 有向圈 } C \subseteq E, \\ & 0 \leq x_e \leq 1, \quad \forall e \in E. \end{aligned} \]
这个线性规划仍然有指数多个约束(每个圈一个),但我们可以通过分离问题来在多项式时间内求解它,因为存在一个高效算法可以在给定一个解 \(x\) 时,判断是否满足所有圈不等式,或者找到一个不满足的圈。具体地,我们可以将每条边 \(e\) 的权重视为 \(x_e\),然后在图中检查是否存在一个圈,其总“长度”小于1。这可以通过在修改后的图中寻找负圈来等价实现,可以使用Bellman-Ford算法。因此,我们可以使用椭球法或内点法结合分离Oracle在多项式时间内求解这个线性规划。
设 \(x^*\) 为线性规划松弛的最优解,其目标值为 \(\text{OPT}_{LP}\)。显然有 \(\text{OPT}_{LP} \leq \text{OPT}\),其中 \(\text{OPT}\) 是原整数规划的最优值。
4. 舍入算法
我们使用一个简单的随机舍入策略,然后通过去随机化得到确定性算法。
随机舍入:
- 独立地对每条边 \(e \in E\) 进行如下操作:以概率 \(p_e = \min\{1, \alpha \cdot x^*_e\}\) 将边 \(e\) 选入反馈边集 \(F\),其中 \(\alpha > 0\) 是一个待定的缩放因子(通常与近似比有关)。
- 输出 \(F\)。
分析:我们需要保证输出的 \(F\) 确实是一个反馈边集(即移除 \(F\) 后的图是无环的),并分析期望成本。
- 可行性:我们需要证明,在舍入后,以高概率(或至少正概率)得到的图 \(G \setminus F\) 是无环的。更严格地说,我们需要保证每个圈 \(C\) 至少有一条边被选中。对于固定的圈 \(C\),其所有边都不被选中的概率是:
\[ \prod_{e \in C} (1 - p_e) \leq \prod_{e \in C} e^{-p_e} = \exp\left(-\sum_{e \in C} p_e\right) \leq \exp\left(-\alpha \sum_{e \in C} x^*_e\right) \leq e^{-\alpha}, \]
因为 \(\sum_{e \in C} x^*_e \geq 1\)。所以圈 \(C\) 被破坏(即至少有一条边被选中)的概率至少为 \(1 - e^{-\alpha}\)。但图中有指数多个圈,我们不能直接应用联合界。为了处理这个问题,我们可以注意到,如果算法以正概率输出一个反馈边集,则我们可以通过重复执行来得到一个可行解。但实际上,我们可以采用一种更强的舍入方法。
改进的舍入:注意到线性规划的解 \(x^*\) 实际上定义了一个度量。我们可以利用“最长圈”的构造。一个经典方法(基于Garg等人)是将 \(x^*\) 解释为概率,然后反复移除边直到无环。但更简单且能达到 \(O(\log n \log \log n)\) 近似比的方法是使用多重舍入。
这里我们展示一个简单的确定性舍入,基于圈覆盖的分解。
算法步骤:
- 求解线性规划松弛,得到最优解 \(x^*\)。
- 将每条边 \(e\) 的权重(成本)设为 \(w(e)\),但构造一个新图,其中边 \(e\) 的“长度”为 \(x^*_e\)。
- 重复以下过程,直到图变为无环:
a. 找到图中的一个有向圈 \(C\)(可以使用DFS)。
b. 对于圈 \(C\) 中的每条边 \(e\),计算“性价比” \(w(e) / x^*_e\)(如果 \(x^*_e = 0\),则将其视为无穷大,但这种情况不会发生在最优解中,除非 \(w(e) = 0\))。
c. 选择圈 \(C\) 中性价比最高的边 \(e\)(即 \(w(e) / x^*_e\) 最小),将其加入反馈边集 \(F\)。
d. 从图中移除边 \(e\)。 - 输出 \(F\)。
理论保证:可以证明,这个算法是一个 \(O(\log n \log \log n)\)-近似算法。但为了简化,我们考虑一个更简单的分析:每次我们选择一个圈,并移除其中一条边,使得“成本 per LP value”最小。通过势函数分析,可以证明总成本不超过 \(O(\log n) \cdot \text{OPT}_{LP}\)。
5. 示例演算
考虑一个小型有向图 \(G\):
- 顶点: \(V = \{1, 2, 3, 4\}\)。
- 有向边: \(E = \{ a:1\to2, b:2\to3, c:3\to1, d:2\to4, e:4\to2 \}\)。
- 边权重: \(w(a)=2, w(b)=3, w(c)=1, w(d)=4, w(e)=5\)。
步骤1:列出所有有向圈。
圈1: \(1\to2\to3\to1\) (边 \(a, b, c\))。
圈2: \(2\to4\to2\) (边 \(d, e\))。
步骤2:建立整数规划。
最小化 \(2x_a + 3x_b + 1x_c + 4x_d + 5x_e\),
满足:
\[\begin{aligned} x_a + x_b + x_c &\geq 1 \quad \text{(圈1)}, \\ x_d + x_e &\geq 1 \quad \text{(圈2)}, \\ x_a, x_b, x_c, x_d, x_e \in \{0,1\}. \end{aligned} \]
步骤3:线性规划松弛。
松弛为 \(0 \leq x_e \leq 1\)。求解此线性规划(可手动推理)。
由于两个圈不相交,我们可以独立优化。对于圈1,选择 \(x_c=1\) 成本最低(权重1),则 \(x_a=0, x_b=0\)。对于圈2,选择 \(x_d=1\) 成本最低(权重4),则 \(x_e=0\)。但松弛下,我们可以取分数解:在圈1中, \(x_a=0.5, x_b=0, x_c=0.5\) 满足 \(x_a+x_b+x_c=1\),成本 \(2\times0.5 + 1\times0.5 = 1.5\),优于纯整数解(成本1)。但注意约束是大于等于1,所以我们可以让 \(x_c=1\) 而 \(x_a=x_b=0\),成本1,这就是整数最优。所以线性规划最优解就是整数解: \(x_c=1, x_d=1\),其他为0。目标值 \(1+4=5\)。
步骤4:算法应用。
使用上述确定性舍入算法:
- 初始图有圈1和圈2。
- 找到圈1,计算性价比: \(a: 2/1=2\)(假设解中 \(x_a=1\) 但这里实际最优解是分数?等一下,我们先用分数解示例)。
假设我们故意不用最优整数解,而是用另一个分数解来演示舍入。例如,取 \(x_a=0.6, x_b=0, x_c=0.4, x_d=0.7, x_e=0.3\)。验证:圈1和=1,圈2和=1,满足。目标值= \(2*0.6+1*0.4+4*0.7+5*0.3 = 1.2+0.4+2.8+1.5=5.9\)。
现在运行算法:
- 找圈,比如圈1。性价比: \(a: 2/0.6 \approx 3.33, c: 1/0.4=2.5\)。选 \(c\)(因为性价比最小)。
- 移除边 \(c\)。此时圈1被破坏,但图还剩边 \(a,b,d,e\),检查是否有新圈:现有圈 \(2\to4\to2\) 仍然存在(边 \(d,e\))。
- 处理圈2:性价比: \(d: 4/0.7\approx5.71, e: 5/0.3\approx16.67\)。选 \(d\)。
- 移除边 \(d\)。图变为无环(剩下边 \(a,b,e\),其中 \(a,b\) 是链,\(e\) 是孤立反向边但不成圈)。
- 反馈边集 \(F=\{c, d\}\),总成本=1+4=5。
这个结果正好是整数最优解。
6. 总结
- 最小反馈边集问题可以通过圈不等式的整数规划建模。
- 线性规划松弛虽然约束多,但可通过分离Oracle在多项式时间求解。
- 通过适当的舍入策略(如基于性价比的贪心移除),可以得到一个近似解。理论上有 \(O(\log n \log \log n)\) 的近似比,但实际中通常表现更好。
- 本例展示了一个简单有向图的求解过程,说明了从建模、松弛到舍入的全过程。