目录

第九章 罚函数法

本章导读

罚函数法(Penalty Methods)是将约束优化问题转化为一系列无约束优化问题来求解的方法。通过在目标函数中添加惩罚项,使违反约束的解受到“惩罚”,从而引导迭代点向可行域靠近。本章介绍外点罚函数法、内点罚函数法和乘子法。

9.1 外点罚函数法

9.1.1 基本思想

外点罚函数法(Exterior Penalty Method)允许迭代点在可行域外,但随着惩罚因子的增大,违反约束的代价越来越大,迭代点被“推向”可行域。

9.1.2 惩罚函数构造

对于问题: $$\min f(\mathbf{x}) \quad \text{s.t.} \quad g_i(\mathbf{x}) \leq 0, \quad h_j(\mathbf{x}) = 0$$

定义惩罚函数: $$P(\mathbf{x}, \sigma) = f(\mathbf{x}) + \sigma \left[\sum_{i=1}^m [\max(0, g_i(\mathbf{x}))]^2 + \sum_{j=1}^l h_j^2(\mathbf{x})\right]$$

其中 $\sigma > 0$ 是惩罚因子。

9.1.3 算法步骤

算法 9.1(外点罚函数法)

1. 选择初始点 $\mathbf{x}_0$,初始惩罚因子 $\sigma_0 > 0$,放大系数 $c > 1$,精度 $\varepsilon > 0$
2. **for** $k = 0, 1, 2, \ldots$ **do**
   - 求解 $\mathbf{x}_{k+1} = \arg\min_{\mathbf{x}} P(\mathbf{x}, \sigma_k)$,以 $\mathbf{x}_k$ 为初始点
   - **if** $\sigma_k \cdot \left[\sum \max(0, g_i)^2 + \sum h_j^2\right] < \varepsilon$ **then** **break**
   - $\sigma_{k+1} = c \cdot \sigma_k$
3. **return** $\mathbf{x}_{k+1}$

9.1.4 收敛性

定理 9.1

设 $f, g_i, h_j$ 连续,且约束优化问题的最优解存在。则外点罚函数法产生的序列满足: 1. $P(\mathbf{x}_k, \sigma_k) \leq P(\mathbf{x}_{k+1}, \sigma_{k+1})$ 2. $\sum [\max(0, g_i)^2 + h_j^2]$ 关于 $k$ 单调递减趋于0 3. $f(\mathbf{x}_k) \rightarrow f(\mathbf{x}^*)$

9.2 内点罚函数法

9.2.1 基本思想

内点罚函数法(Interior Penalty Method/Barrier Method)要求迭代点始终保持在可行域内部,通过在可行域边界设置“障碍”来阻止迭代点越界。

9.2.2 障碍函数

常用对数障碍函数: $$B(\mathbf{x}, \mu) = f(\mathbf{x}) - \mu \sum_{i=1}^m \ln(-g_i(\mathbf{x}))$$

或倒数障碍函数: $$B(\mathbf{x}, \mu) = f(\mathbf{x}) + \mu \sum_{i=1}^m \frac{-1}{g_i(\mathbf{x})}$$

其中 $\mu > 0$ 是障碍参数。

9.2.3 算法步骤

算法 9.2(内点罚函数法)

1. 选择严格可行初始点 $\mathbf{x}_0$($g_i(\mathbf{x}_0) < 0$),初始参数 $\mu_0 > 0$,缩减系数 $\theta \in (0, 1)$
2. **for** $k = 0, 1, 2, \ldots$ **do**
   - 求解 $\mathbf{x}_{k+1} = \arg\min_{\mathbf{x}} B(\mathbf{x}, \mu_k)$,以 $\mathbf{x}_k$ 为初始点
   - **if** $\mu_k \cdot m < \varepsilon$ **then** **break**
   - $\mu_{k+1} = \theta \cdot \mu_k$
3. **return** $\mathbf{x}_{k+1}$

9.2.4 收敛性

定理 9.2

设 $f, g_i$ 连续,可行域内部非空且有界,最优解存在。则内点罚函数法产生的序列满足: $$\lim_{k \rightarrow \infty} f(\mathbf{x}_k) = f(\mathbf{x}^*)$$

9.3 乘子法(Augmented Lagrangian)

9.3.1 基本思想

乘子法(Augmented Lagrangian Method / 增广拉格朗日法)结合了拉格朗日函数和罚函数的优点,通过更新乘子来避免惩罚因子趋于无穷大。

9.3.2 增广拉格朗日函数

对于等式约束问题: $$\mathcal{L}_A(\mathbf{x}, \boldsymbol{\lambda}, \sigma) = f(\mathbf{x}) + \boldsymbol{\lambda}^T \mathbf{h}(\mathbf{x}) + \frac{\sigma}{2} \|\mathbf{h}(\mathbf{x})\|^2$$

9.3.3 算法步骤

算法 9.3(乘子法——等式约束)

1. 选择初始点 $\mathbf{x}_0$,初始乘子 $\boldsymbol{\lambda}_0$,初始惩罚因子 $\sigma_0$
2. **for** $k = 0, 1, 2, \ldots$ **do**
   - 求解 $\mathbf{x}_{k+1} = \arg\min_{\mathbf{x}} \mathcal{L}_A(\mathbf{x}, \boldsymbol{\lambda}_k, \sigma_k)$
   - 更新乘子:$\boldsymbol{\lambda}_{k+1} = \boldsymbol{\lambda}_k + \sigma_k \mathbf{h}(\mathbf{x}_{k+1})$
   - 适当调整 $\sigma_{k+1}$
3. **return** $\mathbf{x}_{k+1}, \boldsymbol{\lambda}_{k+1}$

9.3.4 收敛性

定理 9.3

在适当条件下,乘子法产生的序列满足: $$\boldsymbol{\lambda}_k \rightarrow \boldsymbol{\lambda}^* \quad \text{且} \quad \mathbf{x}_k \rightarrow \mathbf{x}^*$$

且不需要 $\sigma_k \rightarrow \infty$。

9.4 方法比较

方法 可行点 惩罚因子 优点 缺点
:—::—::—::—::—:
外点法 不一定 $\rightarrow \infty$ 实现简单 病态问题
内点法 始终可行 $\rightarrow 0$ 始终可行 需要内点初始
乘子法 不一定 有限 收敛快 需要更新乘子

9.5 习题

理论题

1. 证明外点罚函数法中 $P(\mathbf{x}_k, \sigma_k) \leq f(\mathbf{x}^*)$。

2. 分析当 $\sigma \rightarrow \infty$ 时,Hesse矩阵的条件数变化。

3. 推导乘子法中乘子更新公式的合理性。

计算题

4. 用外点罚函数法求解:

 $$\min x^2 + y^2 \quad \text{s.t.} \quad x + y = 1$$
 取 $\sigma_0 = 1, c = 10$,进行2次迭代。

5. 用内点罚函数法求解:

 $$\min x \quad \text{s.t.} \quad x \geq 1$$

*本章完*