原始-对偶方法与最短路算法

之前,我们学习了求解线性规划的单纯形法与对偶单纯形法,单纯形法在满足解可行的条件下不断优化目标函数,事实上是逐渐让对偶问题可行;对偶单纯形法则是在保证对偶可行的条件下使解逐渐可行。从凸优化中的知识我们知道,线性规划一定满足强对偶定理,因此,一定同时 (即目标函数值相等)存在对偶问题与原问题的可行解,此时得到最优值。

但单纯形法与对偶单纯形法的计算都较为复杂,于是提出了原始-对偶方法。原始-对偶方法的主要思想是从一个对偶可行解 $y$ 出发,逐渐优化可行解 $y$ ,希望得到一个原问题的解 $x$ 与 $y$ 满足互补松弛条件,且 $x$ 可行,此时便得到了原问题与对偶问题的最优解。

原始-对偶方法

考虑原问题(P) 为:

$$
\min\limits_x c^Tx \
\text{s.t.} Ax = b \ge 0 \
x \ge 0
$$

对偶问题 (DP)为

$$
\max\limits_x b^Ty \
\text{s.t.} A^Ty \le c
$$

首先假设我们得到了对偶问题的一个可行解 $y$。 由互补松弛条件我们知道,当原问题的可行解 $x$ 与 $y$ 满足

$$
(c^T-y^TA)x = 0\
(Ax-b)y = 0
$$

$x$ , $y$ 分别是原问题与对偶问题的最优解。由于 $x$ 是原问题的可行解,满足等式约束,因此互补松弛条件的第二条满足。我们只需考虑第一个条件,有两种满足的方式:

  • 当 $c_j^T - y^TA_j = 0$, 即 $A^T_jy \le c_j$ 的约束取等号,$x$ 无约束
  • 当 $c^T_j - y^TA_j \neq 0$, 即 $A_j^Ty \le c_j$ 的约束不紧, $x = 0$

我们记集合 $J$ 为紧的约束的集合: $$ J = {j\vert A_j^Ty = c_j}$$,此时,我们希望找到原问题的解满足

$$
Ax = b\
x\ge 0, j \in J\
x = 0, j \notin J
$$

因此,我们考虑新的规划问题:限制规划问题(RP)

$$
\min \sum_{i = 0}^m\overline{x_i}\
\left[
\begin{array}{}
A& E
\end{array}
\right]
\left[
\begin{array}{}
x\
\overline{x}
\end{array}
\right] = b\
x\ge 0, j \in J\
x = 0, j \notin J
$$

类似于两阶段法的思想,对于新的规划问题,若目标函数最优解为 0,则得到了满足互补松弛条件的可行解。

考虑限制规划问题的对偶问题(DRP)

$$
\max b^Ty\
A_j^Ty\le 0, j \in J\
y_i\le 1,i = 1,…,m
$$

可以看到 $y = 0$ 是一个可行解,因此目标函数 $\max y^Tb\ge 0$。设 $\overline{y}$ 是DRP的最优解

  • 若目标函数最优值为0,根据强对偶定理,RP的最优值也为0,因此存在原问题的解 $x $ 满足上面的三个条件,即存在满足互补松弛定理的可行解,因此 $y$ 是对偶问题的最优解
  • 若 目标函数最优值大于0,根据上面的推论,不存在满足互补松弛定理的可行解。而线性规划对于最优解强对偶定理一定成立,互补松弛条件也一定成立,因此 $y$ 不是对偶问题的最优解

此时,我们需要对原对偶问题的可行解 $y$ 进行改进。一个简单的思想是使对偶问题的目标函数值更大,而我们发现DRP问题目标函数值的最优解大于0,因此,如果把DRP的最优解加入 $y$ 中,一定可以对它进行优化。能加多少呢?为了使收敛更快,我们应该加到约束恰好变紧,也就是使一个约束取等号。即

$$
y’ = y +\theta \overline{y}, \theta>0\
$$

$y’$ 比原来的解更优 : $$y’^Tb = y^Tb +\theta \overline{y}^Tb>y^Tb$$

$y’$ 满足约束 $A^Ty’ \le c$:

  • 对于 $j\in J$, 即 $A_j^Ty = c_j$, $A_j^T\overline{y}\le 0$, 因此,$A_j^Ty’ \le c_j$

  • 对于 $j\notin J$, 为了使满足约束且收敛最快,取恰好有约束变紧的时候

  • $$
    \theta = \min_{j\notin J, A_j^T\overline{y}>0}\frac{c_j-A_j^Ty}{A^T_j\overline{y}}
    $$

    如果 $\theta$ 可以无限增大,说明对偶问题没有有限最优解,那么原问题无可行解。

将 $y$ 调整为 $y’$ 之后,确定新的 $J$ (考虑多个约束同时满足的情况) ,进入下一轮迭代继续调整,直到 DRP 目标函数值的最优解为 0,此时的 $y$ 就是对偶问题的最优解。

最短路问题

我们考虑有向图上的最短路问题,起点为 $s$,终点为 $t$。对有向图定义关联矩阵,这个矩阵中每列对应一条边,每行对应一个顶点。若一条边是一个顶点的出边,那么矩阵对应元素为 1;若一条边是一个顶点的入边,那么矩阵对应元素为 -1。设 $w_i$ 表示第 $i$ 条边的长度,$x_i$ 表示第 $i$ 条边是否在最短路上,那么最短路问题就是解如下线性规划问题

$$
\min\limits_x w^Tx \ \text{s.t.} Ax = v \ x \ge 0
$$

其中

$$
v_i = \begin{cases} 1 & i = s \ -1 & i = t \ 0 & \text{otherwise} \end{cases}
$$

在整数规划中,我们知道了由于 $A$ 是全幺模矩阵,线性规划的最优解也是整数解,即问题的最优解。

根据关联矩阵的定义,把 $A$ 的每一行加起来,最后会获得都是 0 的一行,也就是说 $A$ 中的行向量是线性相关的。那么不妨从 $A$ 中去掉代表终点 $t$ 的那一行,得到新矩阵 $\bar{A}$。最短路问题就变为

$$
\min\limits_x w^Tx \ \text{s.t.} \overline{A}x = v \ x \ge 0
$$

其中

$$
v_i = \begin{cases} 1 & i = s \ 0 & \text{otherwise} \end{cases}
$$

这个问题的对偶问题

$$
\max y_s \ \text{s.t.} y_i - y_j \le w_e ,\forall e = (i, j) \in E,j\neq t \
y_i \le w_e, \forall e = (i, t) \in E
$$

我们知道,由于删去了 $t$ 的一行,对偶问题的约束中应该与 $t$ 没有关系。此时我们令 $y_t = 0$ 再加入对偶问题中,与对偶问题等价:

$$
\max y_s \
\text{s.t.} y_i - y_j \le w_e ,\forall e = (i, j) \in E
\y_t= 0
$$

所以这么做的目的是什么呢?

我们可以得到原问题的对偶问题为:

$$
\max y_s-y_t \ \text{s.t.} y_i - y_j \le w_e ,\forall e = (i, j) \in E
$$

毫无疑问这比我们变化后的对偶问题复杂。事实上,由于目标函数是两个变量的差,而约束也是对不同的两个变化差值的约束,我们可以认为这个变化通过将 $y_t$ 的值固定,将变量的范围限定,从而使问题简化,且不会改变目标函数的最优值。

变化后的对偶问题的可行解很容易得到,即 $y = 0$。

它的DRP问题为

$$
\max y_s \ \text{s.t.} y_i - y_j \le 0 , \forall (i, j) \in J \ y_i \le 1 \ y_t = 0
$$

我们模拟一下前两次递归:

  1. DP 的解为 $y_s=0$, DRP 的最优解为 $\overline{y_s} = 1, J =\emptyset$

    根据 $$\theta = \min_{j\notin J, A_j^T\overline{y}>0}\frac{c_j-A_j^Ty}{A^T_j\overline{y}}$$ , 而 $A_j^Ty_i$ 当边$j$ 从点 $i$ 出发时为 1,其他为0或-1, 我们发现,$\theta$ 表示的是从点 $s$ 出发的最短的边,将其加入 $J$

  2. DP 的解为 $y_s=\theta \overline{y_s}$, DRP 的最优解为 $\overline{y_s} =\overline{y_1} = 1, J ={j_1}$

    再求 $\theta$, 我们发现它表示的是从DRP 的最优解中为1的点出发的最短的边,将其加入 $J$

是不是有一点熟悉? 事实上这就是我们熟悉的 Dijkstra 算法的过程。其中 $J$ 表示以及选中的边, DRP 的最优解中为 1 表示已经到达的点, $\theta $ 表示每次选取的最短边, 而DP中的可行解 $y_s$ 一直在累加,因此表示现在到最远的点的最短距离。

当 $J$ 中包含的边到达了 $t$ , 由DRP的约束条件, DRP的最优解为全 0, 因此算法结束,对偶问题达到最优解, 此时的 $y_s$表示到 t 点的最短距离。