基于线性规划的原始-对偶路径跟踪内点法求解示例
题目描述
考虑以下线性规划问题:
最小化:\(c^T x\)
满足:\(Ax = b\),\(x \geq 0\)
其中 \(c = \begin{bmatrix} -1 \\ -2 \end{bmatrix}\),\(A = \begin{bmatrix} 1 & 1 \end{bmatrix}\),\(b = \begin{bmatrix} 3 \end{bmatrix}\),\(x = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}\)。
原始-对偶路径跟踪内点法通过同时更新原始变量和对偶变量,并沿中心路径逼近最优解。
解题过程
1. 构造对偶问题与互补松弛条件
- 对偶问题为:最大化 \(b^T y\),满足 \(A^T y + s = c\),\(s \geq 0\),其中 \(y\) 是对偶变量,\(s\) 是对偶松弛变量。
- 互补松弛条件:\(x_i s_i = 0\)(对于每个 \(i\)),\(x, s \geq 0\)。
2. 引入扰动参数与中心路径方程
- 定义扰动参数 \(\mu > 0\),将互补松弛条件松弛为:\(x_i s_i = \mu\)(对于每个 \(i\))。
- 中心路径方程:
- 原始可行性:\(Ax = b\),\(x \geq 0\)。
- 对偶可行性:\(A^T y + s = c\),\(s \geq 0\)。
- 扰动互补松弛:\(X s = \mu e\),其中 \(X = \text{diag}(x)\),\(e = (1,1)^T\)。
3. 初始化与参数设置
- 初始点选择:取 \(x^{(0)} = (1, 2)^T\)(满足 \(Ax = b\)),\(y^{(0)} = 0\),\(s^{(0)} = c - A^T y = (-1, -2)^T\)(不满足 \(s \geq 0\),需通过添加偏移量修正,此处直接进入迭代框架)。
- 实际计算中,需通过启发式选择严格可行内点。本例为简化,从近似点开始迭代。
- 设置参数:\(\mu_0 = \frac{x^{(0)T} s^{(0)}}{n} = \frac{(1)(-1) + (2)(-2)}{2} = -2.5\)(负数,说明初始点不可行,但算法可通过迭代调整)。
4. 迭代步骤(以第一次迭代为例)
-
步骤 4.1:计算当前对偶间隔与 \(\mu\)
对偶间隔 \(\delta = x^T s\)。初始 \(\delta = -5\),目标是将 \(\mu\) 减小到 0。
设置 \(\mu = \sigma \cdot \frac{\delta}{n}\),其中 \(\sigma \in (0,1)\) 是中心参数,取 \(\sigma = 0.5\)。则 \(\mu = 0.5 \times (-5)/2 = -1.25\)。 -
步骤 4.2:求解牛顿方向
牛顿系统为:
\[ \begin{bmatrix} 0 & A^T & I \\ A & 0 & 0 \\ S & 0 & X \end{bmatrix} \begin{bmatrix} \Delta x \\ \Delta y \\ \Delta s \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \\ \mu e - X s \end{bmatrix} \]
代入值:
-
\(A = [1, 1]\),\(S = \text{diag}(s) = \text{diag}(-1, -2)\),\(X = \text{diag}(1, 2)\)。
-
右端项:\(\mu e - X s = (-1.25) - [1 \times (-1), 2 \times (-2)]^T = [-1.25 - (-1), -1.25 - (-4)]^T = [-0.25, 2.75]^T\)。
解得牛顿方向(详细计算略):\(\Delta x \approx (0.083, -0.083)^T\),\(\Delta y \approx -0.5\),\(\Delta s \approx (0.5, 0.5)^T\)。 -
步骤 4.3:计算步长并更新点
步长 \(\alpha \in (0,1]\) 需保证 \(x + \alpha \Delta x \geq 0\),\(s + \alpha \Delta s \geq 0\)。取 \(\alpha = 0.9 \times \min\left( \min_i \left( \frac{-x_i}{\Delta x_i} \text{ 若 } \Delta x_i < 0 \right), \min_i \left( \frac{-s_i}{\Delta s_i} \text{ 若 } \Delta s_i < 0 \right) \right)\)。
计算得 \(\alpha \approx 0.9\)。更新:- \(x^{(1)} = x^{(0)} + \alpha \Delta x \approx (1.075, 1.925)^T\)。
- \(y^{(1)} = y^{(0)} + \alpha \Delta y \approx -0.45\)。
- \(s^{(1)} = s^{(0)} + \alpha \Delta s \approx (-0.55, -1.55)^T\)。
5. 收敛判断与后续迭代
- 检查对偶间隔 \(\delta^{(1)} = x^{(1)T} s^{(1)} \approx -3.63\)(仍为负,因初始点不可行)。继续迭代,逐步调整 \(\mu\) 并向可行域靠近。
- 经过多次迭代(通常 10-20 步),点列将收敛到最优解 \(x^* = (0, 3)^T\),\(y^* = -2\),\(s^* = (1, 0)^T\),目标函数值 \(-6\)。
6. 算法特点
- 路径跟踪法通过控制 \(\mu\) 减小速度,平衡最优性与可行性。
- 每步需解线性系统,计算成本高,但迭代次数少于单纯形法。
- 适用于大规模稀疏问题。