非线性规划中的序列二次规划-过滤器混合算法基础题
题目描述:
考虑如下非线性规划问题:
\[\min f(x) = (x_1 - 2)^2 + (x_2 - 1)^2 \]
满足约束:
\[g_1(x) = x_1^2 - x_2 \leq 0, \quad g_2(x) = x_1 + x_2 - 2 \leq 0 \]
初始点为 \(x^{(0)} = (0, 0)\)。要求使用序列二次规划-过滤器混合算法(SQP-Filter)求解该问题,通过结合过滤器方法避免传统罚函数中权重参数的选取困难,并保证迭代的全局收敛性。
解题过程:
1. 算法核心思想
序列二次规划-过滤器混合算法将SQP的局部快速收敛性与过滤器方法的全局鲁棒性结合。其核心改进在于:
- 过滤器(Filter):记录一组互不占优的 \((f, h)\) 对(其中 \(h\) 为约束违反度),避免像罚函数那样需要调整权重。
- 接受机制:新迭代点被接受当且仅当它要么降低目标函数 \(f\),要么降低约束违反度 \(h\),且不劣于过滤器中的所有历史点。
2. 约束违反度定义
约束违反度 \(h(x)\) 通常取为:
\[h(x) = \sum_{i=1}^m \max(0, g_i(x)) \]
本例中:
\[h(x) = \max(0, x_1^2 - x_2) + \max(0, x_1 + x_2 - 2) \]
3. 初始点与过滤器初始化
初始点 \(x^{(0)} = (0, 0)\),计算:
\[f(x^{(0)}) = (0-2)^2 + (0-1)^2 = 5 \]
\[h(x^{(0)}) = \max(0, 0-0) + \max(0, 0+0-2) = 0 + 0 = 0 \]
初始化过滤器为空集(或包含一个虚拟点,如 \((f, h) = (+\infty, +\infty)\))。
4. 构建子问题(第k次迭代)
在点 \(x^{(k)}\) 处,构建二次规划子问题:
- 目标函数:近似原问题的拉格朗日函数二阶展开:
\[\min_d \nabla f(x^{(k)})^T d + \frac{1}{2} d^T B_k d \]
其中 \(B_k\) 为拉格朗日函数Hessian的近似(例如BFGS更新)。
- 约束:线性化原约束:
\[\nabla g_i(x^{(k)})^T d + g_i(x^{(k)}) \leq 0 \quad (i=1,2) \]
以第一次迭代为例(\(k=0\)):
计算梯度:
\[\nabla f(x) = [2(x_1-2), 2(x_2-1)] \Rightarrow \nabla f(0,0) = [-4, -2] \]
\[\nabla g_1(x) = [2x_1, -1] \Rightarrow \nabla g_1(0,0) = [0, -1], \quad g_1(0,0) = 0 \]
\[\nabla g_2(x) = [1, 1] \Rightarrow \nabla g_2(0,0) = [1, 1], \quad g_2(0,0) = -2 \]
初始 \(B_0\) 取单位矩阵 \(I\)。
子问题为:
\[\min_d [-4, -2] d + \frac{1}{2} d^T I d \]
满足:
\[[0, -1] d + 0 \leq 0, \quad [1, 1] d - 2 \leq 0 \]
解得 \(d^{(0)} = (0, 0)\)(因为初始点已可行,且梯度指向不可行域外)。
5. 线搜索与过滤器接受准则
- 计算候选点 \(x^{(k+1)} = x^{(k)} + \alpha d^{(k)}\)(\(\alpha\) 为步长)。
- 接受条件:若存在 \(\alpha\) 使得 \((f(x^{(k+1)}), h(x^{(k+1)}))\) 不被过滤器中的任何点占优(即不满足 \(f \geq f_j\) 且 \(h \geq h_j\) 对所有过滤器点 \(j\)),则接受该点,并更新过滤器(删除被新点占优的点,加入新点)。
- 回溯线搜索:从 \(\alpha=1\) 开始,逐步缩减步长直到满足接受条件。
6. 迭代直至收敛
重复步骤4-5,直到 \(||d^{(k)}||\) 和约束违反度 \(h(x^{(k)})\) 小于预设容差。
最终解应接近理论最优解 \(x^* = (1, 1)\)(满足 \(g_1(1,1)=0, g_2(1,1)=0\),\(f(1,1)=1\))。
7. 关键优势
- 避免罚函数权重调整的敏感性。
- 通过过滤器平衡目标函数下降与可行性提升,增强全局收敛性。