基于线性规划的仿射缩放内点法求解示例
字数 2766 2025-11-04 08:32:42

基于线性规划的仿射缩放内点法求解示例

题目描述
考虑线性规划问题:

\[\begin{aligned} \text{最大化} \quad & 3x_1 + 2x_2 \\ \text{约束条件} \quad & x_1 + x_2 \leq 4 \\ & 2x_1 + x_2 \leq 5 \\ & x_1, x_2 \geq 0 \end{aligned} \]

要求使用仿射缩放内点法求解该问题。该方法通过迭代在可行域内部移动,逐步逼近最优解,避免单纯形法的顶点遍历,适用于大规模问题。


解题过程

1. 标准化问题

将问题转化为标准型(最小化、等式约束、非负变量):

\[\begin{aligned} \text{最小化} \quad & -3x_1 - 2x_2 \\ \text{约束条件} \quad & x_1 + x_2 + x_3 = 4 \\ & 2x_1 + x_2 + x_4 = 5 \\ & x_1, x_2, x_3, x_4 \geq 0 \end{aligned} \]

其中 \(x_3, x_4\) 是松弛变量。
\(c = [-3, -2, 0, 0]^T\)\(A = \begin{bmatrix} 1 & 1 & 1 & 0 \\ 2 & 1 & 0 & 1 \end{bmatrix}\)\(b = [4, 5]^T\)


2. 初始内点选择

需选择一个严格可行的初始点(所有变量 > 0)。
通过观察,取 \(x_1 = 1, x_2 = 1\),则:

\[x_3 = 4 - (1+1) = 2, \quad x_4 = 5 - (2+1) = 2 \]

初始点 \(x^{(0)} = [1, 1, 2, 2]^T > 0\),满足 \(Ax = b\)


3. 仿射缩放方向计算

设当前点为 \(x^{(k)} > 0\),定义对角矩阵 \(D_k = \text{diag}(x^{(k)})\)
仿射缩放方向 \(d_x\) 通过投影梯度法得到:

  1. 计算梯度:\(\nabla f(x) = c\)(本例中为常数)。
  2. 将梯度变换到“缩放空间”:\(c_s = D_k c\)
  3. \(c_s\) 投影到 \(A D_k\) 的零空间:

\[ d_s = -\left[ I - (A D_k)^T (A D_k^2 A^T)^{-1} (A D_k) \right] c_s \]

  1. 变换回原空间:\(d_x = D_k d_s\)

以第一次迭代为例

  • \(x^{(0)} = [1, 1, 2, 2]^T\)\(D_0 = \text{diag}(1, 1, 2, 2)\)
  • \(c = [-3, -2, 0, 0]^T\)\(c_s = D_0 c = [-3, -2, 0, 0]^T\)
  • 计算 \(A D_0 = \begin{bmatrix} 1 & 1 & 2 & 0 \\ 2 & 1 & 0 & 2 \end{bmatrix}\)
  • 计算 \(A D_0^2 A^T = \begin{bmatrix} 1 & 1 & 2 & 0 \\ 2 & 1 & 0 & 2 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 4 & 0 \\ 0 & 0 & 0 & 4 \end{bmatrix} A^T = \begin{bmatrix} 6 & 3 \\ 3 & 10 \end{bmatrix}\)
  • 求逆:\((A D_0^2 A^T)^{-1} = \frac{1}{51} \begin{bmatrix} 10 & -3 \\ -3 & 6 \end{bmatrix}\)
  • 投影矩阵 \(P = I - (A D_0)^T (A D_0^2 A^T)^{-1} (A D_0)\)(计算略)。
  • \(d_s = -P c_s = [0.235, -0.294, -0.471, 0.588]^T\)
  • \(d_x = D_0 d_s = [0.235, -0.294, -0.942, 1.176]^T\)

4. 步长选择

为保证新点 \(x^{(k+1)} = x^{(k)} + \alpha d_x\) 保持内点(所有分量 > 0),需限制步长:

\[\alpha = \min \left\{ \frac{-x_i}{(d_x)_i} \ \middle| \ (d_x)_i < 0 \right\} \]

但实际中常取更保守的步长(如乘以系数 0.99 避免触碰边界)。
本例中 \(d_x\) 的负分量为第 2、3 个:

\[\alpha_{\max} = \min \left\{ \frac{-1}{-0.294}, \frac{-2}{-0.942} \right\} \approx \min\{3.40, 2.12\} = 2.12 \]

\(\alpha = 0.99 \times 2.12 \approx 2.10\)


5. 更新迭代点

\[x^{(1)} = x^{(0)} + \alpha d_x = [1, 1, 2, 2]^T + 2.10 \times [0.235, -0.294, -0.942, 1.176]^T \]

计算得 \(x^{(1)} \approx [1.494, 0.382, 0.022, 4.469]^T\)
验证可行性:

  • \(x_3\) 接近 0,但仍 > 0(内点性保持)。
  • \(Ax = [1.876, 4.999]^T \approx b\)(数值误差可接受)。

6. 收敛判断

重复步骤 3–5,直到目标函数变化小于阈值或点接近最优。
本例的最优解为 \(x^* = [1, 3, 0, 0]^T\),最优值 \(3 \times 1 + 2 \times 3 = 9\)
经过多次迭代后,\(x^{(k)}\) 会逼近 \(x^*\),且目标值从 \(-3 \times 1 - 2 \times 1 = -5\) 趋近于 \(-9\)(最小化标准型)。


关键点总结

  • 仿射缩放法通过缩放梯度方向在可行域内移动。
  • 步长控制确保迭代点不触碰边界。
  • 适用于大规模稀疏问题,但收敛速度较慢(线性收敛)。
  • 实际实现需处理数值稳定性(如矩阵求逆的正则化)。
基于线性规划的仿射缩放内点法求解示例 题目描述 考虑线性规划问题: \[ \begin{aligned} \text{最大化} \quad & 3x_ 1 + 2x_ 2 \\ \text{约束条件} \quad & x_ 1 + x_ 2 \leq 4 \\ & 2x_ 1 + x_ 2 \leq 5 \\ & x_ 1, x_ 2 \geq 0 \end{aligned} \] 要求使用 仿射缩放内点法 求解该问题。该方法通过迭代在可行域内部移动,逐步逼近最优解,避免单纯形法的顶点遍历,适用于大规模问题。 解题过程 1. 标准化问题 将问题转化为标准型(最小化、等式约束、非负变量): \[ \begin{aligned} \text{最小化} \quad & -3x_ 1 - 2x_ 2 \\ \text{约束条件} \quad & x_ 1 + x_ 2 + x_ 3 = 4 \\ & 2x_ 1 + x_ 2 + x_ 4 = 5 \\ & x_ 1, x_ 2, x_ 3, x_ 4 \geq 0 \end{aligned} \] 其中 \(x_ 3, x_ 4\) 是松弛变量。 令 \(c = [ -3, -2, 0, 0]^T\),\(A = \begin{bmatrix} 1 & 1 & 1 & 0 \\ 2 & 1 & 0 & 1 \end{bmatrix}\),\(b = [ 4, 5 ]^T\)。 2. 初始内点选择 需选择一个严格可行的初始点(所有变量 > 0)。 通过观察,取 \(x_ 1 = 1, x_ 2 = 1\),则: \[ x_ 3 = 4 - (1+1) = 2, \quad x_ 4 = 5 - (2+1) = 2 \] 初始点 \(x^{(0)} = [ 1, 1, 2, 2 ]^T > 0\),满足 \(Ax = b\)。 3. 仿射缩放方向计算 设当前点为 \(x^{(k)} > 0\),定义对角矩阵 \(D_ k = \text{diag}(x^{(k)})\)。 仿射缩放方向 \(d_ x\) 通过投影梯度法得到: 计算梯度:\(\nabla f(x) = c\)(本例中为常数)。 将梯度变换到“缩放空间”:\(c_ s = D_ k c\)。 将 \(c_ s\) 投影到 \(A D_ k\) 的零空间: \[ d_ s = -\left[ I - (A D_ k)^T (A D_ k^2 A^T)^{-1} (A D_ k) \right] c_ s \] 变换回原空间:\(d_ x = D_ k d_ s\)。 以第一次迭代为例 : \(x^{(0)} = [ 1, 1, 2, 2]^T\),\(D_ 0 = \text{diag}(1, 1, 2, 2)\)。 \(c = [ -3, -2, 0, 0]^T\),\(c_ s = D_ 0 c = [ -3, -2, 0, 0 ]^T\)。 计算 \(A D_ 0 = \begin{bmatrix} 1 & 1 & 2 & 0 \\ 2 & 1 & 0 & 2 \end{bmatrix}\)。 计算 \(A D_ 0^2 A^T = \begin{bmatrix} 1 & 1 & 2 & 0 \\ 2 & 1 & 0 & 2 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 4 & 0 \\ 0 & 0 & 0 & 4 \end{bmatrix} A^T = \begin{bmatrix} 6 & 3 \\ 3 & 10 \end{bmatrix}\)。 求逆:\((A D_ 0^2 A^T)^{-1} = \frac{1}{51} \begin{bmatrix} 10 & -3 \\ -3 & 6 \end{bmatrix}\)。 投影矩阵 \(P = I - (A D_ 0)^T (A D_ 0^2 A^T)^{-1} (A D_ 0)\)(计算略)。 得 \(d_ s = -P c_ s = [ 0.235, -0.294, -0.471, 0.588 ]^T\)。 \(d_ x = D_ 0 d_ s = [ 0.235, -0.294, -0.942, 1.176 ]^T\)。 4. 步长选择 为保证新点 \(x^{(k+1)} = x^{(k)} + \alpha d_ x\) 保持内点(所有分量 > 0),需限制步长: \[ \alpha = \min \left\{ \frac{-x_ i}{(d_ x)_ i} \ \middle| \ (d_ x) i < 0 \right\} \] 但实际中常取更保守的步长(如乘以系数 0.99 避免触碰边界)。 本例中 \(d_ x\) 的负分量为第 2、3 个: \[ \alpha {\max} = \min \left\{ \frac{-1}{-0.294}, \frac{-2}{-0.942} \right\} \approx \min\{3.40, 2.12\} = 2.12 \] 取 \(\alpha = 0.99 \times 2.12 \approx 2.10\)。 5. 更新迭代点 \[ x^{(1)} = x^{(0)} + \alpha d_ x = [ 1, 1, 2, 2]^T + 2.10 \times [ 0.235, -0.294, -0.942, 1.176 ]^T \] 计算得 \(x^{(1)} \approx [ 1.494, 0.382, 0.022, 4.469 ]^T\)。 验证可行性: \(x_ 3\) 接近 0,但仍 > 0(内点性保持)。 \(Ax = [ 1.876, 4.999 ]^T \approx b\)(数值误差可接受)。 6. 收敛判断 重复步骤 3–5,直到目标函数变化小于阈值或点接近最优。 本例的最优解为 \(x^* = [ 1, 3, 0, 0 ]^T\),最优值 \(3 \times 1 + 2 \times 3 = 9\)。 经过多次迭代后,\(x^{(k)}\) 会逼近 \(x^* \),且目标值从 \(-3 \times 1 - 2 \times 1 = -5\) 趋近于 \(-9\)(最小化标准型)。 关键点总结 仿射缩放法通过缩放梯度方向在可行域内移动。 步长控制确保迭代点不触碰边界。 适用于大规模稀疏问题,但收敛速度较慢(线性收敛)。 实际实现需处理数值稳定性(如矩阵求逆的正则化)。