基于线性规划的图最小权支配集问题的半定规划松弛求解示例
字数 4678 2025-12-08 11:33:43

基于线性规划的图最小权支配集问题的半定规划松弛求解示例

我将为您讲解如何利用半定规划(SDP)松弛来近似求解图的最小权支配集(Minimum Weight Dominating Set, MWDS)问题。这是一个NP难问题,我们可以通过建立其整数规划模型,再将其松弛为半定规划,最后设计舍入算法来获得近似解。


1. 问题描述

我们有一个无向图 \(G = (V, E)\),其中 \(V = \{1, 2, \dots, n\}\) 是顶点集合,\(E\) 是边集合。每个顶点 \(i \in V\) 有一个非负权重 \(w_i \geq 0\)。一个顶点集合 \(S \subseteq V\) 称为一个支配集(Dominating Set),如果对于图中任意一个顶点 \(v \in V\),要么 \(v \in S\),要么 \(v\) 至少与 \(S\) 中的一个顶点相邻。
最小权支配集问题的目标是找到一个支配集 \(S\),使得其总权重 \(\sum_{i \in S} w_i\) 最小。

2. 整数规划建模

我们为每个顶点 \(i\) 引入一个0-1决策变量 \(x_i\)

  • \(x_i = 1\) 表示顶点 \(i\) 被选入支配集 \(S\)
  • \(x_i = 0\) 表示未被选入。

那么,支配集的条件可以表述为:对于每个顶点 \(i\),要么 \(x_i = 1\),要么对于其某个邻居 \(j\)(即存在边 \((i, j) \in E\)),有 \(x_j = 1\)。这可以写成线性约束:

\[x_i + \sum_{j: (i, j) \in E} x_j \geq 1 \quad \forall i \in V \]

目标是最小化总权重:

\[\min \sum_{i=1}^n w_i x_i \]

再加上整数约束:

\[x_i \in \{0, 1\}, \quad \forall i \in V \]

这就是一个整数线性规划(ILP)模型。

3. 半定规划(SDP)松弛的构建

由于0-1整数规划是NP难的,我们需要松弛。半定规划松弛是一种比线性规划松弛更强的松弛方式,常用于获得更好的近似比。

3.1 将0-1变量转化为向量形式
我们引入 \(n\) 个单位向量 \(\mathbf{v}_i \in \mathbb{R}^{n+1}\)(维度多一维是为了便于处理),并令:

  • 选一个额外的参考向量 \(\mathbf{v}_0 \in \mathbb{R}^{n+1}\),其长度固定。
  • 我们希望:当 \(x_i = 1\) 时,\(\mathbf{v}_i\)\(\mathbf{v}_0\) 同方向(点积为1);当 \(x_i = 0\) 时,\(\mathbf{v}_i\)\(\mathbf{v}_0\) 垂直(点积为0)。

这可以通过约束 \(\mathbf{v}_i \cdot \mathbf{v}_0 = x_i\) 来实现,但直接这样是线性的。更常用的技巧是利用Gram矩阵。

3.2 构建半定规划松弛的标准方法
定义对称矩阵 \(Y \in \mathbb{R}^{(n+1) \times (n+1)}\),其中 \(Y_{ij} = \mathbf{v}_i \cdot \mathbf{v}_j\)。对于我们的向量集 \(\{\mathbf{v}_0, \mathbf{v}_1, \dots, \mathbf{v}_n\}\),Gram矩阵 \(Y\) 是半正定的(记为 \(Y \succeq 0\)),且对角线元素 \(Y_{ii} = \|\mathbf{v}_i\|^2\)

我们固定 \(\mathbf{v}_0\) 为单位向量,即 \(Y_{00} = 1\)。我们令:

  • \(Y_{0i} = \mathbf{v}_0 \cdot \mathbf{v}_i\) 对应于原始变量 \(x_i\)
  • 对每个顶点 \(i\),支配约束 \(x_i + \sum_{j \in N(i)} x_j \geq 1\) 可以写成:

\[Y_{0i} + \sum_{j \in N(i)} Y_{0j} \geq 1 \]

这里 \(N(i)\) 表示顶点 \(i\) 的邻居集合(不包括自己)。

但为了加强松弛,我们可以引入所有向量之间的内积约束。由于 \(x_i\) 是0-1变量,我们希望 \(x_i^2 = x_i\),这对应于:

\[Y_{0i} = Y_{ii} \]

因为 \(Y_{0i} = \mathbf{v}_0 \cdot \mathbf{v}_i\),而 \(Y_{ii} = \|\mathbf{v}_i\|^2\)。如果 \(\mathbf{v}_i\) 是单位向量,则 \(Y_{ii} = 1\)。但我们可以放松为:

\[Y_{ii} = Y_{0i} \]

以及 \(Y_{0i} \geq 0\)\(Y_{ii} \leq 1\)(因为 \(\|\mathbf{v}_i\|^2 \leq 1\) 可以加入)。

最终,我们得到半定规划松弛模型

\[\begin{aligned} \min \quad & \sum_{i=1}^n w_i Y_{0i} \\ \text{s.t.} \quad & Y_{0i} + \sum_{j \in N(i)} Y_{0j} \geq 1, \quad \forall i \in V \\ & Y_{ii} = Y_{0i}, \quad \forall i \in V \\ & Y_{00} = 1 \\ & Y \succeq 0 \\ & Y_{0i} \geq 0, \quad \forall i \in V \end{aligned} \]

这里 \(Y \succeq 0\) 表示矩阵 \(Y\) 是半正定的。注意,原始整数约束 \(x_i \in \{0, 1\}\) 已被松弛为连续约束。

4. 求解半定规划并舍入得到整数解

半定规划可以在多项式时间内求解至任意精度(例如使用内点法),得到最优解矩阵 \(Y^*\)。从 \(Y^*\) 我们可以通过Cholesky分解或特征分解得到一组向量 \(\mathbf{v}_0^*, \mathbf{v}_1^*, \dots, \mathbf{v}_n^*\)(满足 \(Y_{ij}^* = \mathbf{v}_i^* \cdot \mathbf{v}_j^*\))。

现在我们需要将向量解舍入为0-1整数解 \(\hat{x}_i \in \{0, 1\}\)。这里介绍一种常用的随机舍入方法:

4.1 随机超平面舍入

  • 随机生成一个单位向量 \(\mathbf{r} \in \mathbb{R}^{n+1}\)(服从均匀分布)。
  • 对于每个顶点 \(i\),我们计算 \(\mathbf{v}_i^* \cdot \mathbf{r}\)
  • 舍入规则:如果 \(\mathbf{v}_i^* \cdot \mathbf{r} \geq \mathbf{v}_0^* \cdot \mathbf{r}\),则令 \(\hat{x}_i = 1\);否则 \(\hat{x}_i = 0\)

几何解释:我们以 \(\mathbf{v}_0^*\) 为界,将所有向量投影到随机方向 \(\mathbf{r}\) 上,若投影值大于等于 \(\mathbf{v}_0^*\) 的投影,则选择该顶点。

4.2 保证支配约束
上述简单舍入可能无法保证得到的集合一定是支配集。因此,我们需要一个后处理步骤:
检查每个顶点 \(i\)

  • 如果 \(i\) 本身被选中(\(\hat{x}_i = 1\)),或者其某个邻居被选中,则 \(i\) 已被支配。
  • 否则,我们强制选择 \(i\) 本身(设 \(\hat{x}_i = 1\)),以满足支配约束。

5. 算法流程总结

  1. 输入:图 \(G = (V, E)\),顶点权重 \(w_i\)
  2. 建模:建立上述半定规划松弛模型。
  3. 求解SDP:调用半定规划求解器,得到最优解矩阵 \(Y^*\) 和向量 \(\mathbf{v}_i^*\)
  4. 随机舍入:生成随机向量 \(\mathbf{r}\),根据 \(\mathbf{v}_i^* \cdot \mathbf{r}\)\(\mathbf{v}_0^* \cdot \mathbf{r}\) 的比较,初步确定 \(\hat{x}_i\)
  5. 后处理:检查所有顶点,若某个顶点未被支配,则将其加入支配集。
  6. 输出:支配集 \(S = \{ i \mid \hat{x}_i = 1 \}\) 及其总权重。

6. 性能分析

  • 近似比:对于最小权支配集问题,基于半定规划松弛的随机舍入算法可以达到 \(O(\log n)\) 的近似比(在某些图类中可能更好)。这是因为后处理步骤可能增加一些顶点,但通过概率分析可以证明期望权重不会太大。
  • 时间复杂度:求解半定规划是多项式时间的,但通常比线性规划慢。随机舍入和后处理步骤可以在 \(O(n + m)\) 时间内完成(\(m\) 为边数)。

7. 实例演示(小图)

考虑一个简单图:顶点集 \(V = \{1, 2, 3\}\),边 \(E = \{(1,2), (2,3)\}\),权重 \(w_1 = 2, w_2 = 1, w_3 = 3\)

  1. 整数规划模型

    • 约束:
      \(x_1 + x_2 \geq 1\)(顶点1)
      \(x_2 + x_1 + x_3 \geq 1\)(顶点2)
      \(x_3 + x_2 \geq 1\)(顶点3)
    • 目标:最小化 \(2x_1 + x_2 + 3x_3\)

    最优整数解为 \(x_2 = 1\),其他为0,权重为1。

  2. SDP松弛求解(省略数值求解步骤):得到 \(Y_{01}, Y_{02}, Y_{03}\) 的值可能接近0.5左右(满足约束且最小化权重)。

  3. 舍入:若随机向量导致 \(\hat{x}_2 = 1\),则已满足支配条件,输出权重1;若其他情况,后处理可能增加顶点,但期望权重可通过概率分析控制在 \(O(\log 3) \cdot \text{OPT}\) 范围内。

通过这个例子,您可以看到从整数模型到SDP松弛,再到舍入算法的完整流程。这种方法能够处理大规模图的最小权支配集问题,并提供理论性能保证。

基于线性规划的图最小权支配集问题的半定规划松弛求解示例 我将为您讲解如何利用 半定规划(SDP)松弛 来近似求解 图的最小权支配集(Minimum Weight Dominating Set, MWDS)问题 。这是一个NP难问题,我们可以通过建立其整数规划模型,再将其松弛为半定规划,最后设计舍入算法来获得近似解。 1. 问题描述 我们有一个无向图 \( G = (V, E) \),其中 \( V = \{1, 2, \dots, n\} \) 是顶点集合,\( E \) 是边集合。每个顶点 \( i \in V \) 有一个非负权重 \( w_ i \geq 0 \)。一个顶点集合 \( S \subseteq V \) 称为一个 支配集(Dominating Set) ,如果对于图中任意一个顶点 \( v \in V \),要么 \( v \in S \),要么 \( v \) 至少与 \( S \) 中的一个顶点相邻。 最小权支配集问题 的目标是找到一个支配集 \( S \),使得其总权重 \( \sum_ {i \in S} w_ i \) 最小。 2. 整数规划建模 我们为每个顶点 \( i \) 引入一个0-1决策变量 \( x_ i \): \( x_ i = 1 \) 表示顶点 \( i \) 被选入支配集 \( S \); \( x_ i = 0 \) 表示未被选入。 那么,支配集的条件可以表述为:对于每个顶点 \( i \),要么 \( x_ i = 1 \),要么对于其某个邻居 \( j \)(即存在边 \( (i, j) \in E \)),有 \( x_ j = 1 \)。这可以写成线性约束: \[ x_ i + \sum_ {j: (i, j) \in E} x_ j \geq 1 \quad \forall i \in V \] 目标是最小化总权重: \[ \min \sum_ {i=1}^n w_ i x_ i \] 再加上整数约束: \[ x_ i \in \{0, 1\}, \quad \forall i \in V \] 这就是一个 整数线性规划(ILP) 模型。 3. 半定规划(SDP)松弛的构建 由于0-1整数规划是NP难的,我们需要松弛。半定规划松弛是一种比线性规划松弛更强的松弛方式,常用于获得更好的近似比。 3.1 将0-1变量转化为向量形式 我们引入 \( n \) 个单位向量 \( \mathbf{v}_ i \in \mathbb{R}^{n+1} \)(维度多一维是为了便于处理),并令: 选一个额外的参考向量 \( \mathbf{v}_ 0 \in \mathbb{R}^{n+1} \),其长度固定。 我们希望:当 \( x_ i = 1 \) 时,\( \mathbf{v}_ i \) 与 \( \mathbf{v}_ 0 \) 同方向(点积为1);当 \( x_ i = 0 \) 时,\( \mathbf{v}_ i \) 与 \( \mathbf{v}_ 0 \) 垂直(点积为0)。 这可以通过约束 \( \mathbf{v}_ i \cdot \mathbf{v}_ 0 = x_ i \) 来实现,但直接这样是线性的。更常用的技巧是利用Gram矩阵。 3.2 构建半定规划松弛的标准方法 定义对称矩阵 \( Y \in \mathbb{R}^{(n+1) \times (n+1)} \),其中 \( Y_ {ij} = \mathbf{v}_ i \cdot \mathbf{v}_ j \)。对于我们的向量集 \( \{\mathbf{v}_ 0, \mathbf{v}_ 1, \dots, \mathbf{v} n\} \),Gram矩阵 \( Y \) 是半正定的(记为 \( Y \succeq 0 \)),且对角线元素 \( Y {ii} = \|\mathbf{v}_ i\|^2 \)。 我们固定 \( \mathbf{v} 0 \) 为单位向量,即 \( Y {00} = 1 \)。我们令: \( Y_ {0i} = \mathbf{v}_ 0 \cdot \mathbf{v}_ i \) 对应于原始变量 \( x_ i \)。 对每个顶点 \( i \),支配约束 \( x_ i + \sum_ {j \in N(i)} x_ j \geq 1 \) 可以写成: \[ Y_ {0i} + \sum_ {j \in N(i)} Y_ {0j} \geq 1 \] 这里 \( N(i) \) 表示顶点 \( i \) 的邻居集合(不包括自己)。 但为了加强松弛,我们可以引入 所有向量之间的内积约束 。由于 \( x_ i \) 是0-1变量,我们希望 \( x_ i^2 = x_ i \),这对应于: \[ Y_ {0i} = Y_ {ii} \] 因为 \( Y_ {0i} = \mathbf{v} 0 \cdot \mathbf{v} i \),而 \( Y {ii} = \|\mathbf{v} i\|^2 \)。如果 \( \mathbf{v} i \) 是单位向量,则 \( Y {ii} = 1 \)。但我们可以放松为: \[ Y {ii} = Y {0i} \] 以及 \( Y_ {0i} \geq 0 \) 和 \( Y_ {ii} \leq 1 \)(因为 \( \|\mathbf{v}_ i\|^2 \leq 1 \) 可以加入)。 最终,我们得到 半定规划松弛模型 : \[ \begin{aligned} \min \quad & \sum_ {i=1}^n w_ i Y_ {0i} \\ \text{s.t.} \quad & Y_ {0i} + \sum_ {j \in N(i)} Y_ {0j} \geq 1, \quad \forall i \in V \\ & Y_ {ii} = Y_ {0i}, \quad \forall i \in V \\ & Y_ {00} = 1 \\ & Y \succeq 0 \\ & Y_ {0i} \geq 0, \quad \forall i \in V \end{aligned} \] 这里 \( Y \succeq 0 \) 表示矩阵 \( Y \) 是半正定的。注意,原始整数约束 \( x_ i \in \{0, 1\} \) 已被松弛为连续约束。 4. 求解半定规划并舍入得到整数解 半定规划可以在多项式时间内求解至任意精度(例如使用内点法),得到最优解矩阵 \( Y^* \)。从 \( Y^* \) 我们可以通过Cholesky分解或特征分解得到一组向量 \( \mathbf{v}_ 0^ , \mathbf{v}_ 1^ , \dots, \mathbf{v} n^* \)(满足 \( Y {ij}^* = \mathbf{v}_ i^* \cdot \mathbf{v}_ j^* \))。 现在我们需要将向量解舍入为0-1整数解 \( \hat{x}_ i \in \{0, 1\} \)。这里介绍一种常用的随机舍入方法: 4.1 随机超平面舍入 随机生成一个单位向量 \( \mathbf{r} \in \mathbb{R}^{n+1} \)(服从均匀分布)。 对于每个顶点 \( i \),我们计算 \( \mathbf{v}_ i^* \cdot \mathbf{r} \)。 舍入规则:如果 \( \mathbf{v}_ i^* \cdot \mathbf{r} \geq \mathbf{v}_ 0^* \cdot \mathbf{r} \),则令 \( \hat{x}_ i = 1 \);否则 \( \hat{x}_ i = 0 \)。 几何解释:我们以 \( \mathbf{v}_ 0^* \) 为界,将所有向量投影到随机方向 \( \mathbf{r} \) 上,若投影值大于等于 \( \mathbf{v}_ 0^* \) 的投影,则选择该顶点。 4.2 保证支配约束 上述简单舍入可能无法保证得到的集合一定是支配集。因此,我们需要一个后处理步骤: 检查每个顶点 \( i \): 如果 \( i \) 本身被选中(\( \hat{x}_ i = 1 \)),或者其某个邻居被选中,则 \( i \) 已被支配。 否则,我们强制选择 \( i \) 本身(设 \( \hat{x}_ i = 1 \)),以满足支配约束。 5. 算法流程总结 输入 :图 \( G = (V, E) \),顶点权重 \( w_ i \)。 建模 :建立上述半定规划松弛模型。 求解SDP :调用半定规划求解器,得到最优解矩阵 \( Y^* \) 和向量 \( \mathbf{v}_ i^* \)。 随机舍入 :生成随机向量 \( \mathbf{r} \),根据 \( \mathbf{v}_ i^* \cdot \mathbf{r} \) 与 \( \mathbf{v}_ 0^* \cdot \mathbf{r} \) 的比较,初步确定 \( \hat{x}_ i \)。 后处理 :检查所有顶点,若某个顶点未被支配,则将其加入支配集。 输出 :支配集 \( S = \{ i \mid \hat{x}_ i = 1 \} \) 及其总权重。 6. 性能分析 近似比 :对于最小权支配集问题,基于半定规划松弛的随机舍入算法可以达到 \( O(\log n) \) 的近似比(在某些图类中可能更好)。这是因为后处理步骤可能增加一些顶点,但通过概率分析可以证明期望权重不会太大。 时间复杂度 :求解半定规划是多项式时间的,但通常比线性规划慢。随机舍入和后处理步骤可以在 \( O(n + m) \) 时间内完成(\( m \) 为边数)。 7. 实例演示(小图) 考虑一个简单图:顶点集 \( V = \{1, 2, 3\} \),边 \( E = \{(1,2), (2,3)\} \),权重 \( w_ 1 = 2, w_ 2 = 1, w_ 3 = 3 \)。 整数规划模型 : 约束: \( x_ 1 + x_ 2 \geq 1 \)(顶点1) \( x_ 2 + x_ 1 + x_ 3 \geq 1 \)(顶点2) \( x_ 3 + x_ 2 \geq 1 \)(顶点3) 目标:最小化 \( 2x_ 1 + x_ 2 + 3x_ 3 \)。 最优整数解为 \( x_ 2 = 1 \),其他为0,权重为1。 SDP松弛求解(省略数值求解步骤) :得到 \( Y_ {01}, Y_ {02}, Y_ {03} \) 的值可能接近0.5左右(满足约束且最小化权重)。 舍入 :若随机向量导致 \( \hat{x}_ 2 = 1 \),则已满足支配条件,输出权重1;若其他情况,后处理可能增加顶点,但期望权重可通过概率分析控制在 \( O(\log 3) \cdot \text{OPT} \) 范围内。 通过这个例子,您可以看到从整数模型到SDP松弛,再到舍入算法的完整流程。这种方法能够处理大规模图的最小权支配集问题,并提供理论性能保证。