應用matlab編程中關于非線性規(guī)劃算法的總結
應用matlab編程中關于非線性規(guī)劃算法的總結 如果目標函數(shù)或約束條件中包含非線性函數(shù),那么這種規(guī)劃問題就是非線性規(guī)劃問題。一般說來,解非線性規(guī)劃要比解線性規(guī)劃問題困難得多。而且,也不像線性規(guī)劃有單純形法這一通用方法,非線性規(guī)劃目前還沒有適于各種問題的一般算法,各個方法都有自己特定的適用范圍。 線性規(guī)劃與非線性規(guī)劃的區(qū)別:如果線性規(guī)劃的最優(yōu)解存在,其最優(yōu)解只能在其可行域的邊界上達到(特別是可行? 域的頂點上達到);而非線性規(guī)劃的最優(yōu)解(如果最優(yōu)解存在)則可能在其可行域的任意一點達到。 由于線性規(guī)劃的目標函數(shù)為線性函數(shù),可行域為凸集,因而求出的最優(yōu)解就是整個可行域上的全局最優(yōu)解。非線性規(guī)劃卻不是這樣,有時求出的某個解雖是一部分可行域上的極值點,但卻并不一定是整個可行域上的全局最優(yōu)解。 凸規(guī)劃是一類比較簡單而又具有重要理論意義的非線性規(guī)劃。
當用迭代法求函數(shù)的極小點時,常常用到一維搜索,即沿某一已知方向求目標函數(shù)的極小點。一維搜索的方法很多,常用的有:(1)試探法(“成功—失敗”,斐波那契法,0.618?法等);(2)插值法(拋物線插值法,三次插值法等);(3)微積分中的求根法(切線法,二分法等)。
如果目標函數(shù)是非二次函數(shù),一般來說,用Newton法通過有限輪迭代并不能保證可求得其最優(yōu)解。Newton法的優(yōu)點是收斂速度快;缺點是有時不好用而需采取改進措施。
變尺度法(Variable Metric Algorithm)是近20多年來發(fā)展起來的,它不僅是求解無約束極值問題非常有效的算法,而且也被用來求解約束極值問題。由于它既避免了計算二階導數(shù)矩陣及其求逆過程,又比梯度法的收斂速度快,特別是對高維問題具有顯著的優(yōu)越性,因而使變尺度法獲得了很高的聲譽。
在無約束非線性規(guī)劃方法中,遇到問題的目標函數(shù)不可導或導函數(shù)的解析式難以表示時,一般需要使用直接搜索方法。同時,由于這些方法一般都比較直觀和易于理解,因而在實際應用中常為人們所采用。
Matlab?工具箱中,用于求解無約束極值問題的函數(shù)有?fminunc?和?fminsearch。
帶有約束條件的極值問題稱為約束極值問題,也叫規(guī)劃問題。求解約束極值問題要比求解無約束極值問題困難得多。為了簡化其優(yōu)化工作,可采用以下方法:將約束問題化為無約束問題;將非線性規(guī)劃問題化為線性規(guī)劃問題,以及?
能將復雜問題變換為較簡單問題的其它方法。庫恩—塔克條件是非線性規(guī)劃領域中最重要的理論成果之一,是確定某點為最優(yōu)點的必要條件,但一般說它并不是充分條件(對于凸規(guī)劃,它既是最優(yōu)點存在的必要條件,同時也是充分條件)
若某非線性規(guī)劃的目標函數(shù)為自變量x的二次函數(shù),約束條件又全是線性的,就稱這種規(guī)劃為二次規(guī)劃。
利用罰函數(shù)法,可將非線性規(guī)劃問題的求解,轉化為求解一系列無約束極值問題,因而也稱這種方法為序列無約束最小化技術,簡記為?SUMT (Sequential Unconstrained?
Minization Technique)。罰函數(shù)法求解非線性規(guī)劃問題的思想是,利用問題中的約束函數(shù)作出適當?shù)牧P函數(shù),由此構造出帶參數(shù)的增廣目標函數(shù),把問題轉化為無約束非線性規(guī)劃問題。主要有兩種形式,一種叫外罰函數(shù)法,另一種叫內(nèi)罰函數(shù)法。
在Matlab優(yōu)化工具箱中,用于求解約束最優(yōu)化問題的函數(shù)有:fminbnd、fmincon、?quadprog、fseminf、fminimax。
Matlab?優(yōu)化工具箱中的optimtool命令提供了優(yōu)化問題的用戶圖形界面解法。optimtool可應用到所有優(yōu)化問題的求解,計算結果可以輸出到Matlab工作空間中。
?
?
?
?
?
1 ?