好的,根据您的历史记录,我将为您生成并讲解一个新词条。
非线性规划中的外部惩罚函数法
我将循序渐进地讲解外部惩罚函数法的相关知识,确保您能跟上每个步骤。
步骤 1:核心思想与动机
我们先从一个经典的约束优化问题开始:
\[\begin{aligned} & \min f(\mathbf{x}) \\ & \text{s.t. } g_i(\mathbf{x}) \leq 0, \quad i = 1, \ldots, m \\ & \qquad h_j(\mathbf{x}) = 0, \quad j = 1, \ldots, p \end{aligned} \]
其中,\(f(\mathbf{x})\) 是目标函数,\(g_i(\mathbf{x})\) 是不等式约束,\(h_j(\mathbf{x})\) 是等式约束。
核心困难:直接求解带约束的问题通常很复杂,而求解无约束问题的方法(如梯度下降、牛顿法)则成熟且多样。
外部惩罚函数法的核心动机是:通过一种方式,将上述约束优化问题转化为一系列无约束优化问题来求解。其基本思路是,在原目标函数 \(f(\mathbf{x})\) 上增加一个“惩罚项”,该惩罚项会随着违反约束的程度而增大。这样,一个违反约束的解即使有很好的目标函数值,也会因为高额的“罚款”而变得不优。通过不断加大“罚款力度”,最终迫使无约束问题的解收敛到原约束问题的可行解和最优解。
步骤 2:惩罚函数(罚函数)的构造
惩罚函数由两部分组成:原目标函数 和 惩罚项。
我们定义一个新的无约束函数,称为惩罚函数或增广目标函数:
\[P(\mathbf{x}; \mu) = f(\mathbf{x}) + \mu \cdot \Phi(\mathbf{x}) \]
其中:
- \(\mu > 0\) 是一个惩罚参数,它是一个很大的正数。
- \(\Phi(\mathbf{x})\) 是惩罚项,它度量了约束被违反的程度。
对于外部惩罚函数法,惩罚项 \(\Phi(\mathbf{x})\) 的经典构造是二次惩罚项:
\[\Phi(\mathbf{x}) = \sum_{i=1}^{m} \left[ \max(0, g_i(\mathbf{x})) \right]^2 + \sum_{j=1}^{p} \left[ h_j(\mathbf{x}) \right]^2 \]
让我们拆解这个公式:
- 对于不等式约束 \(g_i(\mathbf{x}) \leq 0\):
- 如果 \(g_i(\mathbf{x}) \leq 0\),说明约束被满足,则
max(0, g_i(x)) = 0,对该约束的惩罚为0。 - 如果 \(g_i(\mathbf{x}) > 0\),说明约束被违反,则
max(0, g_i(x)) = g_i(x),对其平方作为惩罚。违反得越多,惩罚值越大。
- 如果 \(g_i(\mathbf{x}) \leq 0\),说明约束被满足,则
- 对于等式约束 \(h_j(\mathbf{x}) = 0\):
- 只要 \(h_j(\mathbf{x}) \neq 0\),无论正负,其平方都是一个正数,构成惩罚。离等式越远(绝对值越大),惩罚越大。
- 惩罚参数 \(\mu\):它控制着惩罚的“严厉”程度。\(\mu\) 越大,对违反约束的惩罚力度就越强。
步骤 3:算法流程
外部惩罚函数法是一个序列无约束最小化过程。具体步骤如下:
-
初始化:
- 选择一个初始惩罚参数 \(\mu^{(0)} > 0\)(可以是一个较小的数,比如1或10)。
- 选择一个增长因子 \(\rho > 1\)(例如,\(\rho = 10\))。
- 设定一个收敛容差 \(\epsilon > 0\)。
- 选择一个初始点 \(\mathbf{x}^{(0)}\),它不必是可行的(这是“外部”惩罚的特点)。
-
迭代(对于 k = 0, 1, 2, ... ):
a. 求解无约束子问题:以当前迭代点 \(\mathbf{x}^{(k)}\) 为初始点,求解无约束优化问题:
\[ \min_{\mathbf{x}} P(\mathbf{x}; \mu^{(k)}) = f(\mathbf{x}) + \mu^{(k)} \cdot \Phi(\mathbf{x}) \]
使用任意的无约束优化算法(如梯度法、拟牛顿法),得到近似最优解 \(\mathbf{x}^{(k+1)}\)。
b. 检查收敛:如果惩罚项足够小,即 \(\Phi(\mathbf{x}^{(k+1)}) < \epsilon\),则认为约束已被充分满足,\(\mathbf{x}^{(k+1)}\) 是原问题的近似最优解,算法终止。
c. 更新惩罚参数:增大惩罚参数以施加更严厉的惩罚:
\[ \mu^{(k+1)} = \rho \cdot \mu^{(k)} \]
d. 更新初始点:将本次得到的解 \(\mathbf{x}^{(k+1)}\) 作为下一次求解无约束子问题的初始点。
- 输出:最终迭代点 \(\mathbf{x}^*\)。
步骤 4:几何直观与“外部”的含义
想象一个二维的优化问题,可行域是一个圆盘(由不等式约束定义)。外部惩罚函数法的工作方式如下:
- 当 \(\mu\) 较小时,惩罚项 \(\mu \Phi(\mathbf{x})\) 的权重低。此时无约束问题的最优解 \(\mathbf{x}(\mu)\) 可能会落在可行域外部,因为为了最小化 \(f(\mathbf{x})\),它愿意接受一点约束违反带来的小惩罚。
- 随着 \(\mu\) 不断增大,落在可行域外的“罚款”成本变得极高。无约束问题的最优解 \(\mathbf{x}(\mu)\) 会被迫越来越靠近可行域的边界,并最终从外部无限逼近于原约束问题的最优解。
这就是它被称为“外部”惩罚函数法的原因——迭代序列通常从可行域外部逼近最优解。
步骤 5:优点与缺点
优点:
- 概念简单,实现容易:只需要一个无约束优化器的代码。
- 初始点不要求可行:给使用者带来了便利。
- 理论基础清晰:在适当的条件下(如 \(\mu \to \infty\)),算法生成的序列会收敛到原问题的最优解。
缺点:
- 数值困难(病态问题):当 \(\mu\) 变得非常大时,惩罚函数 \(P(\mathbf{x}; \mu)\) 的海塞矩阵条件数会变得非常大。这是因为惩罚项的二阶导数部分被放大了 \(\mu\) 倍。这会导致无约束优化子问题变得极其病态,使得梯度类方法收敛缓慢甚至数值不稳定。
- 收敛速度:通常只有线性收敛速度。
- 精确性:理论上,只有当 \(\mu \to \infty\) 时,无约束问题的解才精确等于约束问题的解。在实践中,我们只能取一个很大的 \(\mu\),因此得到的解总是存在微小的约束违反。
步骤 6:与内点法的对比
为了加深理解,可以将外部惩罚函数法与内点法(也是一种障碍函数法)进行对比:
- 外部罚函数法:惩罚项阻止迭代点违反约束,但允许迭代点位于可行域外部。惩罚参数 \(\mu\) 由小到大增长。
- 内点法(障碍函数法):构造一个在可行域边界处趋于无穷大的“障碍项”,从而强制迭代点始终严格位于可行域内部。障碍参数 \(t\) 由大到小衰减至0。
简单来说,外部罚函数是“先污染后治理”(从外部逼近),而内点法是“洁身自好”(始终保持在内部)。
总结
非线性规划中的外部惩罚函数法是一种经典的约束处理技术。它通过在原目标函数上加一个与约束违反量成正比的惩罚项,将约束问题转化为一系列无约束问题。通过逐步增大惩罚参数,迫使无约束问题的解序列从可行域外部收敛到原问题的最优解。其最大优点是简单通用,但主要缺点是在惩罚参数很大时会产生数值病态问题。它是理解更高级的增广拉格朗日法(结合了惩罚函数和拉格朗日乘子,能缓解病态问题)的重要基础。