日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Algorithm之PrA:PrA之nLP非线性规划算法经典案例剖析+Matlab编程实现

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)、求導

編寫 M 文件detaf.m,定義函數 f (x)及其梯度列向量如下 function [f,df]=detaf(x); f=x(1)^2+25*x(2)^2; df=[2*x(1)50*x(2)];

(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,f0

2、解析法中的牛頓法

用Newton 法求解

(1)、求梯度

(2)、編寫 M 文件nwfun.m 如下:

編寫 M 文件nwfun.m 如下: function [f,df,d2f]=nwfun(x); f=x(1)^4+25*x(2)^4+x(1)^2*x(2)^2; df=[4*x(1)^3+2*x(1)*x(2)^2;100*x(2)^3+2*x(1)^2*x(2)]; d2f=[2*x(1)^2+2*x(2)^2,4*x(1)*x(2)4*x(1)*x(2),300*x(2)^2+2*x(1)^2];

(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,f0

3、Matlab 求無約束極值問題



(1)、編寫M 文件fun2.m 如下

function [f,g]=fun2(x); f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; g=[-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));200*(x(2)-x(1)^2)];

(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编程实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。