日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

KKT条件详解

發布時間:2023/12/19 综合教程 56 生活家
生活随笔 收集整理的這篇文章主要介紹了 KKT条件详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

KKT條件詳解

主要參考這篇文章和這個知乎回答。

KKT最優化條件是Karush[1939],以及Kuhn和Tucker[1951]先后獨立發表出來的。這組最優化條件在Kuhn和Tucker發表之后才逐漸受到重視,因此許多情況下只記載成庫恩塔克條件(Kuhn-Tucker conditions)

它是非線性規劃領域的重要成果,是判斷某點是極值點的必要條件。對于凸規劃,KKT條件就是充要條件了,只要滿足則一定是極值點,且一定得到的是全局最優解(凸問題)。

KKT條件的引入推廣了拉格朗日乘子法,拉格朗日乘數法原本只是解決等式約束下的優化問題,本科的高數里就講了(我竟讀研了才學懂,慚愧),而引入KKT條件的拉格朗日乘子法可用于更普遍的有不等式約束的情況。


(一)問題模型

“等式約束+不等式約束” 優化問題是最復雜也最常見的一種模型。問題建模為:
min ? f ( x ) s . t . h k ( x ) = 0 , g j ( x ) ≤ 0 j = 1 , 2 … , n ; k = 1 , 2 … , l min f(x) quad s.t.h_k(x)=0quad,quad g_j(x)leq0quad j=1,2ldots,n;k=1,2ldots,lminf(x)s.t.hk?(x)=0,gj?(x)≤0j=1,2…,n;k=1,2…,l
思路是要把問題轉化為無約束的簡單優化問題,分為兩步:

先把不等式約束條件轉化為等式約束條件。 how?→ o→引入松弛變量,即KKT乘子
再把等式約束轉化為無約束優化問題。 how?→ o→引入拉格朗日乘子


(二)一點鋪墊
后面要用這個結論:

實質上,KKT條件描述的是:這個點已經是可行域(滿足所有約束條件的n維空間)的邊界了,再走一點就不滿足約束條件了。顯然,最優解一定在可行域的邊界上的,以初中學的線性規劃作為簡單的例子,


這張圖的紫色區域就是四個不等式約束限定的可行域,如果求z=x+2y的最大值,結果當然是紅星點取得最大值,總之極值點應該在可行域的邊界,這在自變量多的高維可行域空間也是如此,只是不好畫圖直觀去看了。


(三)KKT到底是什么
KKT條件就是說:
如果一個點x ? x^*x?是滿足所有約束的極值點,那么
{ ? f ( x ? ) + ∑ k λ k ? h k ( x ? ) + ∑ j μ j ? g j ( x ? ) = 0 ( 1 ) μ j ≥ 0 ( 2 ) μ j g j ( x ? ) = 0 ( 3 ) g j ( x ? ) ≤ 0 ( 4 ) left{

?f(x?)+∑kλk?hk(x?)+∑jμj?gj(x?)μjμjgj(x?)gj(x?)=≥=≤0(1)0(2)0(3)0(4)?f(x?)+∑kλk?hk(x?)+∑jμj?gj(x?)=0(1)μj≥0(2)μjgj(x?)=0(3)gj(x?)≤0(4)

ight.?????????????????f(x?)+k∑?λk??hk?(x?)+j∑?μj??gj?(x?)μj?μj?gj?(x?)gj?(x?)?=≥=≤?0(1)0(2)0(3)0(4)?
下面進行條件的解讀:

(1) 極值點處函數的梯度是約束條件梯度的線性組合;只有滿足g j ( x ? ) = 0 g_j(x^*)=0gj?(x?)=0的那些不等式約束的梯度才會出現在加權式中,才有資格給人加權。

(2) 不等式約束的權值(KKT乘子)必須大于等于0,因為f(x) 和g(x)的梯度方向必須相反。
解釋如下:

假設某問題的可行域就是(b)圖畫的這樣,僅為便于理解哈,實際可行域不一定必須長成這樣。

前面說了,極值點肯定往可行域的邊界靠,肯定不會在可行域中間某處,所以邊界上極值點處的函數值自然比可行域內的函數值小(這里最小化目標函數,如果是最大化,就是邊界比里面大了),所以極值點處函數的梯度方向(函數值增大最快的方向)是向里面的;

而對于約束條件,可行域里的值比邊界要小,所以極值點處g(x)的梯度方向朝外面!!

結了,二者必然方向相反,所以KKT乘子必然為正。

從這個推導過程你應該也能明白為啥等式約束下不要求拉格朗日乘子必須為正了。
等式約束的權值(拉格朗日乘子)的正負無要求

(3) 若某個不等式約束在極值點取值嚴格小于0,則這個約束條件無效,就是說有沒有這個約束根本影響不了結果,其KKT乘子為0;

若極值點處不等式約束取值等于0,這個約束就是有效的,可行域的邊界的構建就有它出的一份力,則其KKT乘子為正。

這也是KKT乘子為什么又被稱為松弛變量的原因,因為它讓≤ leq≤變成了= ==,把不等式約束變為了等式約束,通過它的引入使得約束變得簡單了。

整個可行域是由g j ( x ) ≤ 0 g_j(x)leq0gj?(x)≤0和h k ( x ) = 0 h_k(x)=0hk?(x)=0圍成的,但實際上有些不等式約束沒對邊界的形成做出貢獻,就對函數在極值點處的梯度無貢獻(都沒在邊界肯定貢獻不了梯度了),所以根本不分配乘子。

總之,拉格朗日乘子法和KKT條件也算是take me a whole day了,從之前上課一直云里霧里乘飛機到現在寫完博客腦子像漿糊,算是基本理清了,這篇講KKT的文章估計讀者會看的很暈,可能沒完全講清楚,但理解KKT,重點還是要從幾何的角度去想,有那么點只可意會不可言傳或者不太好言傳的味道。我就是看一大堆博客回答受到啟發(暈乎)了以后,想到極值點一定在可行域的邊界,從而對三個KKT條件進行了邏輯上串得起來說得通的解讀的。

總結

以上是生活随笔為你收集整理的KKT条件详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。