非线性规划中的自适应惩罚函数法基础题
题目描述
考虑非线性规划问题:
最小化 \(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^{(0)} = (0, 0)\),该点不满足约束(\(g_1(0,0) = -2 \leq 0\) 成立,但 \(g_2(0,0) = 0 \leq 0\) 成立,实际是可行点?需验证:\(g_1(0,0)=-2 \leq 0\),\(g_2(0,0)=0 \leq 0\),故可行。但为练习,我们仍从该点开始)。
要求使用自适应惩罚函数法,通过调整惩罚权重逐步逼近最优解。
解题过程
1. 方法原理
自适应惩罚函数法将约束问题转化为一系列无约束子问题。惩罚函数形式为:
\[ P(x, \mu) = f(x) + \mu \sum_{i=1}^m \max(0, g_i(x))^2 \]
其中 \(\mu > 0\) 是惩罚权重。自适应策略:初始权重 \(\mu_0\) 较小,每次求解子问题后,若约束违反度未降到容差内,则增大 \(\mu\)(如 \(\mu_{k+1} = 10\mu_k\)),重新求解。
2. 第一步(\(k=0\),\(\mu_0 = 1\))
- 惩罚函数:
\[ P(x, 1) = (x_1 - 2)^2 + (x_2 - 1)^2 + 1 \cdot \left[ \max(0, x_1 + x_2 - 2)^2 + \max(0, x_1^2 - x_2)^2 \right] \]
在 \(x^{(0)} = (0,0)\):
-
约束违反度:\(g_1 = -2 \leq 0\),\(g_2 = 0 \leq 0\),无违反,惩罚项为 0。
-
但需优化 \(P(x,1)\):从 \(x^{(0)}\) 开始,用梯度下降法(或解析求导)。
-
梯度计算:
\(\nabla f = [2(x_1-2), 2(x_2-1)]\),
惩罚项梯度需分情况:- 若 \(g_1 > 0\),贡献 \(2\mu (x_1+x_2-2) \cdot [1, 1]\);若 \(g_2 > 0\),贡献 \(2\mu (x_1^2 - x_2) \cdot [2x_1, -1]\)。
在可行域内(如 \(x^{(0)}\)),惩罚项梯度为 0,故 \(\nabla P = \nabla f = [-4, -2]\)。
- 若 \(g_1 > 0\),贡献 \(2\mu (x_1+x_2-2) \cdot [1, 1]\);若 \(g_2 > 0\),贡献 \(2\mu (x_1^2 - x_2) \cdot [2x_1, -1]\)。
-
迭代:沿负梯度方向搜索。设步长 \(\alpha = 0.1\):
\(x^{(1)} = (0,0) - 0.1 \cdot [-4, -2] = (0.4, 0.2)\)。
检查可行性:\(g_1 = 0.4+0.2-2 = -1.4 \leq 0\),\(g_2 = 0.16 - 0.2 = -0.04 \leq 0\),仍可行。
继续优化至收敛(如梯度模小于 \(10^{-3}\)),得 \(x^{(1)}_{opt} \approx (2,1)\)(无约束最优解,但需验证可行性)。
3. 第二步(\(k=1\),\(\mu_1 = 10\))
- 在 \(x^{(1)}_{opt} = (2,1)\):
\(g_1 = 2+1-2 = 1 > 0\)(违反!),\(g_2 = 4-1=3 > 0\)(违反!)。
惩罚函数变为:
\[ P(x,10) = f(x) + 10 \left[ (x_1+x_2-2)^2 + (x_1^2 - x_2)^2 \right] \]
- 梯度计算:
\(\nabla P = \nabla f + 20(x_1+x_2-2) \cdot [1,1] + 20(x_1^2 - x_2) \cdot [2x_1, -1]\)。
在 \((2,1)\):\(\nabla f = (0,0)\),惩罚梯度为 \(20(1) \cdot [1,1] + 20(3) \cdot [4, -1] = [20+240, 20-60] = [260, -40]\)。
梯度不为零,需重新优化。从 \((2,1)\) 开始梯度下降,步长需小(如 0.001):
\(x^{(2)} = (2,1) - 0.001 \cdot [260, -40] = (1.74, 1.04)\)。
重复迭代至收敛(如到 \(x^* \approx (1.0, 1.0)\)),此时 \(g_1 = 0\),\(g_2 = 0\),约束满足。
4. 收敛判断
在 \(x^* = (1,1)\):
- 目标函数值 \(f = (1-2)^2 + (1-1)^2 = 1\)
- 约束违反度为 0,且 \(\mu\) 已足够大(\(\mu=10\) 时惩罚项主导,迫使解可行)。
实际需多次调整 \(\mu\) 直至解稳定。最终最优解为 \((1,1)\),对应 \(f=1\)。
5. 结论
自适应惩罚函数法通过逐步增大惩罚权重,将不可行点拉回可行域。本例中,从无约束最优解 \((2,1)\)(不可行)调整至可行最优解 \((1,1)\),体现了惩罚项对约束的处理作用。