非线性规划中的序列二次规划-乘子法混合算法基础题
题目描述
考虑如下非线性规划问题:
\[\min f(x) = x_1^2 + x_2^2 + x_3^2 \]
满足约束:
\[h(x) = x_1 + x_2 + x_3 - 1 = 0, g(x) = x_1^2 + x_2^2 - x_3 \leq 0. \]
其中 \(x = (x_1, x_2, x_3)^T\)。要求使用序列二次规划-乘子法混合算法(SQP-Multiplier Hybrid Method)求解该问题,初始点设为 \(x^{(0)} = (0, 0, 0)^T\),初始拉格朗日乘子 \(\lambda^{(0)} = 0\)(对应等式约束)和 \(\mu^{(0)} = 0\)(对应不等式约束),初始罚参数 \(\rho = 10\)。
解题过程
-
算法原理简介
SQP-乘子法混合算法结合了序列二次规划(SQP)的快速局部收敛性和乘子法(增广拉格朗日法)的全局稳定性。其核心思想是:- 在每一步迭代中,构造一个二次规划(QP)子问题,该子问题的目标函数融合了原问题的拉格朗日函数二阶近似和乘子法的罚项。
- 通过求解QP子问题得到搜索方向,并结合乘子法的更新规则调整拉格朗日乘子和罚参数。
对于问题:
\[ \min f(x) \quad \text{s.t.} \quad h(x) = 0, \quad g(x) \leq 0, \]
混合算法的QP子问题定义为:
\[ \min_d \nabla f(x)^T d + \frac{1}{2} d^T B d + \frac{\rho}{2} \left( \|h(x) + \nabla h(x)^T d\|^2 + \|\max(0, g(x) + \nabla g(x)^T d)\|^2 \right), \]
其中 \(B\) 是拉格朗日函数 \(L(x, \lambda, \mu) = f(x) + \lambda^T h(x) + \mu^T g(x)\) 的Hessian近似,\(\rho\) 为罚参数。约束条件为 \(d\) 的线性化约束(可选,本例中省略以简化计算)。
-
初始化参数
给定 \(x^{(0)} = (0, 0, 0)^T\),\(\lambda^{(0)} = 0\),\(\mu^{(0)} = 0\),\(\rho = 10\)。设定收敛容差 \(\epsilon = 10^{-6}\),初始Hessian近似 \(B^{(0)} = I\)(单位矩阵)。 -
第一次迭代(k=0)
- 步骤1:计算函数值和梯度
当前点 \(x^{(0)} = (0, 0, 0)^T\):
- 步骤1:计算函数值和梯度
\[ f(x^{(0)}) = 0, \quad \nabla f(x^{(0)}) = (0, 0, 0)^T, \]
\[ h(x^{(0)}) = -1, \quad \nabla h(x^{(0)}) = (1, 1, 1)^T, \]
\[ g(x^{(0)}) = 0, \quad \nabla g(x^{(0)}) = (0, 0, -1)^T. \]
- 步骤2:构造QP子问题
忽略约束简化计算,目标函数为:
\[ \min_d \frac{1}{2} d^T B^{(0)} d + \frac{\rho}{2} \left( \|h(x^{(0)}) + \nabla h(x^{(0)})^T d\|^2 + \|\max(0, g(x^{(0)}) + \nabla g(x^{(0)})^T d)\|^2 \right). \]
代入数值:
\[ \min_d \frac{1}{2} d^T I d + 5 \left( \| -1 + d_1 + d_2 + d_3 \|^2 + \|\max(0, 0 - d_3)\|^2 \right). \]
由于 $g(x^{(0)}) = 0$,不等式约束的惩罚项在 $d_3 \leq 0$ 时为 $0$,在 $d_3 > 0$ 时为 $5 d_3^2$。但初始点满足约束,暂按 $d_3 \leq 0$ 处理。
简化目标函数:
\[ \min_d \frac{1}{2} \|d\|^2 + 5 (-1 + d_1 + d_2 + d_3)^2. \]
- 步骤3:求解QP子问题
对 \(d\) 求导并令导数为零:
\[ d + 10 (-1 + d_1 + d_2 + d_3) \cdot (1, 1, 1)^T = 0. \]
解得 $d_1 = d_2 = d_3$,代入方程:
\[ d_1 + 10 (-1 + 3d_1) = 0 \implies d_1 = \frac{10}{31}. \]
故 $d^{(0)} = (10/31, 10/31, 10/31)^T$。
- 步骤4:更新迭代点
\(x^{(1)} = x^{(0)} + d^{(0)} = (10/31, 10/31, 10/31)^T\)。 - 步骤5:更新乘子和罚参数
使用乘子法更新规则:
\[ \lambda^{(1)} = \lambda^{(0)} + \rho h(x^{(1)}) = 0 + 10 \cdot (10/31 + 10/31 + 10/31 - 1) = 10 \cdot (30/31 - 1) = -\frac{10}{31}, \]
\[ \mu^{(1)} = \max\left(0, \mu^{(0)} + \rho g(x^{(1)})\right) = \max\left(0, 0 + 10 \cdot ((10/31)^2 + (10/31)^2 - 10/31)\right) = \max\left(0, 10 \cdot (200/961 - 10/31)\right). \]
计算 $200/961 - 10/31 = 200/961 - 310/961 = -110/961 < 0$,故 $\mu^{(1)} = 0$。
罚参数 $\rho$ 暂不调整。
- 步骤6:更新Hessian近似
使用BFGS公式更新 \(B^{(1)}\)(需计算梯度差和位移差,此处略过详细计算)。
-
收敛性检查
计算约束违反度:\(\|h(x^{(1)})\| + \|\max(0, g(x^{(1)}))\| = |30/31 - 1| + 0 = 1/31 \approx 0.032 > \epsilon\),未收敛,继续迭代。 -
后续迭代
重复步骤1-6,直至约束违反度和梯度范数均小于 \(\epsilon\)。最终解逼近理论最优解 \(x^* = (1/3, 1/3, 1/3)^T\),此时 \(f(x^*) = 1/3\),约束严格满足。
总结
SQP-乘子法混合算法通过结合二次逼近和乘子更新,在保证收敛性的同时提升效率。本例展示了其初步迭代过程,实际应用中需严谨处理QP约束和参数调整。