基于序列二次规划-代理模型-信赖域混合算法进阶题
字数 2187 2025-12-03 01:09:37
基于序列二次规划-代理模型-信赖域混合算法进阶题
题目描述
考虑非线性规划问题:
最小化 \(f(x) = (x_1 - 1)^2 + (x_2 - 2.5)^2\)
约束条件:
\(g_1(x) = x_1 - 2x_2 + 2 \geq 0\)
\(g_2(x) = -x_1 - 2x_2 + 6 \geq 0\)
\(g_3(x) = -x_1 + 2x_2 + 2 \geq 0\)
\(x_1, x_2 \geq 0\)
要求使用序列二次规划(SQP)结合代理模型(如二次插值模型)和信赖域策略求解。代理模型用于近似目标函数和约束的梯度信息,信赖域控制每一步的搜索范围,确保收敛稳定性。
解题过程
-
初始化
- 初始点 \(x_0 = [2, 0]\)(需满足约束,验证:\(g_1 = 2 - 0 + 2 = 4 \geq 0\),其他约束均满足)。
- 设置初始信赖域半径 \(\Delta_0 = 0.5\),代理模型更新阈值 \(\epsilon = 10^{-3}\)。
-
构建代理模型
- 在当前点 \(x_k\) 处,通过二次插值模型近似目标函数和约束:
- 目标函数代理模型:
\(m_k(d) = f(x_k) + \nabla f(x_k)^T d + \frac{1}{2} d^T B_k d\)
其中 \(B_k\) 由拟牛顿法(如BFGS更新)维护,初始 \(B_0 = I\)(单位矩阵)。 - 约束线性化:\(g_j(x_k + d) \approx g_j(x_k) + \nabla g_j(x_k)^T d\)。
- 目标函数代理模型:
- 计算梯度:
\(\nabla f(x) = [2(x_1 - 1), 2(x_2 - 2.5)]\),
\(\nabla g_1 = [1, -2]\), \(\nabla g_2 = [-1, -2]\), \(\nabla g_3 = [-1, 2]\)。
- 在当前点 \(x_k\) 处,通过二次插值模型近似目标函数和约束:
-
求解子问题
- 在信赖域 \(\|d\| \leq \Delta_k\) 内求解二次规划子问题:
最小化 \(m_k(d)\)
约束:\(g_j(x_k) + \nabla g_j(x_k)^T d \geq 0\)(\(j = 1,2,3\)),\(x_k + d \geq 0\)。 - 例如,在 \(x_0 = [2, 0]\) 时:
\(\nabla f(x_0) = [2, -5]\),\(B_0 = I\),
子问题目标:\(m_0(d) = 2.25 + [2, -5] d + \frac{1}{2} d^T I d\)。
约束线性化后:
\(g_1: 4 + [1, -2]d \geq 0\)
\(g_2: 4 + [-1, -2]d \geq 0\)
\(g_3: 0 + [-1, 2]d \geq 0\)
解此QP得 \(d_0 \approx [-0.3, 0.2]\)。
- 在信赖域 \(\|d\| \leq \Delta_k\) 内求解二次规划子问题:
-
接受性检验与信赖域更新
- 计算实际下降量 \(\text{ared} = f(x_k) - f(x_k + d_k)\),
预测下降量 \(\text{pred} = m_k(0) - m_k(d_k)\)。 - 比率 \(r_k = \frac{\text{ared}}{\text{pred}}\):
- 若 \(r_k > 0.75\),扩大信赖域 \(\Delta_{k+1} = 2\Delta_k\);
- 若 \(r_k < 0.25\),缩小信赖域 \(\Delta_{k+1} = 0.5\Delta_k\);
- 否则保持 \(\Delta_{k+1} = \Delta_k\)。
- 若 \(r_k > 0.1\),接受新点 \(x_{k+1} = x_k + d_k\);否则拒绝并缩小信赖域重解子问题。
- 计算实际下降量 \(\text{ared} = f(x_k) - f(x_k + d_k)\),
-
代理模型更新
- 若 \(\|x_{k+1} - x_k\| > \epsilon\),用新点信息更新BFGS矩阵 \(B_k\):
\(s = x_{k+1} - x_k\),\(y = \nabla f(x_{k+1}) - \nabla f(x_k)\),
\(B_{k+1} = B_k - \frac{B_k s s^T B_k}{s^T B_k s} + \frac{y y^T}{s^T y}\)。
- 若 \(\|x_{k+1} - x_k\| > \epsilon\),用新点信息更新BFGS矩阵 \(B_k\):
-
迭代至收敛
- 重复步骤2-5,直到 \(\|d_k\| < 10^{-6}\) 或梯度满足KKT条件。
- 最终解趋近于 \(x^* = [1.4, 1.7]\),对应 \(f^* \approx 0.8\),约束均活跃(\(g_1 = g_2 = 0\))。
关键点
- 代理模型降低函数计算成本,尤其适用于高维或计算昂贵的函数。
- 信赖域避免步长过大导致发散,平衡全局收敛与局部效率。
- 序列二次规划保证超线性收敛,结合代理模型后适用于实际工程优化。