基于线性规划的图最小直径生成树问题求解示例
题目描述:
给定一个无向连通图 \(G = (V, E)\),其中 \(|V| = n\) 个顶点,\(|E| = m\) 条边,以及每条边 \(e = (u, v) \in E\) 的非负长度 \(w_e\)。图的直径定义为图中任意两顶点之间最短路径长度的最大值。目标是从图中选出一棵生成树(覆盖所有顶点的连通无圈子图),使得该生成树的直径最小。我们需要构建线性规划模型来求解该问题,或通过线性规划松弛与舍入等技巧设计近似算法。
解题过程:
-
问题理解
最小直径生成树(Minimum Diameter Spanning Tree, MDST)是经典组合优化问题。图的直径由最远顶点对的最短路径决定。在生成树中,直径是树上两叶子节点之间的最长路径长度。直接求解是 NP 难问题,但可通过线性规划松弛得到近似解。常见思路:先猜测直径上界 \(D\),用线性规划检验是否存在直径不超过 \(D\) 的生成树。 -
建模关键思路
- 设图中任意两点间的最短路径长度已通过 Floyd-Warshall 等算法预先计算,记为 \(d_{uv}\)。
- 猜测一个直径上界 \(D\)。我们需要判断:是否存在一棵生成树,其直径 ≤ \(D\)?
- 转化为:是否存在一个中心顶点 \(r\),使得生成树中所有顶点到 \(r\) 的距离 ≤ \(D/2\)?
(事实:任何树的直径中,存在一个中心点(可能是边或点),使得所有顶点到该中心的距离 ≤ 直径/2。对点中心而言,半径 ≤ 直径/2) - 但中心点未知。可对每个顶点 \(r\) 分别判断是否存在以 \(r\) 为中心、半径 ≤ \(D/2\) 的生成树。若某个 \(r\) 存在,则原问题有解。
-
对固定中心 \(r\) 和上界 \(D\) 的线性规划模型
我们需要选择生成树的边,使得:- 图连通且选 \(n-1\) 条边(生成树条件)。
- 树上每个顶点 \(v\) 到 \(r\) 的距离 ≤ \(D/2\)。
但生成树条件需整数约束,我们先松弛为连通性条件:从 \(r\) 到每个顶点 \(v\) 存在一条路径。可用多商品流或割约束建模。
变量:
- 对每条边 \(e \in E\),\(x_e \in [0, 1]\) 表示边 \(e\) 是否被选中。
- 对每个顶点 \(v\),定义从 \(r\) 到 \(v\) 的路径长度变量 \(\ell_v\)(表示树上从 \(r\) 到 \(v\) 的距离)。
约束:
- 连通性:对任意非空集合 \(S \subset V\),若 \(r \notin S\),则至少有一条选中的边从 \(S\) 外进入 \(S\)。
\[ \sum_{e \in \delta(S)} x_e \ge 1, \quad \forall S \subset V, r \notin S, S \neq \emptyset \]
其中 $ \delta(S) $ 是 $ S $ 的割边集。
- 距离约束:对每条边 \(e = (u,v)\),若选中(\(x_e = 1\)),则 \(|\ell_u - \ell_v| = w_e\),但线性化需用不等式:
\[ \ell_v \le \ell_u + w_e + M(1 - x_e) \quad \text{和} \quad \ell_u \le \ell_v + w_e + M(1 - x_e) \]
其中 $ M $ 为大数。当 $ x_e = 1 $ 时强制 $ |\ell_u - \ell_v| = w_e $;当 $ x_e = 0 $ 时约束松弛。实际上,由于我们只需要半径约束,可简化:强制每个顶点 $ v $ 的 $ \ell_v $ 是从 $ r $ 出发沿选中边到达 $ v $ 的路径长度。这可用**最短路径约束**:
\[ \ell_v \le \ell_u + w_e + M(1 - x_e), \quad \forall e=(u,v) \in E \]
\[ \ell_v \ge 0, \quad \ell_r = 0 \]
这保证了如果选中边 $ e $,则 $ \ell_v \le \ell_u + w_e $,但允许 $ \ell_v $ 小于实际路径长度(通过其他路径更短),不过因为我们只关心上界,且目标是使 $ \ell_v $ 尽可能小,所以可行。
- 半径约束:\(\ell_v \le D/2\) 对所有 \(v \in V\)。
- 生成树边数:\(\sum_{e \in E} x_e = n-1\)。
-
线性规划求解与二分搜索
- 上述模型是混合整数规划(因 \(x_e\) 应二值)。我们松弛 \(x_e \in [0,1]\) 为线性规划。
- 用二分搜索猜测最小直径 \(D_{\min}\):
- 初始化下界 \(L = 0\),上界 \(U = \max_{u,v} d_{uv}\)(原图最短路径的最大值)。
- 当 \(U - L > \epsilon\):
- 设 \(D = (L+U)/2\)。
- 对每个顶点 \(r \in V\),求解上述线性规划(松弛版),检查是否存在可行解。
- 如果存在某个 \(r\) 可行,则 \(U = D\);否则 \(L = D\)。
- 最终 \(U\) 是最小直径的近似下界(因是松弛模型)。
-
舍入得到近似生成树
得到分数解 \(x^*\) 后,如何构造整数生成树?可用随机化舍入或最小生成树(MST) 启发式:- 从分数解中提取距离估计 \(\ell_v^*\)。
- 构建新图:对每条边 \(e=(u,v)\),定义新权重 \(w'_e = |\ell_u^* - \ell_v^*|\)(近似于该边在树中带来的距离增量)。
- 求原图以 \(w'_e\) 为权重的最小生成树。
- 可以证明,该树的直径不超过 \(2 \cdot \text{OPT} + \text{小误差}\),即 2 倍最优直径的近似。
-
算法总结
- 预计算所有点对最短路径 \(d_{uv}\)。
- 二分搜索直径上界 \(D\)。
- 对每个候选中心 \(r\) 求解线性规划松弛,判断是否存在半径 ≤ \(D/2\) 的分数生成树。
- 用分数解引导构建最小生成树,得到最终解。
关键点:
- 该问题核心是将直径约束转化为到某个中心点的距离约束,从而用线性规划表达。
- 由于生成树条件难以线性化,我们松弛连通性约束并用割条件表达,结合距离不等式约束。
- 最终通过二分搜索得到直径下界,再舍入得到近似生成树。该方法是经典的线性规划舍入在图形问题中的应用,近似比通常为 2。