首先:!優化問題通常喜歡求解最小值min
如果要求max就給他轉換過來
如何來判斷乙個函式是否是凸函式呢?
對於一元函式f(x),我們可以通過其二階導數f″(x) 的符號來判斷。如果函式的二階導數總是非負,即f″(x)≥0 ,則f(x)是凸函式對於多元函式f(x),我們可以通過其hessian矩陣(hessian矩陣是由多元函式的二階導數組成的方陣)的正定性來判斷。如果hessian矩陣是半正定矩陣,則是f(x)凸函式
在求解最優化問題中,拉格朗日乘子法(lagrange multiplier)和kkt(karush kuhn tucker)條件是兩種最常用的方法。在有等式約束時使用拉格朗日乘子法,在有不等約束時使用kkt條件。
我們這裡提到的最優化問題通常是指對於給定的某一函式,求其在指定作用域上的全域性最小值(因為最小值與最大值可以很容易轉化,即最大值問題可以轉化成最小值問題)。提到kkt條件一般會附帶的提一下拉格朗日乘子。對學過高等數學的人來說比較拉格朗日乘子應該會有些印象。二者均是求解最優化問題的方法,不同之處在於應用的情形不同。
一般情況下,最優化問題會碰到一下三種情況:
(1)無約束條件
這是最簡單的情況,解決方法通常是函式對變數求導,令求導函式等於0的點可能是極值點。將結果帶回原函式進行驗證即可。
(2)等式約束條件
設目標函式為f(x),約束條件為h_k(x),形如:
s.t. 表示subject to ,「受限於」的意思,l表示有l個約束條件。
則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,這裡主要講拉格朗日法,因為後面提到的kkt條件是對拉格朗日乘子法的一種泛化。
拉格朗日乘數法的基本思想
作為一種優化演算法,拉格朗日乘子法主要用於解決約束優化問題,它的基本思想就是通過引入拉格朗日乘子來將含有n個變數和k個約束條件的約束優化問題轉化為含有(n+k)個變數的無約束優化問題。拉格朗日乘子背後的數學意義是其為約束方程梯度線性組合中每個向量的係數。
如何將乙個含有n個變數和k個約束條件的約束優化問題轉化為含有(n+k)個變數的無約束優化問題?拉格朗日乘數法從數學意義入手,通過引入拉格朗日乘子建立極值條件,對n個變數分別求偏導對應了n個方程,然後加上k個約束條件(對應k個拉格朗日乘子)一起構成包含了(n+k)變數的(n+k)個方程的方程組問題,這樣就能根據求方程組的方法對其進行求解。
首先定義拉格朗日函式f(x):
拉格朗日函式
然後解變數的偏導方程:
(3)不等式約束條件
我們上述討論的問題均為等式約束優化問題,但等式約束並不足以描述人們面臨的問題,不等式約束比等式約束更為常見,大部分實際問題的約束都是不超過多少時間,不超過多少人力,不超過多少成本等等。所以有幾個科學家拓展了拉格朗日乘數法,增加了kkt條件之後便可以用拉格朗日乘數法來求解不等式約束的優化問題了。
設目標函式f(x),不等式約束為g(x),有的教程還會新增上等式約束條件h(x)。此時的約束優化問題描述如下:
則我們定義不等式約束下的拉格朗日函式l,則l表示式為:
其中f(x)是原目標函式,hj(x)是第j個等式約束條件,λj是對應的約束係數,gk是不等式約束,uk是對應的約束係數。
常用的方法是kkt條件,同樣地,把所有的不等式約束、等式約束和目標函式全部寫為乙個式子l(a, b, x)= f(x) + ag(x)+bh(x),
首先,我們先介紹一下什麼是kkt條件。
kkt條件是指在滿足一些有規則的條件下, 乙個非線性規劃(nonlinear programming)問題能有最優化解法的乙個必要和充分條件. 這是乙個廣義化拉格朗日乘數的成果. 一般地, 乙個最優化數學模型的列標準形式參考開頭的式子, 所謂 karush-kuhn-tucker 最優化條件,就是指上式的最優點x∗必須滿足下面的條件:
1). 約束條件滿足gi(x∗)≤0,i=1,2,…,p, 以及,hj(x∗)=0,j=1,2,…,q
2). ∇f(x∗)+∑i=1μi∇gi(x∗)+∑j=1λj∇hj(x∗)=0, 其中∇為梯度運算元;
3). λj≠0且不等式約束條件滿足μi≥0,μigi(x∗)=0,i=1,2,…,p。
kkt條件:說明了在什麼情況下原始問題的最優解p=對偶問題的最優解d**
其中,原始問題的最優解p是有關x的,對偶問題的最優解d是alpha beta 的
凸優化問題,凸二次規劃問題QP,凸函式
約束優化問題 凸函式凸優化問題 凸二次規劃問題 約束優化問題 min w f w min w f w s.t.gi w 0 i 1,k 1 s.t.gi w 0 i 1,k 1 hj w 0 j 1,l 2 hj w 0 j 1,l 2 注 這是乙個最小化問題.不等式約束嚴格執行的含義是 小於等於號...
凸優化 python解決凸優化問題
1 安裝cvx包 用pip安裝cvxopt 1.2.1 cp36 cp36m win amd64.whl和cvxpy 1.0.9 cp36 cp36m win amd64.whl 因為我是python3.6所以是cp36 cvxpy cvxopt 參考 2 遇到問題 error microsoft ...
凸優化1 什麼是凸優化問題
去年就想看一下優化和泛函變分相關的內容,但沒有空餘的排期,大部分學習時間花在了強化學習方面。今年,正好近期專案也有需要,凸優化提上了自學日程。全書700頁,計畫用半年的時間完成一刷。數學模型min iniz ef0 x su bjec ttof i x bi,i 1,2,m begin minini...