【復習筆記】最優化方法 - 4. 約束優化方法


第四章 約束優化方法

本文是本人研究生課程《最優化方法》的復習筆記,主要是總結課件和相關博客的主要內容用作復習。

參考:

【1】https://blog.csdn.net/u012430664/article/details/78745729

【2】https://tfeima.github.io/2018/07/23/KKT%E6%9D%A1%E4%BB%B6--%E7%BA%A6%E6%9D%9F%E4%BC%98%E5%8C%96%E9%97%AE%E9%A2%98%E7%9A%84%E6%9C%80%E4%BC%98%E6%80%A7%E6%9D%A1%E4%BB%B6/

【3】https://www.jianshu.com/p/e36220b30d59

1. 約束優化問題的最優性條件

有效約束

非有效約束

有效集

關於最優性條件的概念比較混亂,整理如下:

課程PPT和課本中,都是上來直接就講一般約束問題,而其他地方有的會分開講。

  • 等式約束問題的最優性條件
    • Lagrange定理(PPT里沒說這部分)
  • 不等式約束問題的最優性條件
    • 三個引理
      • Fakas引理
      • Gordan引理
      • (第三個引理沒有名字,主要是關於下降方向集和可行方向集的交集,見上面博客【2】中“三個引理”部分)
    • 幾何最優性條件(但是該條件難以直接應用)
    • Fritz-John一階必要性條件
    • KKT一階必要性條件(有的地方也稱KT條件)
  • 一般約束問題的最優性條件(這里的一般強調的是:既有等式約束,又有不等式約束的情況
    • 幾何最優性條件
    • Fritz-John一階必要性條件(PPT中稱為“代數最優性條件”)
    • KKT一階必要性條件(有的地方也稱KT條件)
    • 二階最優性條件
      • 必要條件
      • 充分條件
    • 凸規划的最優性條件

需要掌握的內容是KKT條件和凸規划的最優性條件

1.1 KKT條件

\(x^*\)是一般約束優化問題的局部最優解,若:

(i) \(f和c_i(i \in I)在x^*處可微;\)

(ii)\(c_i(i \in E)在x^*處一階連續可微;\)

(iii)向量組\(\{ \nabla c_i(x^*)|i \in E\bigcup I(x^*) \}\)線性無關,

則存在不全為零的實數\(\lambda_i \ge0(i \in I \bigcup E)\),使得

\(\begin{cases} \nabla f(x^*) - \sum_{i \in I \bigcup E} \lambda_i \nabla c_i(x^*) = 0,& \\ \lambda_ic_i(x^*)=0,& i\in I \\ \lambda_i \ge 0,& i\in I \end{cases}\)

1.2 凸規划的最優性條件

序列無約束方法(寫在方法前面)

關於無約束問題,我們通過最優性條件能夠直接求出解,那么這種方法稱為解析法。

但是,對於有約束問題的一般情況是,我們很難通過最優性條件來得到最優解。通常情況下,使用KKT條件求解時,我們要求與約束個數同階的矩陣的逆。我們可以容易驗證某個點是否是最優解,但是很難直接求解。

由於無約束的最優化問題我們已經有了許多高效的解法,於是,對於有約束的問題,我們可以轉化為求解無約束問題,並且用迭代算法來求解。這種方法稱為序列無約束極小化技術SUMT(SequentialUnconstrained Minimization Technique)

算法類型總結:

  • 外罰函數法 ---->適用於等式約束(也可用於不等式約束)
  • 內罰函數法 ---->適用於不等式約束
  • 乘子法
    • 等式約束下的乘子法:把所有等式約束加入到目標函數中即可
    • 不等式約束下的乘子法:先將不等式約束轉變為等式約束,再利用等式約束下的乘子法

2. 序列無約束方法:外罰函數法

參考博客:

【1】https://blog.csdn.net/ice110956/article/details/17631765

2.1 簡述

我們根據約束的特點,構造某種懲罰函數,然后加到目標函數中去,將約束問題求解轉化為一系列的無約束問題。這種“懲罰策略”,對於無約束問題求解過程中的那些企圖違反約束條件的目標點給予懲罰。如下圖:

img

2.2 方法

對於等式約束:

對於不等式約束:

對於一般約束優化問題:

2.3 算法過程

2.4 優缺點與特征

缺點:

  1. 近似最優解往往是不可解的。

  2. 根據收斂性,\(\sigma\)越大越好;但是我們直接求解時,用到求導以及hesse矩陣\(\sigma\)越大,越趨於病態,也就是不好解這是乘子法所要解決的問題

3. 序列無約束方法:內罰函數法

3.1 簡述

參考博客:

【1】https://blog.csdn.net/ice110956/article/details/17631765

相比於外罰函數法在不可行區域加懲罰,內罰函數法在可行域邊界築起高牆,讓目標函數無法穿過,就把目標函數擋在可行域內了。

這種懲罰策略只適用於不等式約束問題,並要求可行域的內點集非空,否則,每個可行點都是邊界點,都加上無窮大懲罰,懲罰也就失去意義了。

img

3.2 方法

3.3 算法過程

3.4 優缺點與特征

4. 序列無約束方法:乘子法

4.1 簡述

乘子法的存在是為了解決罰函數方法的主要缺陷:即當罰因子趨於無窮大或者趨近於0時,對應的罰函數的Hessen陣將變得越來越病態,似的無約束優化方法的計算難以進行下去。

4.2 乘子法解決等式約束問題

乘子的更新:

終止規則:

算法:

4.x 乘子法解決不等式約束問題

4.x 乘子法解決一般約束問題

算法

4.x 對於乘子法的理解部分:

摘自知乎一些大佬的回答


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM