無約束凸優化演算法

weixin_33860722發表於2018-03-21

本章涉及知識點

1、scipy庫求解全域性最優和局最優

2、多元函式的極值求解演算法

3、牛頓迭代法演算法

4、牛頓迭代法求解多元函式的駐點

在金融學和經濟學中,凸優化起著非常重要的作用,而研究凸優化求解其極值是一個非常有趣的數學問題

我們用一個案例來研究無約束凸優化演算法,假設有如下二元目標函式

8576381-c672b24d343408c5.png
目標函式

一、scipy庫求解全域性最優和局最優

我們先用numpy生成50個二維網格點即對應的f(x,y)

8576381-70c55934db1dc418.png
50個網格點和對應的函式值

畫出f(x,y)的影像觀察

8576381-23120a827c47cd97.png
案例多元函式影像

顯然從影像上可以直觀看出,函式存在多個區域性極小值。我們通過scipy庫封裝好的brutefmin兩個工具函式來求解目標函式的極值

scipy的brute函式以引數範圍和引數移動的步距作為輸入,我們分別以[-10,10]為引數範圍,5和0.1為不同的引數移動步距來求解極值

8576381-d27c7b018ec4594b.png
brute函式求解全域性最優
8576381-b590b2b10241f619.png
引數步距為5時,求解的極值
8576381-33ff32e9754edf79.png
引數步距為0.1時,求解的極值

可以看到在[-10,10]區間裡,brute函式求解多元函式的駐點大概在x=y=-1.4,此時的極值為-1.7749

我們再利用fmin函式求解在初始值為x=y=-1.4時函式的區域性最優解,fmin函式以需要最小化的函式和起始引數值作為輸入,將brute函式求解出的駐點帶入fmin

8576381-5223be83f09d3e92.png
fmin函式求解區域性最優(帶入全域性最優的駐點)
8576381-b0405af4efa71643.png
fmin函式求解的極值

可以看到fmin在brute的基礎上求解出更低的函式值,可以看到,在求解凸優化問題中,建議在使用區域性優化之前先進行全域性優化,防止求解過程陷入某個區域性最優解(盆地跳躍)

二、多元函式的極值求解演算法

上述我們使用了python的scipy庫封裝好的方法,來求解出多元函式的極值,下面我們來分析求解多元函式極值的純數學演算法

一般地,我們把具有二階偏導數的函式z=f(x,y),其求解極值的演算法描述如下:

第1步:求出目標函式關於x和y的一階偏導數,得到一切駐點

第2步:求出目標函式 關於x和y的二階偏導數,並分別帶入駐點求出其 二階偏導數的值A、B和C

第3步:根據A*C-B*B的符號,判斷是否存在極值,是極大值還是極小值

            (1):A*C-B*B>0時,具有極值,且當A>0時存在極大值,當A<0時存在極小值

            (2): A*C-B*B<0時,沒有極值

            (3): A*C-B*B=0時,可能有極值,也可能沒有極值

8576381-e3dc675fdcfe635e.png
帶入駐點的二階偏導數的值

三、牛頓迭代法

有了上述數學演算法,我們對目標函式來求一階偏導數

8576381-7e0f5f9d3456ca0c.png
目標函式關於x的一階偏導數

上式存在一個問題,要直接計算出一階偏導數為0對應的x,則求解難度非常大,因為式子中包含了cos函式,而cos的泰勒展開式為

8576381-a5248dc7a867022f.png
cos的n階展開式

這是由n個多項式組成,所以我們只能利用逼近法的思路,來近似求解,比如牛頓迭代法

8576381-85706cd79ddfd6d6.png
牛頓迭代法示意圖

設曲線L=f(x),則L上任意一點x0對應的切線方程為

8576381-4afc2ec5595c1034.png
x0的切線方程

令y=0,解出切線與x軸的交點的橫座標x1為

8576381-542720c4a3a9032d.png
切線與x軸的交點

從圖上可以看出x1越發靠近曲線L的真實解,如此迭代下去,在點(xn-1,f(xn-1))作切線,可以得到L根的近似值為

8576381-9e6fabde1c56b2cd.png
牛頓迭代法公式

四、牛頓迭代法求解多元函式的駐點

有了牛頓迭代法的公式,下面我們來解目標函式關於x的一階偏導數cosx+0.1x=0的根(求解y同理),其一階導數為-sinx+0.1,迭代出駐點後帶入目標函式即可求出其極值

8576381-e466094574377a05.png
牛頓迭代法解出駐點
8576381-c43d00231c25ea36.png
駐點對應的極值

從結果上看和scipy庫計算出來的極值非常接近,其本質就是求解多元函式極值的演算法

相關文章