基于线性规划的图顶点k中心问题的线性规划松弛与舍入算法求解示例
题目描述
在设施选址、网络设计与聚类分析等领域,顶点k中心问题是一个经典的NP难优化问题。其定义为:给定一个无向图 \(G=(V, E)\) ,其中 \(V\) 是顶点集,\(E\) 是边集,边 \((i, j)\) 的长度(或成本)为非负权重 \(w_{ij}\)。我们需要从 \(V\) 中精确选择k个顶点作为中心。目标是最小化任何顶点到其最近中心的距离的最大值。形式化地说,目标是:
\[\min_{S \subseteq V, |S| = k} \ \max_{v \in V} \ \min_{s \in S} \ dist(v, s) \]
其中 \(dist(v, s)\) 是顶点 \(v\) 到中心 \(s\) 的最短路径距离(在无向图中通过边权重计算)。该问题在无线网络中可建模为放置k个基站以最小化最坏情况下的用户到基站延迟,或在物流中为k个仓库选址以最小化客户的最大服务距离。
解题过程
我们采用一种基于线性规划松弛和舍入的近似算法来解决此问题。此算法具有简洁的理论保证(2-近似),即其解的目标函数值不超过最优解的2倍。
步骤1: 问题建模与整数规划形式化
- 定义决策变量:
- 设二元变量 \(y_i\) 表示顶点 \(i \in V\) 是否被选为中心(\(y_i = 1\) 表示选中)。
- 设二元变量 \(x_{ij}\) 表示顶点 \(j\) 是否被分配到中心 \(i\)(即,从 \(j\) 到其最近中心的距离是 \(dist(i, j)\),且 \(i\) 是一个中心)。
- 目标:我们希望最小化最大分配距离,记为 \(D\)。即,对于任何被分配的 \((i, j)\) 对,有 \(dist(i, j) \leq D\)。
- 约束:
- 每个顶点 \(j\) 必须被分配到一个中心。
- 只有当 \(i\) 是中心时,顶点 \(j\) 才能分配给 \(i\)。
- 恰好选择k个中心。
- 整数规划 (IP) 模型:
设 \(d_{ij} = dist(i, j)\) 是预先计算好的所有顶点对之间的最短路径距离。
引入连续变量 \(D\) 表示最大距离,则整数规划为:
\[ \begin{aligned} \min \quad & D \\ \text{s.t.} \quad & \sum_{i \in V} x_{ij} = 1, \quad \forall j \in V, \\ & x_{ij} \leq y_i, \quad \forall i, j \in V, \\ & \sum_{i \in V} y_i = k, \\ & d_{ij} x_{ij} \leq D, \quad \forall i, j \in V, \\ & x_{ij}, y_i \in \{0, 1\}, \quad D \geq 0. \end{aligned} \]
约束解释:
- 第一行:每个顶点 \(j\) 被分配到一个中心。
- 第二行:分配的前提是对应的中心被选中。
- 第三行:恰好选k个中心。
- 第四行:任何分配的距离不能超过 \(D\),因此 \(D\) 记录了最大分配距离,我们需要最小化它。
步骤2: 线性规划松弛
整数规划是NP难的。我们将其松弛为线性规划 (LP):将 \(x_{ij}, y_i \in \{0,1\}\) 替换为 \(0 \leq x_{ij}, y_i \leq 1\)。
即松弛后的线性规划为:
\[\begin{aligned} \min \quad & D \\ \text{s.t.} \quad & \sum_{i \in V} x_{ij} = 1, \quad \forall j \in V, \\ & x_{ij} \leq y_i, \quad \forall i, j \in V, \\ & \sum_{i \in V} y_i = k, \\ & d_{ij} x_{ij} \leq D, \quad \forall i, j \in V, \\ & 0 \leq x_{ij} \leq 1, \quad 0 \leq y_i \leq 1, \quad D \geq 0. \end{aligned} \]
求解这个线性规划,得到最优解 \((x^*, y^*, D^*)\)。
关键性质:由于是松弛,\(D^*\) 是原整数规划最优值的一个下界,即 \(D^* \leq OPT\),其中 \(OPT\) 是原问题(顶点k中心)的最优最大距离。
步骤3: 构造中心集合的舍入算法
线性规划的解是分数解,我们需要构造一个整数解(即选择k个中心并分配顶点)。
一个经典方法是基于距离阈值的贪心聚类法,步骤如下:
- 设 \(t = 0\)。
- 初始化未覆盖顶点集合 \(U = V\),中心集合 \(S = \emptyset\)。
- 当 \(|S| < k\) 且 \(U \neq \emptyset\) 时:
a. 从 \(U\) 中任选一个顶点 \(v\) 作为“种子”。
b. 将 \(v\) 加入中心集合 \(S\)(即 \(v\) 被选为中心)。
c. 从 \(U\) 中移除所有满足 \(dist(v, u) \leq 2D^*\) 的顶点 \(u\)(即,任何距离 \(v\) 不超过 \(2D^*\) 的顶点都被视为“覆盖”,不再作为候选种子)。 - 如果迭代结束时 \(|S| < k\),可以任意添加顶点到 \(S\) 直到有k个中心。
直观解释:算法以 \(2D^*\) 为半径进行“打包”,确保选择的中心之间的距离至少为 \(2D^*\) 以防止覆盖区域重叠过多,同时每个被覆盖的顶点离其种子的距离不超过 \(2D^*\)。这保证了每个顶点到最终中心集合的距离有界。
步骤4: 分配顶点与近似比分析
-
对于任意顶点 \(j \in V\),我们要证明存在一个中心 \(s \in S\) 使得 \(dist(j, s) \leq 2D^*\)。
-
证明思路:考虑线性规划的最优分数解 \((x^*, y^*)\)。对每个顶点 \(j\),有 \(\sum_{i} x^*_{ij} = 1\),且 \(x^*_{ij} > 0\) 的那些 \(i\) 满足 \(d_{ij} \leq D^*\)(由约束 \(d_{ij} x^*_{ij} \leq D^*\) 和 \(x^*_{ij} > 0\) 可得 \(d_{ij} \leq D^* / x^*_{ij} \leq D^* / x^*_{ij}\),注意 \(x^*_{ij} \leq 1\),但更严格地,从 \(d_{ij} x^*_{ij} \leq D^*\) 和 \(x^*_{ij} > 0\) 可推出 \(d_{ij} \leq D^* / x^*_{ij}\)。为了得到确定界,我们利用另一个事实:存在一个顶点 \(i\) 使得 \(y^*_i > 0\) 且 \(d_{ij} \leq D^*\),因为分数解中 \(j\) 的分配量来自中心 \(i\) 且 \(x^*_{ij} \leq y^*_i\),但 \(d_{ij} \leq D^*\) 必须成立,否则 \(x^*_{ij} = 0\)。实际上,线性规划约束 \(d_{ij} x^*_{ij} \leq D^*\) 和 \(\sum_i x^*_{ij} = 1\) 意味着对每个 \(j\),所有满足 \(x^*_{ij} > 0\) 的 \(i\) 都有 \(d_{ij} \leq D^*\)(因为 \(x^*_{ij} > 0\) 且 \(d_{ij} x^*_{ij} \leq D^*\),所以 \(d_{ij} \leq D^* / x^*_{ij}\),但 \(D^* / x^*_{ij} \geq D^*\) 可能大于 \(D^*\),这不能直接给出 \(d_{ij} \leq D^*\))。
这里需要更精确的分析:我们利用约束 \(d_{ij} x^*_{ij} \leq D^*\) 和 \(0 < x^*_{ij} \leq 1\),可推出 \(d_{ij} \leq D^* / x^*_{ij}\)。但 \(D^* / x^*_{ij}\) 可能很大。为了得到近似比,我们不需要对每个正 \(x^*_{ij}\) 的 \(i\) 都满足 \(d_{ij} \leq D^*\),而是利用以下构造性论证:考虑算法选择的种子顶点 \(v\)(在步骤3a中)。由于在分数解中,v 被分配到某些中心(即存在 i 使 \(x^*_{iv} > 0\)),则存在某个中心 i 满足 \(d_{iv} \leq D^*\) 且 \(y^*_i > 0\)。
但更直接的证明是:在算法执行过程中,当选择一个种子 v 时,所有距离 v 在 \(2D^*\) 内的顶点都被移除。对于任意顶点 j,我们要证明存在某个被选的中心 s 使得 \(dist(j, s) \leq 2D^*\)。
考虑 j 第一次被覆盖的时刻:此时存在一个种子 v 被选为中心,且 \(dist(j, v) \leq 2D^*\)。因为 j 在那一刻从 U 中被移除。所以,s = v 就是一个满足条件的中
心。 -
因此,最终中心集合 S 的大小 ≤ k(算法在选满 k 个中心前可能已覆盖所有顶点,之后任意添加的中心不影响已有顶点的分配)。
-
于是,对每个顶点 j,存在 s ∈ S 使得 \(dist(j, s) \leq 2D^*\)。
-
由于 \(D^* \leq OPT\),我们得到最大距离 ≤ \(2D^* \leq 2 OPT\)。
-
因此算法是一个2-近似算法。
步骤5: 举例说明
假设一个简单图:顶点集 V = {1,2,3,4},边及其距离(即最短路径距离,假设为完全图,距离矩阵如下):
\[d_{ij} = \begin{bmatrix} 0 & 1 & 3 & 4 \\ 1 & 0 & 2 & 3 \\ 3 & 2 & 0 & 1 \\ 4 & 3 & 1 & 0 \end{bmatrix} \]
我们需要选 k=2 个中心。
-
求解线性规划松弛:
由于计算复杂,我们跳过具体数值求解,假设得到最优值 \(D^* = 1.5\),分数解可能将中心质量分散在顶点上。 -
舍入算法:
- 初始 U = {1,2,3,4}, S = {}。
- 选种子 v=1,S={1},移除 U 中所有与1距离 ≤ 2D^* = 3 的顶点:即移除顶点2(距离1),顶点3(距离3),顶点4(距离4>3 不满足),所以 U 变为 {4}。
- 选种子 v=4,S={1,4},移除 U 中与4距离 ≤ 3 的顶点:顶点4自身移除,U变为 {}。
- |S|=2 已等于 k,停止。
-
分配顶点:
- 顶点1分配给中心1,距离0。
- 顶点2分配给中心1,距离1。
- 顶点3可分配给中心1(距离3)或中心4(距离1),最小距离为1(到中心4)。
- 顶点4分配给中心4,距离0。
最大距离为 max(0,1,1,0) = 1。但注意,我们实际的最大距离是3(如果顶点3分配给中心1),但我们可以将顶点3分配给更近的中心4(距离1)。所以通过合理分配,最大距离为1。而 \(2D^* = 3\),我们的最大距离1 ≤ 3,满足近似比2。这里最优解可能是选择顶点2和4作为中心,最大距离为1(顶点1到中心2距离1,顶点3到中心4距离1),所以 OPT=1,我们的解也是1,恰好最优。
总结
我们通过线性规划松弛得到最大距离下界 \(D^*\),然后以 \(2D^*\) 为半径进行贪心聚类选择中心,从而获得一个最大距离不超过 \(2D^* \leq 2 OPT\) 的解。这个算法是多项式时间的(需要解一次线性规划,之后是简单的贪心过程),并且提供了一个理论保证的2-近似解。该方法展示了如何利用线性规划松弛和舍入技巧处理组合优化问题,是近似算法设计中的经典范例。