無約束凸優化演算法
本章涉及知識點
1、scipy庫求解全域性最優和局最優
2、多元函式的極值求解演算法
3、牛頓迭代法演算法
4、牛頓迭代法求解多元函式的駐點
在金融學和經濟學中,凸優化起著非常重要的作用,而研究凸優化求解其極值是一個非常有趣的數學問題
我們用一個案例來研究無約束凸優化演算法,假設有如下二元目標函式

一、scipy庫求解全域性最優和局最優
我們先用numpy生成50個二維網格點即對應的f(x,y)

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

顯然從影像上可以直觀看出,函式存在多個區域性極小值。我們通過scipy庫封裝好的brute和fmin兩個工具函式來求解目標函式的極值
scipy的brute函式以引數範圍和引數移動的步距作為輸入,我們分別以[-10,10]為引數範圍,5和0.1為不同的引數移動步距來求解極值



可以看到在[-10,10]區間裡,brute函式求解多元函式的駐點大概在x=y=-1.4,此時的極值為-1.7749
我們再利用fmin函式求解在初始值為x=y=-1.4時函式的區域性最優解,fmin函式以需要最小化的函式和起始引數值作為輸入,將brute函式求解出的駐點帶入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時,可能有極值,也可能沒有極值

三、牛頓迭代法
有了上述數學演算法,我們對目標函式來求一階偏導數

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

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

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

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

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

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


從結果上看和scipy庫計算出來的極值非常接近,其本質就是求解多元函式極值的演算法
相關文章
- 05-無約束優化演算法優化演算法
- 06-等式約束優化演算法優化演算法
- 支援向量機(SVM)的約束和無約束優化、理論和實現優化
- 第一週【任務2】無約束最優化優化
- 約束優化的拉格朗日乘子(KKT)優化
- 運籌優化(十一)--無約束非線性規劃優化
- 凸優化優化
- 凸優化問題優化
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- 斜率優化(凸包優化)DP問題acm優化ACM
- 03-凸優化問題優化
- 運籌優化(十二)--帶約束非線性規劃(NLP)優化
- Python遺傳演算法工具箱的使用(一)求解帶約束的單目標優化Python演算法優化
- 為什麼凸優化這麼重要?優化
- 約束
- 約束最佳化的拉格朗日乘子(KKT)
- Javaweb-約束-外來鍵約束JavaWeb
- 層次和約束:專案中使用vuex的3條優化方案Vue優化
- [演算法學習筆記] 差分約束演算法筆記
- 演算法隨筆——圖論之差分約束演算法圖論
- 約束CONSTRAINTAI
- 03約束
- MySQL 約束MySql
- SQL約束SQL
- AI工程師必備技能 - 凸優化介紹AI工程師優化
- 【課程筆記】中科大凸優化(二)筆記優化
- 【課程筆記】中科大凸優化(三)筆記優化
- 粒子群演算法求解帶約束最佳化問題 原始碼實現演算法原始碼
- 主鍵約束、唯一約束和唯一索引索引
- (10)邏輯綜合新增約束(環境約束)
- 約束你的git操作,讓你生無可戀。Git
- 約束介紹
- 差分約束
- 綜合約束
- iOS Autolayout 修改約束優先順序崩潰問題iOS
- 阿里雲t5新功能:無效能約束例項阿里
- POJ 3169(Bellman-Ford演算法,差分約束系統)演算法
- 完整性約束