原始-对偶(Primal-Dual)算法(Dantzig, Ford, and Fulkerso,1956)是用来求解线性规划的一种算法,可以看作是单纯形法的一种变体,目的是减少迭代次数。
构建该算法的核心依据为原问题和对偶问题的最优解满足的互补松弛关系。
考虑以下线性规划问题 P P P:
min c T x s . t . A x ⩾ b x ⩾ 0 \min \quad \boldsymbol{c}^T\boldsymbol{x} \\ s.t.\,\qquad \quad \\ \qquad \boldsymbol{Ax}\geqslant \boldsymbol{b} \\ \qquad \boldsymbol{x}\geqslant \mathbf{0} mincTxs.t.Ax⩾bx⩾0
和他的对偶问题 D D D:
max b T y s . t . A T y ⩽ c y ⩾ 0 \max \quad \boldsymbol{b}^T\boldsymbol{y} \\ s.t.\,\qquad \quad \\ \qquad \boldsymbol{A^{T}y}\leqslant \boldsymbol{c} \\ \qquad \boldsymbol{y}\geqslant \mathbf{0} maxbTys.t.ATy⩽cy⩾0
其中 A \boldsymbol{A} A 是 m × n m\times n m×n的矩阵, b \boldsymbol{b} b 和 c \boldsymbol{c} c 都大于0。
假设 x \boldsymbol{x} x 和 y \boldsymbol{y} y 分别是问题 P P P, D D D 的可行解,判断 x \boldsymbol{x} x 和 y \boldsymbol{y} y 是否为最优解,需要同时考虑两种互补松弛条件:
- 第一种:primal complementary slackness conditions
x j > 0 ⇒ A j y = c j ( 1 ) A j y < c j ⇒ x j = 0 ( 2 ) x_j>0\Rightarrow A^jy=c_j\qquad \left( 1 \right) \\ A^jy<c_j\Rightarrow x_j=0\qquad \left( 2 \right) xj>0⇒Ajy=cj(1)Ajy<cj⇒xj=0(2)
其中 A j \boldsymbol{A^j} Aj 表示系数矩阵的第 j j j 列。
(1)表示,当原问题的可行解 x j > 0 x_j>0 xj>0 时,它对应的对偶问题的约束为紧约束(等号成立)。
(2)表示,当对偶问题的某个约束为松约束时,它对应的原问题的可行解 x j = 0 x_j=0 xj=0 。
- 第二种:dual complementary slackness conditions
y i > 0 ⇒ A i x = b i ( 3 ) A i x < b i ⇒ y i = 0 ( 4 ) \\ y_i>0\Rightarrow A_ix=b_i\qquad \left( 3 \right) \\ \\ A_ix<b_i\Rightarrow y_i=0\qquad \left( 4 \right) yi>0⇒Aix=bi(3)Aix<bi⇒yi=0(4)
其中 A i \boldsymbol{A_i} Ai 表示系数矩阵的第 i i i 行。
可以从经济分析的角度理解这一条件:
假设原问题是形如 D D D 的资源分配模型, c \boldsymbol{c} c 为资源限额,此时每条供给约束都对应着一个影子价格。影子价格的定义是:管理层愿意为获取额外一定单位的既定资源而多付出的最大价格。表达式 (3)表示当影子价格大于0时,表示在现有基础资源限额上,每增加一单位资源,收益便会改善,说明现有资源已经被消耗殆尽,约束为紧约束;
表达式(4)说明假如当前资源过剩,并不稀缺时,说明并不需要获取额外单位的既定资源,因此影子价格为0 。
只有当上述条件 (1)~(4) 全部同时满足的时候, x \boldsymbol{x} x 和 y \boldsymbol{y} y 才会是最优解。
因此,为了找到最优解,首先需要找到能够满足上述条件的松、紧约束的下标集合。这里考虑两种集合:
J = { j ∣ y A j = c j } I = { i ∣ y i = 0 } J = \{j \;|\;\boldsymbol{y}\boldsymbol{A}^j=c_j\}\\ I = \{i \;|\;y_i=0\} J={
j∣y