如果目標函式或約束條件中包含非線性函式,就稱這種規劃問題為非線性規劃問 題。
非線性規劃目前還沒有適於各種問題的一般演算法,各個方法都有自己特定的適用範圍。
一般形式:
matlab 中非線性規劃的數學模型寫成以下形式
其中 f (x)是標量函式,a,b,aeq,beq是相應維數的矩陣和向量,c(x),ceq是非線性向量函式。
matlab中的命令是 [x,fval]=fmincon(fun,x0,a,b,aeq,beq,lb,ub,nonlcon,options)
例:求下列非線性規劃
帶有約束條件的極值問題稱為約束極值問題,也叫規劃問題。
3.1 二次規劃
若某非線性規劃的目標函式為自變數x的二次函式,約束條件又全是線性的,就稱 這種規劃為二次規劃。
matlab 中二次規劃的數學模型可表述如下:
matlab 中求解二次規劃的命令是
[x,fval]=quadprog(h,f,a,b,aeq,beq,lb,ub,x0,options)
(具體細節可以參看在 matlab 指令中執行 help quadprog 後的幫助)。
例:求解二次規劃
求得x1=1.9500,x2=1.0500,minf(x)=-11.0250
3.2 罰函式法
利用罰函式法,可將非線性規劃問題的求解,轉化為求解一系列無約束極值問題, 因而也稱這種方法為序列無約束小化技術,簡記為 sumt .
罰函式法求解非線性規劃問題的思想是,利用問題中的約束函式作出適當的罰函 數,由此構造出帶引數的增廣目標函式,把問題轉化為無約束非線性規劃問題。主要有兩種形式,一種叫外罰函式法,另一種叫內罰函式法,下面介紹外罰函式法。
例:求下列非線性規劃
(1)定義增廣目標函式,編寫 m 檔案 test.m
function g=test1(x);
m=50000;
f=x(1)^2
+x(2)^2
+8;
g=f-m
*min(x(1),0)-m
*min(x(2),0)-m
*min(x(1)^2
-x(2),0)+m*abs(-x(1)-x(2)^2
+2);
或者是利用matlab的求矩陣的極小值和極大值函式編寫test.m如下:
function
g=test2
(x);
m=50000;
f=x(1)^2+x(2)^2+8;
g=f-m*sum(min([x';zeros(1,2)]))-m*min(x(1)^2-x(2),0)+m*abs(-x(1)-x(2)^2+2);
也可以修改罰函式的定義,編寫test.m如下
function g=test3(x);
m=50000;
f=x(1)^2
+x(2)^2
+8;
g=f-m
*min(min(x),0)-m
*min(x(1)^2
-x(2),0)+m*(-x(1)-x(2)^2
+2)^2;
(2)求增廣目標函式的極小值,在 matlab 命令視窗輸入
[x,y]=fminunc('test3',rand(2,1))
由於是非線性問題,很難求得問題的全域性最優解,因此只能求得區域性最優解,並且每次執行結果都不一樣.
注:(1)如果非線性規劃問題要求實時演算法,則可以使用罰函式方法,但計算精度較低;matlab優化工具箱中的optimtool命令提供了優化問題的使用者圖形介面解法。 optimtool可應用到所有優化問題的求解,計算結果可以輸出到matlab工作空間中。(2)如果非線性規劃問題不要求實時演算法,但要求精度高,則可以使用lingo軟體程式設計求解或使用matlab的fmincon命令
數學建模 非線性規劃
2014年4月17日 規劃方法是建模中的常用手段。那麼顯然要人有我優了,非線性規劃就是乙個不錯的加分點。下面介紹幾種常用的非線性規劃技巧 這裡要說一下無約束法,規劃問題的困難在於求解,特別是約束比較奇怪的。於是在比賽中把有約束的規劃問題轉換成無約束的規劃問題就成了乙個大大的加分點。另外dfp之類的包...
數學建模 非線性規劃
如果目標函式或約束條件中包含非線性函式,則稱這種規劃問題為非線性規劃問題,簡寫為np。二次規劃是非線性規劃中的特例,由於二次規劃有通用的解法,所以單獨討論,而其他的非線性規劃問題沒有通用的解法。在matlab中,非線性規劃的數學模型可以寫為下面的形式 mi nf x st.ax b aeq x be...
MATLAB數學建模 3 非線性規劃
將要規劃求解的問題運用各種原理寫成要最大化或者最小化的數學公式後,運用matlab求解問題。針對非線性規劃,matlab提供了如下命令 fimincon.matlab中非線性規劃的數學模型可寫成如下形式 f x 為標量函式,a,b,aeq,beq是相應維數的矩陣和向量,c x ceq x 是非線性向...