非线性规划中的自适应惩罚函数法进阶题
题目描述:
考虑非线性规划问题:
最小化 \(f(x) = (x_1 - 2)^2 + (x_2 - 1)^2\)
约束条件为:
- \(g_1(x) = x_1^2 - x_2 \leq 0\)
- \(g_2(x) = x_1 + x_2 - 2 \leq 0\)
- \(x_1 \geq 0, x_2 \geq 0\)
要求使用自适应惩罚函数法求解该问题,初始惩罚参数 \(\mu_0 = 1\),自适应更新因子 \(\beta = 2\),初始点 \(x^{(0)} = (0.5, 0.5)\),收敛容差 \(\epsilon = 10^{-4}\)。
解题过程循序渐进讲解:
1. 问题分析
目标函数 \(f(x)\) 是一个二次凸函数,约束包括非线性不等式 \(g_1(x)\) 和线性不等式 \(g_2(x)\)。自适应惩罚函数法通过动态调整惩罚参数,将约束问题转化为一系列无约束子问题。
2. 自适应惩罚函数构造
定义惩罚函数为:
\[ P(x, \mu) = f(x) + \mu \cdot \sum_{i=1}^{2} \left[ \max(0, g_i(x)) \right]^2 \]
其中 \(\mu\) 是惩罚参数,\(\max(0, g_i(x))\) 对违反约束进行惩罚。
- 初始参数:\(\mu_0 = 1\),初始点 \(x^{(0)} = (0.5, 0.5)\)。
3. 第一次迭代(k=0)
步骤 3.1:计算约束违反度
在 \(x^{(0)} = (0.5, 0.5)\) 处:
- \(g_1(x) = 0.25 - 0.5 = -0.25 \leq 0\)(满足)
- \(g_2(x) = 0.5 + 0.5 - 2 = -1 \leq 0\)(满足)
约束违反度 \(V(x^{(0)}) = 0\)。
步骤 3.2:构造惩罚函数
由于无违反约束,惩罚函数为:
\[ P(x, \mu_0) = (x_1 - 2)^2 + (x_2 - 1)^2 \]
步骤 3.3:求解无约束子问题
最小化 \(P(x, \mu_0)\):
- 梯度为 \(\nabla P = [2(x_1 - 2), 2(x_2 - 1)]\),令梯度为零得最优解 \(x^* = (2, 1)\)。
- 但需验证可行性:在 \(x^* = (2, 1)\) 处,\(g_1(x) = 4 - 1 = 3 > 0\)(违反约束),因此需调整惩罚参数。
步骤 3.4:更新惩罚参数
由于 \(x^*\) 不可行,按规则更新 \(\mu\):
\[ \mu_1 = \beta \cdot \mu_0 = 2 \cdot 1 = 2 \]
进入下一次迭代。
4. 第二次迭代(k=1)
步骤 4.1:构造惩罚函数
惩罚函数为:
\[ P(x, \mu_1) = (x_1 - 2)^2 + (x_2 - 1)^2 + 2 \cdot \left[ \max(0, x_1^2 - x_2) \right]^2 + 2 \cdot \left[ \max(0, x_1 + x_2 - 2) \right]^2 \]
步骤 4.2:求解无约束子问题
使用梯度下降法,从 \(x^{(1)} = (0.5, 0.5)\) 开始:
- 计算梯度 \(\nabla P\):
- \(\frac{\partial P}{\partial x_1} = 2(x_1 - 2) + 4 \cdot \max(0, x_1^2 - x_2) \cdot 2x_1 + 4 \cdot \max(0, x_1 + x_2 - 2)\)
- \(\frac{\partial P}{\partial x_2} = 2(x_2 - 1) - 4 \cdot \max(0, x_1^2 - x_2) + 4 \cdot \max(0, x_1 + x_2 - 2)\)
在 \(x^{(1)}\) 处无违反约束,梯度为 \([-3, -1]\),沿负梯度方向搜索。
- 通过线搜得到新点 \(x^{(2)} \approx (1.2, 0.8)\)。
- 验证约束:\(g_1(x^{(2)}) = 1.44 - 0.8 = 0.64 > 0\)(违反),需继续增大 \(\mu\)。
步骤 4.3:更新惩罚参数
\[ \mu_2 = \beta \cdot \mu_1 = 2 \cdot 2 = 4 \]
5. 后续迭代与收敛
重复以上步骤,每次增大 \(\mu_k\) 并求解无约束子问题。随着 \(\mu_k\) 增大,违反约束的惩罚加剧,解逐渐趋近可行域。
- 当 \(\mu_k\) 足够大时,无约束子问题的解逼近原问题的最优解。
- 收敛条件:约束违反度 \(V(x^{(k)}) < \epsilon\) 且目标函数变化小于容差。
最终解近似为 \(x^* \approx (1.0, 1.0)\),此时 \(f(x^*) = 1.0\),约束满足 \(g_1(x^*) = 0, g_2(x^*) = 0\)。
6. 关键点总结
- 自适应惩罚函数法通过动态调整 \(\mu\),平衡目标函数与约束违反。
- 每次迭代求解无约束优化问题,可使用梯度法或牛顿法。
- 惩罚参数更新策略影响收敛速度,需避免 \(\mu\) 过大导致病态。