《中科大《優(yōu)化設(shè)計(jì)》課程大作業(yè)之約束優(yōu)化實(shí)驗(yàn)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《中科大《優(yōu)化設(shè)計(jì)》課程大作業(yè)之約束優(yōu)化實(shí)驗(yàn)報(bào)告(8頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、精選優(yōu)質(zhì)文檔-----傾情為你奉上
約束優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告
力學(xué)系
型號(hào):聯(lián)想y470
CPU:i5-2450M
內(nèi)存:2GB
系統(tǒng):win7-64位
求解問(wèn)題:
如上是以下三個(gè)約束方法共同需要求解的問(wèn)題,預(yù)估結(jié)果:在(x1,x2,x3)≈(23,13,12)點(diǎn)附近存在極值。其中,每個(gè)方法對(duì)應(yīng)的初始條件分別為:
(1)隨機(jī)試驗(yàn)法
設(shè)計(jì)變量范圍:
隨機(jī)試驗(yàn)點(diǎn)數(shù):N=1000
精度:eps=0.001
(2)隨機(jī)方向法
初始點(diǎn):x0=(25,15,5)
初始步長(zhǎng):a0=0.5
精度:eps=0.001
(3)線性規(guī)劃單純形法
初始復(fù)合形:X=[20 2
2、3 25 30;10 13 15 20;10 9 5 0]
頂點(diǎn)個(gè)數(shù):n=4
精度:eps=0.01
計(jì)算結(jié)果:
約束方法
所需時(shí)間
迭代次數(shù)
極值點(diǎn)
極值
隨機(jī)試驗(yàn)法
28.23
0
(22.63,12.63,12.06)
3445.50
隨機(jī)方向法
0.65
49
(22.67,12.67,11.98)
3441.99
線性規(guī)劃單純形法
6.23
5
(22.59,12.59,12.12)
3445.61
程序說(shuō)明:主程序?yàn)閙ain,運(yùn)行main后按提示即可得到相應(yīng)約束方法的求解結(jié)果。
程序如下:
1、 主程序
clear;
3、global kk;
kk=0;
disp('1.隨機(jī)試驗(yàn)法');
disp('2.隨機(jī)方向法');
disp('3.線性規(guī)劃單純形法');
while 1
n0=input('請(qǐng)輸入上面所想選擇約束優(yōu)化方法的編號(hào)(1、2、3):');
if n0==1||n0==2||n0==3
break;
end
disp('此次輸入無(wú)效.');
end
disp(' ');
disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
[xx,yy]=fmins(n0);
fprintf('迭代次
4、數(shù)為: %8.0f\n', kk);
disp('所求極值點(diǎn)的坐標(biāo)向量為:');
fprintf(' %16.5f\n', xx);
fprintf('所求函數(shù)的極值為: %16.5f\n', yy);
2、 調(diào)用函數(shù)
function [xx,yy]=fmins(n0)
if n0==1
tic;[xx,yy]=suijishiyan();toc;
elseif n0==2
tic;[xx,yy]=suijifangxiang();toc;
elseif n0==3
tic;[xx,yy]=danchun
5、xing();toc;
end
end
3、 單純形法
function [xx,yy]=danchunxing()
clear;
global kk;
syms a b c;
f=-a*b*c;
g=[-a+2*b+2*c>=0;a+2*b+2*c<=72;abs(a-b-10)<=1e-3;b>=10;b<=20];
X=[20 23 25 30;10 13 15 20;10 9 5 0];
alpha=1.3;
sita=0.5;
gama=1;
beta=0.7;
var=[a;b;c];
eps=0.001;
N=size(X);
n=N(2)
6、;
FX=zeros(1,n);
while 1
for i=1:n
FX(i)=double(subs(f,var,X(:,i)));
end
[XS,IX]=sort(FX);
Xsorted=X(:,IX);
px=sum(Xsorted(:,1:(n-1)),2)/(n-1);
Fpx=double(subs(f,var,px));
SumF=0;
for i=1:n
SumF=SumF+(FX(IX(i))-Fpx)^2;
end
7、 SumF=sqrt(SumF/(n-1));
if SumF<=eps
xx=Xsorted(:,1);
break;
else
bcon_1=1;
cof_alpha=alpha;
while bcon_1
x2=px+cof_alpha*(px-Xsorted(:,n));
gx2=double(subs(g,var,x2));
if min(gx2)>0
8、 bcon_1=0;
else
cof_alpha=0.7*(cof_alpha);
end
end
fx2=double(subs(f,var,x2));
if fx2
9、 gx3=double(subs(g,var,x3));
fx3=double(subs(f,var,x3));
if min(gx3)>0
bcon_2=0;
if fx3
10、 end
else
bcon_2=0;
count=3;
end
end
if count==1
Xsorted(:,n)=x3;
X=Xsorted;
continue
else
Xsorted(:,n)=x2
11、;
X=Xsorted;
continue
end
else
if fx2
12、
cof_beta=beta;
bcon_3=1;
while bcon_3<4
x4=Xsorted(:,n)+cof_beta*(px-Xsorted(:,n));
gx4=double(subs(g,var,x4));
if min(gx4)>0
bcon_
13、3=5;
else
cof_beta=cof_beta/2;
bcon_3=bcon_3+1;
end
end
if min(gx4)>0
fx4=double(subs(f,var,x4));
FN
14、new=double(subs(f,var,Xsorted(:,n)));
if fx4
15、 for i=1:n
Xsorted(:,i)=x0+sita*(Xsorted(:,i)-x0);
end
end
else
x0=Xsorted(:,1);
for i=1:n
Xsorted(:,i)=x0+si
16、ta*(Xsorted(:,i)-x0);
X=Xsorted;
continue
end
end
else
x0=Xsorted(:,1);
for i=1:n
Xsorted(:,i)=x0+sita*(Xsorted(
17、:,i)-x0);
X=Xsorted;
continue
end
end
end
end
end
X=Xsorted;
kk=kk+1;
end
yy=-double(subs(f,var,xx));
end
4、 隨機(jī)方向法
function [xx,yy]=suijifangxiang()
clear;
global kk;
18、
x0 = [25;15;5];
n = 3;
eps = 0.001;
a0 = 0.5;
k = 10000;
f0 = -x0(1)*x0(2)*x0(3);
fl = -x0(1)*x0(2)*x0(3);
i = 1;
while 1
a = a0;
r = -1 + 2*rand(n,k);
for j = 1:k
ss=(sum(abs(r(:,j))))^0.5;
e = r(:,j)./ss;
x = x0 + a*e;
if (-x(1)+2*x(2)
19、+2*x(3)>=0)&& (x(1)+2*x(2)+2*x(3)<=72)&&(abs(x(1)-x(2)-10)<=1e-3)&&(x(2)>=10)&&(x(2)<=20)
f =-x(1)*x(2)*x(3);
if f < fl
fl = f;
d = e;
xl = x;
end
end
end
while 1
x = xl;
a
20、= 1.3*a;
x = x+a*d;
if (-x(1)+2*x(2)+2*x(3)>=0)&& (x(1)+2*x(2)+2*x(3)<=72)&&(abs(x(1)-x(2)-10)<=1e-3)&&(x(2)>=10)&&(x(2)<=20)
f =-x(1)*x(2)*x(3);
if f < fl
fl = f;
else
break
end
else
21、 break
end
kk=kk+1;
end
for b = 1:50
x = x - a*d;
a = 0.7*a;
x = x + a*d;
if (-x(1)+2*x(2)+2*x(3)>=0)&& (x(1)+2*x(2)+2*x(3)<=72)&&(abs(x(1)-x(2)-10)<=1e-3)&&(x(2)>=10)&&(x(2)<=20)
f =-x(1)*x(2)*x(3);
22、 if f < fl
fl = f;
break
end
end
end
epsl = abs((f0-fl)/f0);
if epsl < eps&&x(1)<23
break
else
i = i+1;
x0 = x;
f0 = f;
fl = f;
end
kk=kk+1;
end
xx = x;
yy =-f;
e
23、nd
5、 隨機(jī)試驗(yàn)法
function [xx,yy]=suijishiyan()
format long
N=1000;
x1=[];x2=[];x3=[];
zmax=-inf;
x10=unifrnd(20,30,N,1);
x20=unifrnd(10,20,N,1);
x30=unifrnd(-10,16,N,1);
for i=1:N
for j=1:N
for k=1:N
if (-x10(i)+2*x20(j)+2*x30(k)>=0)&& (x10(i)+2*x20(j)+2*x30(k)<=72)&&(abs(x10(i)-x20(j)-10)<=1e-3)
z=x10(i)*x20(j)*x30(k);
if zmax