Operations Research課程之帶約束的非線性規劃(凸分析|Lagrange松弛|Lagrange對偶|KKT條件)

目錄

1.凸分析

1.1 為什么需要凸分析

1.2 凸分析相關概念

1.3 凸規劃定義

1.4 單變量NLP凸分析?

1.5 多變量NLP凸分析

2.拉格朗日松弛

2.1 拉格朗日函數

2.2 拉格朗日對偶

2.2.1 弱對偶性?

2.2.2 凸性

2.2.3?強對偶性

2.2.4 與LP對偶關系

3.KKT條件?

3.1 KKT介紹

3.2 KKT舉例


來源:Coursera課程/Operations Research (3): Theory week5/6

課程前言:

運籌學包括三個部分:模型,算法和理論,大部分場景下,理論(theory)是關于最優性條件(optimality conditions),求解實際問題需要建立模型,求解模型需要使用算法,而理論能幫助開發更好的算法

(1)最優性條件

  • 線性規劃:對偶性
  • 整數規劃:全單模矩陣
  • 帶約束的非線性規劃:拉格朗日和KKT條件?

博客Operations Research課程之非線性規劃(梯度下降|牛頓法|Gurobi+Python)中提到的梯度下降和牛頓法適用于無約束的非線性規劃,對于帶約束的非線性規劃問題,本文首先介紹凸規劃,然后介紹兩種工具:Lagrangian relaxation和?KKT condition

1.凸分析

1.1 為什么需要凸分析

與LP問題相比,NLP更困難

  • 在NLP中,一個局部最小(最優)不總是全局最小(最優),如左圖所示,x1是局部最小但是不是全局最小
  • 在有最優解NLP中,可能不存在極點最優解(extreme point),如右圖所示,最優解是(2,2)但是極點是(0,4)和(4,0)

沒有人能開發有效的算法來解決通用NLP,為了更容易求解NLP(找到一個全局最優解),我們希望NLP有以下特征:

  • 我們希望局部最優就是全局最優
  • 我們希望保證有極點最優解(當存在一個最優解時)

了解這些特征,就需要了解凸分析(convex analysis)?

1.2 凸分析相關概念

(1)凸集convex set

定義1(凸集convex set)

凸集中任意兩點的連線也在集合內,如左圖所示,右圖不是凸集?

(2)?凸函數convex functio

?定義2(凸函數convex function)

?凸函數有一個上升曲線,任意兩點連線上某點的取值要大于實際取值,如左圖所示,右圖不是凸函數

(3)?凹函數concave?function

?定義3(凹函數concave?function)

上面紅色框的是凸集和凸函數,其中凸函數最后一個是三維,畫圖會發現一個碗的形狀,因此是凸函數。?

(4)全局最優與局部最優

命題1(凸函數的全局最優性global optimality)

(5)極點與最優解

命題2

對任何在凸可行域上有全局最小的凹函數,全局最小是一個極點

1.3 凸規劃定義

根據上述兩個命題可知,如果想在凸可行域F上最小化函數f

  • 如果函數f是凸的,就搜索一個局部最小
  • 如果函數f是凹的,就搜索F中的極點

對于LP問題,有兩個重要特征

因此我們可以用貪婪搜索關注極點,從而找到最優解,這也是單純形法的思想,單純形法通過不斷搜索更好的基本可行解(極點)來尋找最優解。

定義4(凸規劃convex program CP)

如果一個NLP的可行域是凸的并且目標函數在可行域上也是凸的,那么這個NLP是CP問題

根據定義4可得命題5?

命題5

1.4 單變量NLP凸分析?

前面定義了凸性和凸規劃的概念,在給定一個函數后,我們需要知道它是不是凸的,比較簡單的函數可以通過凸函數定義來證明,但是復雜的函數是不能直接看出的,首先針對單變量NLP

單變量NLP凸分析條件

其中條件2稱為FOC(first order condition),對所有函數,FOC都是局部最優的必要條件,對于凸函數,FOC還是全局最優的充分條件。求解NLP問題,凸分析對于尋找局部最優或全局最優是非常關鍵的。以庫存控制中的EOQ經濟訂貨批量模型為例說明對于單變量NLP的凸分析過程

1.5 多變量NLP凸分析

?在Operations Research課程之非線性規劃中介紹過梯度和Hessian矩陣

對于多變量NLP,其凸性理論和單變量類似

多變量NLP凸分析條件

?有一個關鍵概念,條件1中的半正定(positive semi-definite PSD)

半正定(positive semi-definite PSD)

下面舉例說明多變量NLP凸分析及求解過程

雖然不能有效的解決通類NLP問題(general NLP),但是求解CP問題還是存在一些有效的算法,對于CP類的NLP,可以結合凸分析使用上述1.4和1.5節中的方法,如果FOC難以直接求解,還可以使用牛頓法和梯度下降,但是這些方法都只適用于無約束,接下來介紹求解帶約束的非線性凸規劃問題用到的方法:拉格朗日松弛和KKT條件

2.拉格朗日松弛

2.1 拉格朗日函數

對于帶約束的非線性規劃問題,當約束難處理時,最直觀的方法是先忽略這些約束,求解問題找到最優解,如果滿足約束就是原問題的最優解,如果不滿足約束只能尋找一個最近的可行解。很顯然這種方法有缺陷。現在換一種思路:不是直接忽略所有約束,而是允許違反約束,但是盡量保證可行性。

拉格朗日松弛將約束條件通過拉格朗日乘子結合到目標函數中,其核心是獎勵可行性(reward feasibility)和懲罰不可行(penalize infeasibility)。注意拉格朗日乘子也可以為負,但是后面表達式也要變化,只要兩者乘積能表示核心即可。下面是一個簡單的轉化例子

2.2 拉格朗日對偶

2.2.1 弱對偶性?

弱對偶性:拉格朗日松弛能提供原始NLP一個bound

回想LP及其對偶問題:任何可行的對偶解都能為原始LP提供一個bound,通過尋找對偶最優解能為原始LP提供最緊的bound,這和拉格朗日松弛為原始NLP提供bound類似,因此最小化拉格朗日函數也稱為拉格朗日對偶

拉格朗日對偶除了具有弱對偶性,還有一些其它需要探討的性質:

  • 拉格朗日函數的凸性
  • 強對偶性
  • LP對偶和拉格朗日對偶的關系

2.2.2 凸性

拉格朗日對偶是凸的

無論原始NLP凸性如何,拉格朗日對偶NLP都是凸的,因此可以用數值算法比如梯度下降求解,這個關鍵性質正是拉格朗日對偶在求解帶約束非線性規劃問題的優勢

2.2.3?強對偶性

拉格朗日對偶的強對偶性

2.2.4 與LP對偶關系

LP對偶是拉格朗日對偶的一種特例

3.KKT條件?

3.1 KKT介紹

KKT條件根據三位學者命名,全稱Karush-Kuhn-Tucker conditions,用于判斷帶約束的非線性規劃的某個解是否是最優解候選,注意此處適用于滿足正則條件(regular NLP),KKT條件的證明可自尋其它資料,KKT條件使用到了2.1節拉格朗日函數的概念

KKT條件對于NLP只是必要條件,但是對CP是必要且充分條件

對于一般的非線性規劃問題,最優解一定滿足KKT,但是滿足KKT的不一定是最優解。如果這個非線性規劃問題屬于凸規劃,那么滿足KKT條件的解就是全局最優解。?

3.2 KKT舉例

在KKT條件下能幫助為帶約束的非線性規劃問題找到一些候選解,比較這些解再尋找全局最優。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39316.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis 管道(Pipeline)是什么?有什么用?

目錄 1. redis 客戶端-服務端模型的不足之處 2. redis 管道是什么?有什么好處? 3. 管道的使用場景 4. 管道使用的注意事項 1. redis 客戶端-服務端模型的不足之處 眾所周知,redis 是一個客戶端-服務端的模型設計,客戶端向服務…

Qt的信號與槽機制底層原理

Qt的信號與槽機制是Qt框架的核心特性之一,它允許對象之間進行解耦通信。信號(Signal)是一個類成員函數,當特定事件發生時,信號會被自動觸發。槽(Slot)也是一個類成員函數,它可以被信…

上海網站建設如何做

上海是中國最繁華的城市之一,作為全國的經濟、文化和科技中心,網站建設在上海變得越來越重要。如何做好上海網站建設,讓網站更加吸引人,成為企業和個人宣傳自身的重要平臺呢? 首先,要有清晰的定位和目標。在…

SCI一區級 | Matlab實現BO-Transformer-BiLSTM時間序列預測

SCI一區級 | Matlab實現BO-Transformer-BiLSTM時間序列預測 目錄 SCI一區級 | Matlab實現BO-Transformer-BiLSTM時間序列預測效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 1.【SCI一區級】Matlab實現BO-Transformer-BiLSTM時間序列預測,貝葉斯優化Transfor…

Zoom視頰會議軟件使用

GPT-3.5 (OpenAI) Zoom是一款極受歡迎的視頻會議軟件。使用Zoom可以方便地進行視頻會議、遠程授課、在線研討會等活動。以下是Zoom的使用步驟: 1. 下載Zoom客戶端 可以在Zoom官網上下載對應平臺的Zoom客戶端。下載并完成安裝后,雙擊打開客戶端。 2. 創建…

【AI】ChatTTS實現文本轉語音

最近有時間繼續研究一下各種有趣的開源項目,一個叫ChatTTS的項目吸引了我的注意,這個項目可以把文本轉換成語音,配合gpt生成文本,可以直接用于生產有聲書作品了,這可以說是直接的生產力項目了。 項目對顯存的要求不高&…

el-table 樹狀表格查詢符合條件的數據

需要對el-table的樹狀表格根據輸入機構名稱&#xff0c;篩選出符合條件的數據&#xff0c;可用如下方法&#xff1a; 頁面內容如下&#xff1a; <el-input v-model"ogeName" placeholder"請輸入機構名稱"><el-table :data"list" row…

Git 操作補充:cherry-pick、變基

1. 挑選提交合并 git cherry-pick 對于多分支的代碼庫&#xff0c;將代碼從一個分支轉移到另一個分支是一種常見的需求&#xff0c;這可以分成兩種情況&#xff1a;一種情況是&#xff0c;你需要另一個分支的所有代碼變動&#xff0c;那么就采用 git merge&#xff1b;另一種情…

如何準確測量 Android 應用中 Activity 和 Fragment 的啟動時間

如何準確測量 Android 應用中 Activity 和 Fragment 的啟動時間 在 Android 應用開發中&#xff0c;了解每個 Activity 和 Fragment 的啟動時間對于性能優化至關重要。本文將介紹幾種方法來準確測量 Activity 和 Fragment 的啟動時間&#xff0c;并提供實際操作步驟&#xff0…

Spark SQL----內置函數JSON Functions

Spark SQL----內置函數JSON Functions JSON Functions 例子&#xff1a; -- from_json SELECT from_json({"a":1, "b":0.8}, a INT, b DOUBLE); --------------------------- |from_json({"a":1, "b":0.8})| -----------------------…

c++之auto

auto auto與for結合begin(),end()說明 auto c11標準引入auto類型說明符必須有初始值通過初始值來推斷變量的類型 #include<cstdio> using namespace std; int main(){int v1 10;auto v2 v1;printf("v2%d\n",v2);double v310.5;auto v4 v3;printf("v4…

SF-HCI-SAP問題收集17:值映射布爾型EC數據

Complacency is the enemy of study 學習的敵人是自己的滿足。 SAP SuccessFactors Employee Central 到 SAP ERP 的員工主數據復制 successfactor employee center主數據同步&#xff0c;一直以來排錯比較難&#xff0c;難的地方是這個提示消息比較隱晦&#xff0c;而且同步的…

數據結構與算法學習(1)

#學習自用# 算法性能分析 時間復雜度O() 時間復雜度就是算法計算的次數。 for(int i0;i<n;i) {ans; } ans; 這串代碼時間復雜度為O(n)&#xff0c;實際時間復雜度為O(n1)。如果把i改為i2&#xff0c;時間復雜度仍然為為O(n)&#xff0c;實際時間復雜度變為O(n/2 1)。時…

云原生技術架構詳解

云原生技術最全詳解(圖文全面總結) 容器技術 容器技術&#xff1a;是將應用程序、及其所有依賴項&#xff0c;打包到一個獨立的、可移植的容器中。 如下圖所示: 容器技術的實現&#xff0c;最典型的就是以Docker為代表的。 如下圖所示&#xff1a; 主要解決&#xff1a; 1、…

AI常見名詞盤點(持續更新)

目錄 知識庫 知識庫的定義 知識庫的分類 AI知識庫的特點 小結 Embedding 向量化表示 維度降低 語義關系 小結 提示詞工程&#xff08;Prompt Engineering&#xff09; 定義 目的與應用 關鍵性質 工程化思想 應用示例 小結 RAG 檢索增強生成 定義與重要性 RA…

Ubuntu設置nacos開機以單機模式自啟動

首先&#xff0c;需要安裝jdk Ubuntu 安裝JDK 創建Systemd服務單元文件 sudo vim /etc/systemd/system/nacos.service按i進入編輯模式&#xff0c;寫入下面信息 [Unit] Descriptionnacos server Afternetwork.target[Service] Typeforking Environment"JAVA_HOME/opt/j…

Java8 - Optional 處理可能為空值的容器類

1. 創建一個 Optional 對象 Optional.of、Optional.ofNullable 、Optional.empty是Optional類的三個靜態方法&#xff0c;用于創建Optional對象。 1. Optional.of 方法 Optional.of 方法用于創建一個包含非空值的Optional對象&#xff0c;如果傳入的值為null&#xff0c;則會…

Kafka集群安裝部署

簡介 Kafka是一款分布式的、去中心化的、高吞吐低延遲、訂閱模式的消息隊列系統。 同RabbitMQ一樣&#xff0c;Kafka也是消息隊列。不過RabbitMQ多用于后端系統&#xff0c;因其更加專注于消息的延遲和容錯。 Kafka多用于大數據體系&#xff0c;因其更加專注于數據的吞吐能力…

用freertos后NVIC里系統時鐘部分報錯,如何解決?

&#x1f3c6;本文收錄于《CSDN問答解答》專欄&#xff0c;主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案&#xff0c;希望能夠助你一臂之力&#xff0c;幫你早日登頂實現財富自由&#x1f680;&#xff1b;同時&#xff0c;歡迎大家關注&&收藏&…

百日筑基第十天-重溫Spring

百日筑基第十天-重溫Spring Spring AOP 也就是 Aspect-oriented Programming&#xff0c;譯為面向切面編程&#xff0c;是計算機科學中的一個設計思想&#xff0c;旨在通過切面技術為業務主體增加額外的通知&#xff08;Advice&#xff09;&#xff0c;從而對聲明為**“切點”…