Algorithm之PrA:PrA之nLP非线性规划算法经典案例剖析+Matlab编程实现
Algorithm之PrA:PrA之nLP整數規劃算法經典案例剖析+Matlab編程實現
?
?
?
目錄
有約束非線性規劃案例分析
1、投資決策問題
2、利用Matlab實現求解下列非線性規劃?
無約束極值問題案例分析
1、解析法中的梯度法
2、解析法中的牛頓法
3、Matlab 求無約束極值問題
4、求多元函數的極值
5、罰函數法求解非線性規劃
二次規劃案例分析
1、求解二次規劃
Matlab求約束極值問題
1、fminbnd 函數求約束極值問題?
2、fseminf 函數求約束極值問題?
3、fminimax 函數求約束極值問題?
4、利用梯度求解約束優化問題
?
?
有約束非線性規劃案例分析
1、投資決策問題
? ? ?某企業有n 個項目可供選擇投資,并且至少要對其中一個項目投資。已知該企業擁有總資金 A元,投資于第i(i = 1…,n)個項目需花資金 ai元,并預計可收益i b 元。試選擇最佳投資方案。
(1)、根據已知列出數學公式
(2)、分析問題,列出問題模型
(3)、分析模型,尋找求解模型方法
2、利用Matlab實現求解下列非線性規劃
(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)^2x(1)+x(2)^2+x(3)^3-20]; %非線性不等式約束 h=[-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %非線性等式約束(3)、編寫主程序文件example2.m 如下
options=optimset('largescale','off'); [x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[], ... 'fun2', options)(4)、可以求得
無約束極值問題案例分析
1、解析法中的梯度法
用最速下降法求解無約束非線性規劃問題
(1)、求導
(2)、編寫主程序文件zuisu.m如下
clc x=[2;2]; [f0,g]=detaf(x); while norm(g)>0.000001p=-g/norm(g);t=1.0;f=detaf(x+t*p);while f>f0t=t/2;f=detaf(x+t*p);end x=x+t*p; [f0,g]=detaf(x); end x,f02、解析法中的牛頓法
用Newton 法求解
(1)、求梯度
(2)、編寫 M 文件nwfun.m 如下:
(3)、編寫主程序文件example5.m 如下
clc x=[2;2]; [f0,g1,g2]=nwfun(x); while norm(g1)>0.00001p=-inv(g2)*g1;x=x+p;[f0,g1,g2]=nwfun(x); end x, f0(4)、擴展:如果目標函數是非二次函數,一般地說,用Newton 法通過有限輪迭代并不能保證可求得其最優解。為了提高計算精度,我們在迭代時可以采用變步長計算上述問題,編寫主程序文件
example5_2 如下: clc,clear x=[2;2]; [f0,g1,g2]=nwfun(x); while norm(g1)>0.00001p=-inv(g2)*g1;p=p/norm(p);t=1.0;f=nwfun(x+t*p);while f>f0t=t/2;f=nwfun(x+t*p);end x=x+t*p; [f0,g1,g2]=nwfun(x); end x,f03、Matlab 求無約束極值問題
(1)、編寫M 文件fun2.m 如下
(2)、編寫主函數文件example6.m如下
options = optimset('GradObj','on'); [x,y]=fminunc('fun2',rand(1,2),options) 即可求得函數的極小值。 在求極值時,也可以利用二階導數,編寫 M 文件fun3.m 如下: function [f,df,d2f]=fun3(x); f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; df=[-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));200*(x(2)-x(1)^2)]; d2f=[-400*x(2)+1200*x(1)^2+2,-400*x(1)-400*x(1),200];(3)、編寫主函數文件example62.m如下:即可求得函數的極小值。
options = optimset('GradObj','on','Hessian','on'); [x,y]=fminunc('fun3',rand(1,2),options)4、求多元函數的極值
?
(1)、編寫 f (x)的 M 文件 fun4.m如下
function f=fun4(x); f=sin(x)+3;(2)、編寫主函數文件example7.m如下,即求得在初值2 附近的極小點及極小值。
x0=2; [x,y]=fminsearch(@fun4,x0)5、罰函數法求解非線性規劃
(1)、編寫 M 文件 test.m
function g=test(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=test(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=test(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('test',rand(2,1)) ?即可求得問題的解。
?
二次規劃案例分析
1、求解二次規劃
(1)、編寫程序
h=[4,-4;-4,8]; f=[-6;-3]; a=[1,1;4,1]; b=[3;9]; [x,value]=quadprog(h,f,a,b,[],[],zeros(2,1))Matlab求約束極值問題
1、fminbnd 函數求約束極值問題
解:編寫 M 文件fun5.m
function f=fun5(x); f=(x-3)^2-1;在Matlab 的命令窗口輸入[x,y]=fminbnd('fun5',0,5) ? 即可求得極小點和極小值。
2、fseminf 函數求約束極值問題
(1)、編寫M 文件fun6.m 定義目標函數如下
function f=fun6(x,s); f=sum((x-0.5).^2);(2)、編寫M 文件fun7.m 定義約束條件如下
function [c,ceq,k1,k2,s]=fun7(x,s); c=[];ceq=[]; if isnan(s(1,1))s=[0.2,0;0.2 0]; end %取樣值 w1=1:s(1,1):100; w2=1:s(2,1):100; %半無窮約束 k1=sin(w1*x(1)).*cos(w1*x(2))-1/1000*(w1-50).^2-sin(w1*x(3))-x(3)-1; k2=sin(w2*x(2)).*cos(w2*x(1))-1/1000*(w2-50).^2-sin(w2*x(3))-x(3)-1; %畫出半無窮約束的圖形 plot(w1,k1,'-',w2,k2,'+');(3)調用函數fseminf,在Matlab 的命令窗口輸入即可。
[x,y]=fseminf(@fun6,rand(3,1),2,@fun7)3、fminimax 函數求約束極值問題
(1)、編寫M 文件fun8.m 定義向量函數如下
function f=fun8(x); f=[2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304-x(1)^2-3*x(2)^2x(1)+3*x(2)-18-x(1)-x(2)x(1)+x(2)-8];(2)、調用函數fminimax
[x,y]=fminimax(@fun8,rand(2,1))4、利用梯度求解約束優化問題
分析:當使用梯度求解上述問題時,效率更高并且結果更準確。題目中目標函數的梯度為
(1)、編寫M 文件fun9.m 定義目標函數及梯度函數
function [f,df]=fun9(x); f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); df=[exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+8*x(1)+6*x(2)+1);exp(x(1))*(4*x(2) +4*x(1)+2)];(2)、編寫M 文件fun10.m 定義約束條件及約束條件的梯度函數:
function [c,ceq,dc,dceq]=fun10(x); c=[x(1)*x(2)-x(1)-x(2)+1.5;-x(1)*x(2)-10]; dc=[x(2)-1,-x(2);x(1)-1,-x(1)]; ceq=[];dceq=[];(3)、調用函數fmincon,編寫主函數文件example13.m 如下
%采用標準算法 options=optimset('largescale','off'); %采用梯度 options=optimset(options,'GradObj','on','GradConstr','on'); [x,y]=fmincon(@fun9,rand(2,1),[],[],[],[],[],[],@fun10,options)?
?
?
總結
以上是生活随笔為你收集整理的Algorithm之PrA:PrA之nLP非线性规划算法经典案例剖析+Matlab编程实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Algorithm之MC:基于Matla
- 下一篇: Algorithm之PrA:PrA之nL