凸優化

定義:拋開凸優化的種種理論和算法不談,純粹的看優化模型,凸優化需滿足一下三個條件:
1.在最小化(最大化)的要求下
2.目標函數是一個凸函數(凹函數)
3.約束條件所形成的可行域集合是一個凸集。

凸優化問題爲什麼這麼重要:

此處問題解答引自知乎:https://www.zhihu.com/question/24641575

1、有相當一部分問題是或等價於凸優化問題。有許多問題都可以直接建立成凸優化模型(比如:線性規劃LP(Linear Programming)、某些特殊的二次規劃QP(Quadratic Programming)、錐規劃CP(Conic Programming)其中包括:要求約束中變量落在一個二階錐裏的二階錐規劃SOCP(Second Order Cone Programming)、要求約束中變量是半正定矩陣的半定規劃SDP(Semi-Definite Programming)等)。以上這些類型,總之就是要符合凸優化上述的要求。需要說明的就是,許多可行域都可以看作是凸錐(Convex Cone)的交集,所以將以上一些類型的約束混合起來,依然是凸優化問題。
另外還有一些問題,可以等價的轉化爲凸優化問題。例如 Linear-Fractional Programming (LFP),目標函數是兩個仿射函數(Affine Function)的比,約束是一個多面體。這種目標函數具有既是擬凸又是擬凹的性質,通過一個叫做 Charnes-Cooper transformation 的轉化,可以變成一個線性規劃。同時,如果我們要最大化 LFP 的目標函數,且其約束僅是一個0-1整數約束(這顯然不是一個凸集),我們可以將其直接鬆弛(Relax)成0到1的約束,並且和原問題等價。因爲最大化擬凸函數,最優值一定可以落在可行域的極點上。這個結論可以用來幫助解決 Multi Nomial Logit(MNL)選擇模型下的商品搭配問題( Assortment Optimization)。
2、大部分凸優化問題解起來比較快,也即多項式時間可解問題(P)。如果你的問題能直接或間接(但必須是等價的)轉化成上面我提到的那些類型,那恭喜你,後面的事兒基本就可以交給solver啦,當然大規模問題還需要考慮諸如列生成(Column Generation)之類的方法,提高運算效率。

3、很多非凸優化或NP-Hard的問題可以轉化(並非是等價的)爲P的凸優化問題。並給出問題的界或近似。這對如何設計合理的算法,或衡量算法結果的優劣起到很大的幫助。非凸優化的問題基本上都是NP-Hard的,所以要找到其最優解,理論上是不確定有一個多項式時間的算法的,所以這時候會考慮設計一些近似算法,或者啓發式算法,就要依靠凸優化。

凸優化的作用在於思維方式的轉變,跟計算機思維方式一樣,計算機從業人員在遇到問題的時候習慣了通過電腦去協助解決問題,而他們的價值不在於知道聽得懂別人告訴他如何解決問題,而是遇到現實問題的時候都會將問題拆分成機器可以實現的方式去解決:例如遇到購物,阿里巴巴建立了網站、app、c/s系統、b/s系統,用互聯網建立信息流,建立帝國。遇到查詢問題,百度建立了搜索引擎。這種思維方式纔是最重要的。。同樣,凸優化的價值也在於思維轉變,遇到現實生活問題的時候,我們必然要對問題進行建模,然後抽象問題,利用機器去幫助我們解決問題,那麼,當問題的計算量接近無窮大的時候我們如何去解決?這就需要我們抽離問題抽象結構,想辦法將轉換成“凸優化問題”,因爲凸優化已經被嚼爛,所以只要問題轉化成凸優化,我們就可以分佈迭代去運算,於是纔有了機器學習、深度學習這一門門的交叉科學。凸優化是數學領域的重要分支,而計算機科學僅僅是數學這門基礎科學的延伸而已,基礎科學纔是王道!!! C#、Java固然是被封裝成了便於人類使用的高級語言,但是總有些功能是“已有實現”沒有封裝好的,這時就需要我們迴歸更加原始語言C、彙編去編程。。深究底層、精通基礎科學纔是從容面對所有問題的解決王道,學會別人解決過的問題只能讓你解決相同的問題,現實是無限可能的,總有未解決過的問題等着你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章