數學建模 | MATLAB學習 | 非線性規劃

 如果目標函式或約束條件中包含非線性函式,就稱這種規劃問題為非線性規劃問題。一般說來,解非線性規劃要比解線性規劃問題困難得多。而且,也不像線性規劃有單純形法這一通用方法,非線性規劃目前還沒有適於各種問題的一般演算法,各個方法都有自己特定的適用範圍。

非線性規格的MATLAB解法


 Matlab中的命令是

[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

 x的返回值是決策向量的取值,fval返回的是目標函式的取值,其中fun是用M檔案定義的函式;x0是的初始值;A,b,Aeq,beq定義了線性約束Ax<=b, Aeq*x = beq ,如果沒有線性約束,則A,b=[],Aeq=[],beq=[];lb和ub是變數的下界和上界,如果上界和下界沒有約束,即無下界也無上界,則lb=[],ub=[],也可以寫成 lb的各分量都為-inf,ub的各分量都為inf;nonlcon是用M檔案定義的非線性向量函式c(x) , ceq(x);options定義了優化引數,可以使用Matlab預設的引數設定。

例項:


 最佳投資方案應是投資額最小而總收益最大的方案,所以這個最佳投資決策問題歸結為總資金以及決策變數(取0或1)的限制條件下,極大化總收益和總投資之比。因此,其數學模型為


 在一組等式或不等式的約束下,求一個函式的最大值(或最小值)問題,其中至少有一個非線性函式,這類問題稱之為非線性規劃問題。可概括為一般形式


 對於一個實際問題,在把它歸結成非線性規劃問題時,一般要注意如下幾點

(1)確定供選方案:首先要收集同問題有關的資料和資料,在全面熟悉問題的基礎上,確認什麼是問題的可供選擇的方案,並用一組變數來表示它們。

(2)提出追求目標:經過資料分析,根據實際需要和可能,提出要追求極小化或極大化的目標。並且,運用各種科學和技術原理,把它表示成數學關係式。

(3)給出價值標準:在提出要追求的目標之後,要確立所考慮目標的“好”或“壞”的價值標準,並用某種數量形式來描述它。

(4)尋求限制條件:由於所追求的目標一般都要在一定的條件下取得極小化或極大化效果,因此還需要尋找出問題的所有限制條件,這些條件通常用變數之間的一些不等式或等式來表示。

解  

(1)編寫M函式fun1.m定義目標函式

 function f=fun1(x);

 f=sum(x.^2) 8;

(2)編寫M函式fun2.m定義非線性約束條件

 function [g,h]=fun2(x);

 g=[-x(1)^2 x(2)-x(3)^2

 x(1) x(2)^2 x(3)^3-20];  %非線性不等式約束

 h=[-x(1)-x(2)^2 2

 x(2) 2*x(3)^2-3]; %非線性等式約束

(3)編寫主程式檔案如下

 [x,y]=fmincon(‘fun1′,rand(3,1),[],[],[],[],zeros(3,1),[],’fun2’)

執行後得到

x =
    0.5522
    1.2033
    0.9478

y =10.6511