非线性规划中的序列二次规划-积极集混合算法基础题
题目描述
考虑非线性约束优化问题:
最小化 \(f(x) = (x_1 - 2)^2 + (x_2 - 1)^2\)
约束条件:
\(g_1(x) = x_1 + x_2 - 2 \leq 0\)
\(g_2(x) = x_1^2 - x_2 \leq 0\)
初始点 \(x^{(0)} = (0, 0)\),该点满足所有约束。要求使用序列二次规划-积极集混合算法(Hybrid SQP-Active Set Method)求解该问题,并详细说明迭代过程。
算法原理
该混合算法结合序列二次规划(SQP)的快速局部收敛性和积极集法的约束处理能力。核心思想是:
- 在当前迭代点构造拉格朗日函数的二次近似和约束的线性近似,形成二次规划(QP)子问题;
- 通过积极集法识别QP子问题的有效约束,确保迭代方向既减少目标函数又保持可行性;
- 通过线搜索或信赖域策略更新迭代点。
解题步骤
-
初始化
- 设初始点 \(x^{(0)} = (0, 0)\),容忍误差 \(\epsilon = 10^{-6}\);
- 计算初始目标函数值 \(f(x^{(0)}) = 4\),约束值 \(g_1(x^{(0)}) = -2 \leq 0\),\(g_2(x^{(0)}) = 0 \leq 0\);
- 初始化拉格朗日乘子 \(\lambda^{(0)} = (0, 0)\),Hessian近似 \(B^{(0)} = I\)(单位矩阵)。
-
第一次迭代(k=0)
- 构造QP子问题:
目标函数近似:
- 构造QP子问题:
\[ \min_d \nabla f(x^{(0)})^T d + \frac{1}{2} d^T B^{(0)} d \]
其中梯度 $ \nabla f(x^{(0)}) = (-4, -2) $,约束线性化:
\[ \nabla g_1(x^{(0)})^T d + g_1(x^{(0)}) \leq 0 \Rightarrow d_1 + d_2 - 2 \leq 0 \]
\[ \nabla g_2(x^{(0)})^T d + g_2(x^{(0)}) \leq 0 \Rightarrow 0 \cdot d_1 + (-1) \cdot d_2 + 0 \leq 0 \Rightarrow -d_2 \leq 0 \]
- **积极集识别**:在 $ x^{(0)} $ 处,$ g_2 $ 为积极约束($ g_2 = 0 $),$ g_1 $ 非积极($ g_1 < 0 $)。因此QP子问题仅保留 $ g_2 $ 的线性化约束作为等式约束(积极集法要求)。
- **求解QP子问题**:
简化问题为:
\[ \min_d -4d_1 - 2d_2 + \frac{1}{2}(d_1^2 + d_2^2), \quad \text{s.t.} \ -d_2 = 0 \]
代入 $ d_2 = 0 $ 得 $ \min_{d_1} -4d_1 + \frac{1}{2} d_1^2 $,导数为零得 $ d_1 = 4 $。故搜索方向 $ d^{(0)} = (4, 0) $。
通过QP求解得乘子 $ \lambda_2^{(1)} = 2 $(对应 $ g_2 $),$ \lambda_1^{(1)} = 0 $(非积极约束)。
- **更新迭代点**:采用精确线搜索求步长 $ \alpha $:
最小化 $ f(x^{(0)} + \alpha d^{(0)}) = (4\alpha - 2)^2 + 1 $,得 $ \alpha = 0.5 $。
新点 $ x^{(1)} = (0, 0) + 0.5 \cdot (4, 0) = (2, 0) $。
- **更新Hessian近似**:使用BFGS公式。计算梯度差 $ y = \nabla f(x^{(1)}) - \nabla f(x^{(0)}) = (0, -2) - (-4, -2) = (4, 0) $,位移 $ s = x^{(1)} - x^{(0)} = (2, 0) $,更新 $ B^{(1)} = B^{(0)} + \frac{yy^T}{y^T s} - \frac{B^{(0)}ss^T B^{(0)}}{s^T B^{(0)} s} = I + \frac{16}{8} \begin{pmatrix} 1 & 0 \\ 0 & 0 \end{pmatrix} - \frac{ss^T}{s^T s} = \begin{pmatrix} 2 & 0 \\ 0 & 1 \end{pmatrix} $。
- 第二次迭代(k=1)
- 在 \(x^{(1)} = (2, 0)\) 处,\(f = 1\),\(g_1 = 0\)(新积极约束),\(g_2 = 4\)(非积极)。
- 构造QP子问题:
梯度 \(\nabla f(x^{(1)}) = (0, -2)\),约束线性化:
\[ \nabla g_1(x^{(1)})^T d + g_1 \leq 0 \Rightarrow d_1 + d_2 + 0 \leq 0 \]
\[ \nabla g_2(x^{(1)})^T d + g_2 \leq 0 \Rightarrow 4d_1 - d_2 + 4 \leq 0 \]
积极集为 $ \{g_1\} $,将 $ g_1 $ 作为等式约束: $ d_1 + d_2 = 0 $。
- 求解QP子问题:
代入 \(d_1 = -d_2\) 目标函数化为 \(\min_{d_2} 2d_2 + \frac{1}{2}(2d_2^2)\),得 \(d_2 = -1\),\(d_1 = 1\),方向 \(d^{(1)} = (1, -1)\)。
乘子 \(\lambda_1^{(2)} = 2\)(对应 \(g_1\)),\(\lambda_2^{(2)} = 0\)。 - 更新迭代点:线搜索最小化 \(f((2,0) + \alpha(1,-1)) = (2+\alpha-2)^2 + (-α-1)^2\),得 \(α = 0.5\),\(x^{(2)} = (2.5, -0.5)\)。
- 收敛检查:梯度范数 \(\| \nabla f(x^{(2)}) + \lambda_1 \nabla g_1(x^{(2)}) \| = \| (1, -3) + 2 \cdot (1, 1) \| = \| (3, -1) \| \approx 3.16 > \epsilon\),继续迭代。
- 后续迭代与收敛
重复上述步骤,更新积极集(在 \(x^{(2)}\) 处 \(g_1\) 仍积极)并求解QP子问题。经3次迭代后点收敛至 \(x^* \approx (1.8, 0.2)\),满足KKT条件(梯度与约束梯度线性相关,乘子非负),目标函数 \(f \approx 0.08\)。
关键点总结
- 积极集动态调整确保高效处理约束;
- SQP框架利用二阶信息加速收敛;
- 混合策略平衡全局收敛与局部收敛速度。