Skip to content

Commit

Permalink
Update 2024-07-03-GAMES001-NOTES-13.md
Browse files Browse the repository at this point in the history
  • Loading branch information
peng00bo00 committed Jul 3, 2024
1 parent e28c1e3 commit e38e2e2
Showing 1 changed file with 121 additions and 0 deletions.
121 changes: 121 additions & 0 deletions _posts/2024-07-03-GAMES001-NOTES-13.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,127 @@ BFGS算法的流程可以参考下面的ppt。

## 带约束优化

对于带约束的优化问题,约束可以分为等式约束以及不等式约束两类。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/kApbxYK.png" width="100%">
</div>

在物理仿真中的常见约束都可以转换为等式约束以及不等式约束。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/COXgyoh.png" width="100%">
</div>

### 等式约束

对于等式约束的情况,我们首先需要考虑在什么情况下目标函数能够达到最优。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/B6iWDDi.png" width="100%">
</div>

以二维情况为例,只有在目标函数的梯度$$\nabla f(x, y)$$与约束$$g(x, y)$$的梯度相互平行时能够达到最优,即$$\nabla f = \lambda \nabla g$$

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/5buopvh.png" width="100%">
</div>

根据上面的分析可以得到等式约束条件下最优点$$x^*$$需要满足的条件:

$$
g_i(x^*) = 0
$$

$$
\nabla f(x^*) = \sum_i \lambda_i \nabla g_i (x^*)
$$

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/n5bsPpo.png" width="100%">
</div>

#### 拉格朗日乘子法

更进一步,等式约束条件的最优化问题可以利用[拉格朗日乘子](https://en.wikipedia.org/wiki/Lagrange_multiplier)进行处理。我们定义原始优化问题的拉格朗日函数为

$$
L(x, \lambda_1, ..., \lambda_n) = f(x) - \sum_i \lambda_i g_i (x)
$$

则等式约束的最优解可以表示为

$$
\nabla L = 0
$$

这样约束优化问题就通过拉格朗日乘子转换为了无约束优化问题。然而,需要注意的是仅通过最小化$$L$$并不能保证得到问题的解,还必须确保$$g_i (x) = 0$$始终成立。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/0BIa5C9.png" width="100%">
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/8iv1JeF.png" width="100%">
</div>

#### Min-Max问题

实际上,与原始约束优化问题等价的拉格朗日优化问题是一个Min-Max问题:

$$
\min_x \max_{\lambda_i} L(x, \lambda_1, ..., \lambda_n)
$$

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/TJwiUyJ.png" width="100%">
</div>

对于Min-Max问题,我们无法直接使用前面介绍过的无约束优化方法进行求解。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/PdkIdqi.png" width="100%">
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/lkjae3m.png" width="100%">
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/bJSJ9QX.png" width="100%">
</div>

#### 对偶问题

直接求解Min-Max问题往往效率较低。在实践中,通常会将Min-Max问题转换为其对偶问题进行处理。这时需要交换最大化和最小化的顺序,先对$$x$$进行最小化,然后对$$\lambda$$进行最大化,从而将Min-Max问题转化为Max-Min问题。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/SkVlcRH.png" width="100%">
</div>

对于一般的函数$$L(x, \lambda)$$,可以证明对偶问题是原始问题的下界,这称为弱对偶关系。而对于凸函数,可以证明原始问题和对偶问题是等价的,称为强对偶条件。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/QuC5bIq.png" width="100%">
</div>

假设强对偶条件成立,则可以使用无约束优化问题的相关求解方法进行处理。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/Hm9Jswk.png" width="100%">
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/jr8zxod.png" width="100%">
</div>

#### 对偶上升法

对于对偶问题,我们可以使用对偶上升法交替更新$$x$$$$\lambda$$进行求解。对偶上升法将原始的约束优化问题转换为了两个无约束优化问题,在优化$$\lambda$$时可以利用梯度下降法进行处理。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/EelKXj3.png" width="100%">
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/JFo3pwr.png" width="100%">
</div>

#### 罚函数法

除了拉格朗日乘子法之外,对于等式约束的优化问题还可以使用罚函数法。其基本思想是将等式约束视为一个惩罚项,当$$x$$违反约束时施加相应的惩罚来约束$$x$$。然而,罚函数法无法保证约束一定能够严格满足,只能保证近似满足。实践中一般需要调节惩罚项系数$$\mu$$来保证优化能够收敛。

<div align=center>
<img src="https://search.pstatic.net/common?src=https://i.imgur.com/aBswLUb.png" width="100%">
</div>

### 不等式约束

## Reference

- [Lecture 14: 优化基础](https://www.bilibili.com/video/BV1MF4m1V7e3?p=15&vd_source=7a2542c6c909b3ee1fab551277360826)

0 comments on commit e38e2e2

Please sign in to comment.