非线性规划中的原始对偶内点法基础题
题目描述
考虑一个简单的非线性规划问题:
最小化 \(f(x) = x_1^2 + x_2^2\)
约束条件:
\(g(x) = x_1 + x_2 - 2 \geq 0\)
\(x_1 \geq 0, x_2 \geq 0\)
该问题要求最小化二次目标函数,并满足线性不等式约束。使用原始对偶内点法求解该问题,需详细说明如何构造障碍函数、中心路径方程、以及对偶变量的更新策略。
解题过程
1. 问题重构与障碍函数引入
原始问题含不等式约束 \(g(x) \geq 0\) 和 \(x \geq 0\)。为处理非负性,将约束统一为 \(x_1 \geq 0, x_2 \geq 0, x_1 + x_2 - 2 \geq 0\)。内点法通过引入障碍函数将约束问题转化为序列无约束问题。对于约束 \(c_i(x) \geq 0\),对数障碍函数为:
\[\Phi(x) = f(x) - \mu \sum_i \ln(c_i(x)) \]
其中 \(\mu > 0\) 是障碍参数。本例中约束为 \(c_1(x) = x_1, c_2(x) = x_2, c_3(x) = x_1 + x_2 - 2\),因此障碍问题为:
\[\min_{x} \left[ x_1^2 + x_2^2 - \mu \left( \ln(x_1) + \ln(x_2) + \ln(x_1 + x_2 - 2) \right) \right] \]
注意:需在可行域内点(即 \(x_1 > 0, x_2 > 0, x_1 + x_2 > 2\) )求解。
2. 拉格朗日函数与KKT条件
定义拉格朗日函数(含对偶变量 \(\lambda = [\lambda_1, \lambda_2, \lambda_3] \geq 0\)):
\[L(x, \lambda) = f(x) - \lambda_1 x_1 - \lambda_2 x_2 - \lambda_3 (x_1 + x_2 - 2) \]
互补松弛条件为 \(\lambda_1 x_1 = 0, \lambda_2 x_2 = 0, \lambda_3 (x_1 + x_2 - 2) = 0\)。内点法的核心是松弛这些条件:引入参数 \(\mu\),要求 \(\lambda_i c_i(x) = \mu\)(中心路径条件)。
原始对偶系统:对 \(L(x, \lambda)\) 求梯度并加入松弛条件,得到修改的KKT方程:
\[\nabla f(x) - J_c(x)^T \lambda = 0 \quad \text{(原始可行性)} \]
\[c_i(x) \lambda_i = \mu, \quad i=1,2,3 \quad \text{(中心路径条件)} \]
其中 \(J_c(x)\) 是约束 \(c(x)\) 的雅可比矩阵。本例中:
- \(\nabla f(x) = [2x_1, 2x_2]^T\)
- 约束梯度: \(\nabla c_1 = [1,0]^T, \nabla c_2 = [0,1]^T, \nabla c_3 = [1,1]^T\)
- 矩阵形式: \(J_c(x)^T \lambda = [\lambda_1 + \lambda_3, \lambda_2 + \lambda_3]^T\)
因此,原始可行性方程变为:
\[2x_1 - (\lambda_1 + \lambda_3) = 0, \quad 2x_2 - (\lambda_2 + \lambda_3) = 0 \]
中心路径条件:
\[\lambda_1 x_1 = \mu, \quad \lambda_2 x_2 = \mu, \quad \lambda_3 (x_1 + x_2 - 2) = \mu \]
3. 牛顿步方向计算
设当前迭代点为 \((x, \lambda)\),需解非线性系统:
\[F(x, \lambda) = \begin{bmatrix} \nabla f(x) - J_c(x)^T \lambda \\ \Lambda c(x) - \mu e \end{bmatrix} = 0 \]
其中 \(\Lambda = \text{diag}(\lambda)\), \(c(x) = [x_1, x_2, x_1+x_2-2]^T\), \(e = [1,1,1]^T\)。
应用牛顿法: \(F'(x, \lambda) \begin{bmatrix} \Delta x \\ \Delta \lambda \end{bmatrix} = -F(x, \lambda)\),雅可比矩阵 \(F'\) 为:
\[\begin{bmatrix} \nabla^2 f(x) - \sum \lambda_i \nabla^2 c_i(x) & -J_c(x)^T \\ \Lambda J_c(x) & \text{diag}(c(x)) \end{bmatrix} \]
本例中 \(\nabla^2 f(x) = \begin{bmatrix} 2 & 0 \\ 0 & 2 \end{bmatrix}\),线性约束的 \(\nabla^2 c_i = 0\),故左上块为 \(\begin{bmatrix} 2 & 0 \\ 0 & 2 \end{bmatrix}\)。
雅可比矩阵 \(J_c(x) = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 1 & 1 \end{bmatrix}\)。
牛顿系统展开为:
\[\begin{bmatrix} 2 & 0 & -1 & 0 & -1 \\ 0 & 2 & 0 & -1 & -1 \\ \lambda_1 & 0 & x_1 & 0 & 0 \\ 0 & \lambda_2 & 0 & x_2 & 0 \\ \lambda_3 & \lambda_3 & 0 & 0 & x_1+x_2-2 \end{bmatrix} \begin{bmatrix} \Delta x_1 \\ \Delta x_2 \\ \Delta \lambda_1 \\ \Delta \lambda_2 \\ \Delta \lambda_3 \end{bmatrix} = - \begin{bmatrix} 2x_1 - (\lambda_1 + \lambda_3) \\ 2x_2 - (\lambda_2 + \lambda_3) \\ \lambda_1 x_1 - \mu \\ \lambda_2 x_2 - \mu \\ \lambda_3 (x_1+x_2-2) - \mu \end{bmatrix} \]
解此线性系统得牛顿步 \((\Delta x, \Delta \lambda)\)。
4. 迭代与参数更新
步骤:
- 初始化:选择可行内点 \(x^{(0)} = (1.5, 1.5)\),对偶变量 \(\lambda^{(0)} = [1,1,1]^T\),初始 \(\mu = 1\)。
- 循环直到收敛(如 \(\mu < 10^{-6}\)):
- 解牛顿系统得 \((\Delta x, \Delta \lambda)\)。
- 计算步长 \(\alpha \in (0,1]\),确保 \(x + \alpha \Delta x > 0\), \(x_1 + x_2 - 2 > 0\), \(\lambda + \alpha \Delta \lambda \geq 0\)。
- 更新 \(x \leftarrow x + \alpha \Delta x\), \(\lambda \leftarrow \lambda + \alpha \Delta \lambda\)。
- 减小 \(\mu \leftarrow \sigma \mu\)(\(\sigma \in (0,1)\),如 0.1)。
5. 收敛性与结果分析
当 \(\mu \to 0\),解趋近原始问题的最优解。本例理论最优解在 \(x_1 = x_2 = 1\)(约束边界 \(x_1 + x_2 = 2\)),且非负约束非活跃(\(\lambda_1 = \lambda_2 = 0\))。代入KKT条件:
- \(2x_1 - \lambda_3 = 0\), \(2x_2 - \lambda_3 = 0\) ⇒ \(x_1 = x_2\)。
- 由 \(x_1 + x_2 = 2\) 得 \(x_1 = x_2 = 1\), \(\lambda_3 = 2\)。
内点法通过追踪中心路径(\(\mu > 0\) 时解平滑变化)逼近此点。