基于线性规划的图最小环覆盖问题求解示例
题目描述
考虑一个带权有向图 \(G = (V, E)\),其中 \(V\) 是顶点集(\(|V| = n\)),\(E\) 是边集,每条边 \((i, j) \in E\) 有一个非负权重 \(c_{ij}\)。最小环覆盖问题要求找到一组顶点不相交的有向环,使得每个顶点恰好被一个环覆盖,且所有环的权重之和最小。该问题可转化为线性规划问题求解。
解题过程
- 问题建模
定义决策变量 \(x_{ij} \in \{0, 1\}\):若边 \((i, j)\) 被选入环覆盖,则 \(x_{ij} = 1\);否则为 0。目标函数为最小化总权重:
\[ \min \sum_{(i,j) \in E} c_{ij} x_{ij}. \]
约束条件包括:
- 每个顶点的出度为1:对任意 \(i \in V\),\(\sum_{j: (i,j) \in E} x_{ij} = 1\)。
- 每个顶点的入度为1:对任意 \(j \in V\),\(\sum_{i: (i,j) \in E} x_{ij} = 1\)。
- 避免子环(Subtour Elimination):需添加约束确保解不包含多个环。例如,对任意非空真子集 \(S \subset V\),要求 \(\sum_{i \in S, j \notin S} x_{ij} \geq 1\)。
- 线性规划松弛
将整数约束 \(x_{ij} \in \{0,1\}\) 松弛为 \(0 \leq x_{ij} \leq 1\),得到线性规划模型:
\[ \begin{aligned} \min \quad & \sum_{(i,j) \in E} c_{ij} x_{ij} \\ \text{s.t.} \quad & \sum_{j: (i,j) \in E} x_{ij} = 1, \quad \forall i \in V, \\ & \sum_{i: (i,j) \in E} x_{ij} = 1, \quad \forall j \in V, \\ & \sum_{i \in S, j \notin S} x_{ij} \geq 1, \quad \forall S \subset V, S \neq \emptyset, \\ & 0 \leq x_{ij} \leq 1. \end{aligned} \]
子环消除约束数量指数级增长,需通过割平面法动态添加。
-
求解步骤
- 步骤1:求解忽略子环消除约束的松弛问题(即指派问题)。若解为单个环,则已是最优解。
- 步骤2:若解包含多个环,检查每个连通分量(环)对应的顶点集 \(S\)。对每个满足 \(\sum_{i \in S, j \notin S} x_{ij} = 0\) 的 \(S\),添加割平面约束 \(\sum_{i \in S, j \notin S} x_{ij} \geq 1\)。
- 步骤3:重新求解线性规划,重复步骤2直到得到单个环覆盖。
- 步骤4:由于模型是整数规划的全单模矩阵,线性规划松弛的解自动为整数解,即 \(x_{ij} \in \{0,1\}\)。
-
实例演示
设图 \(G\) 有4个顶点,边权重矩阵为:
\[ c = \begin{bmatrix} \infty & 2 & 3 & 1 \\ 1 & \infty & 4 & 2 \\ 2 & 3 & \infty & 5 \\ 4 & 1 & 2 & \infty \end{bmatrix} \]
(对角线为 \(\infty\) 表示无自环)。
- 忽略子环约束,求解指派问题得解:环 \(1 \to 4 \to 2 \to 1\) 和环 \(3 \to 3\)。
- 添加割平面:对子集 \(S = \{3\}\),约束 \(x_{3,1} + x_{3,2} + x_{3,4} \geq 1\) 被违反(当前 \(\sum_{i \in S, j \notin S} x_{ij} = 0\))。
- 重新求解后得到最优环覆盖:\(1 \to 4 \to 3 \to 2 \to 1\),总权重为 \(1 + 2 + 3 + 1 = 7\)。
关键点
- 子环消除约束需动态生成,避免枚举所有子集。
- 全单模性保证线性规划松弛的解为整数,无需分支定界。
- 该问题本质是寻找最小权重的完美匹配在环上的推广。