非线性规划中的序列二次规划-积极集-乘子法-过滤器混合算法基础题
题目描述
考虑一个标准形式的非线性规划问题:
最小化 \(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 = (x_1, x_2) \in \mathbb{R}^2\)。
要求使用序列二次规划(SQP)框架,结合积极集策略识别有效约束,利用乘子法处理约束违反,并通过过滤器机制避免目标函数与约束违反的权衡问题,最终找到局部最优解。
解题过程
-
算法框架概述
SQP-积极集-乘子法-过滤器混合算法的核心思想是:- 在每次迭代中构造一个二次规划(QP)子问题,近似原问题。
- 使用积极集法快速识别有效约束,减少计算量。
- 乘子法将约束违反惩罚融入拉格朗日函数,改善收敛性。
- 过滤器机制替代传统罚函数,避免目标函数与约束违反的权衡问题。
-
初始化
设初始点 \(x^{(0)} = (0, 0)\),初始乘子估计 \(\lambda^{(0)} = (0, 0)\),初始过滤器 \(\mathcal{F} = \emptyset\)。容忍误差 \(\epsilon = 10^{-6}\)。
计算初始目标函数值 \(f(x^{(0)}) = 5\) 和约束违反度 \(h(x^{(0)}) = \max(0, g_1(x^{(0)}), g_2(x^{(0)})) = 2\)。 -
迭代步骤(以第k次迭代为例)
步骤1:构造QP子问题
在当前点 \(x^{(k)}\) 处,计算梯度:
\(\nabla f(x^{(k)}) = [2(x_1^{(k)} - 2), 2(x_2^{(k)} - 1)]\)
\(\nabla g_1(x^{(k)}) = [1, 1]\),\(\nabla g_2(x^{(k)}) = [2x_1^{(k)}, -1]\)。
拉格朗日函数为 \(L(x, \lambda) = f(x) + \lambda_1 g_1(x) + \lambda_2 g_2(x)\),其Hessian矩阵 \(H^{(k)}\) 用BFGS公式近似更新。
QP子问题形式:
最小化 \(\nabla f(x^{(k)})^T d + \frac{1}{2} d^T H^{(k)} d\)
满足 \(g_i(x^{(k)}) + \nabla g_i(x^{(k)})^T d \leq 0 \quad (i=1,2)\)。步骤2:积极集策略求解QP
- 检测有效约束:在 \(x^{(0)} = (0,0)\) 时,\(g_1\) 和 \(g_2\) 均违反(值分别为-2和0),但 \(g_2\) 处于边界,故初始积极集 \(\mathcal{A} = \{2\}\)。
- 求解仅含积极约束的QP,得到搜索方向 \(d^{(k)}\)。若新约束被激活,更新积极集。
步骤3:乘子法更新
通过QP解得的乘子 \(\lambda^{(k)}\) 估计约束重要性,修正拉格朗日函数以改善可行性。
更新公式:\(\lambda^{(k+1)} = \max(0, \lambda^{(k)} + \mu g_i(x^{(k)}))\),其中 \(\mu\) 为惩罚参数。步骤4:过滤器机制判断接受点
定义违反度 \(\theta(x) = \sum_{i=1}^2 \max(0, g_i(x))\)。
新点 \(x^{(k+1)} = x^{(k)} + \alpha d^{(k)}\)(\(\alpha\) 通过线搜索确定)需满足:- 要么 \(f(x^{(k+1)}) < f(x^{(j)}) - \gamma \theta(x^{(j)})\) 对所有 \((f(x^{(j)}), \theta(x^{(j)})) \in \mathcal{F}\)(目标下降条件),
- 要么 \(\theta(x^{(k+1)}) < \beta \theta(x^{(j)})\) 对所有 \((f(x^{(j)}), \theta(x^{(j)})) \in \mathcal{F}\)(违反度下降条件)。
若接受,将 \((f(x^{(k+1)}), \theta(x^{(k+1)}))\) 加入过滤器,并删除被占优的点。
步骤5:收敛检查
若 \(\|d^{(k)}\| < \epsilon\) 且 \(\theta(x^{(k)}) < \epsilon\),停止迭代,输出 \(x^{(k)}\) 为最优解。 -
实例迭代演示
- 第1次迭代:从 \(x^{(0)} = (0,0)\) 开始,QP解为 \(d^{(0)} = (1, 1)\),步长 \(\alpha = 0.5\) 满足过滤器条件,更新 \(x^{(1)} = (0.5, 0.5)\),\(f(x^{(1)}) = 2.5\),\(\theta(x^{(1)}) = 0.25\)。
- 持续迭代至 \(x^{(k)} \approx (1, 1)\),此时 \(f(x) = 1\),约束满足(违反度为0),达到局部最优。
总结
本算法通过SQP保证局部收敛,积极集法提升效率,乘子法增强稳定性,过滤器避免目标与约束的权衡陷阱。适用于中小规模非线性规划问题。