中科大《优化设计》课程大作业之约束优化实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
约束优化设计实验报告
力学系型号:联想y470
CPU:i5-2450M
内存:2GB
系统:win7-64位
求解问题:
如上是以下三个约束方法共同需要求解的问题,预估结果:在(x1,x2,x3)≈(23,13,12)点附近存在极值。其中,每个方法对应的初始条件分别为:
(1)随机试验法
设计变量范围:
随机试验点数:N=1000
精度:eps=0.001
(2)随机方向法
初始点:x0=(25,15,5)
初始步长:a0=0.5
精度:eps=0.001
(3)线性规划单纯形法
初始复合形:X=[20 23 25 30;10 13 15 20;10 9 5 0]
顶点个数:n=4
精度:eps=0.01
计算结果:
程序说明:主程序为main,运行main后按提示即可得到相应约束方法的求解结果。
程序如下:
1、主程序
clear;
global kk;
kk=0;
disp('1.随机试验法');
disp('2.随机方向法');
disp('3.线性规划单纯形法');
while 1
n0=input('请输入上面所想选择约束优化方法的编号(1、2、3):');
if n0==1||n0==2||n0==3
break;
end
disp('此次输入无效.');
end
disp(' ');
disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
[xx,yy]=fmins(n0);
fprintf('迭代次数为:%8.0f\n', kk);
disp('所求极值点的坐标向量为:');
fprintf(' %16.5f\n', xx);
fprintf('所求函数的极值为:%16.5f\n', yy);
2、调用函数
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]=danchunxing();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);
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
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
bcon_1=0;
else
cof_alpha=0.7*(cof_alpha);
end
end
fx2=double(subs(f,var,x2));
if fx2 cof_gama=gama; bcon_2=1; while bcon_2 x3=x2+cof_gama*(x2-px); gx3=double(subs(g,var,x3)); fx3=double(subs(f,var,x3)); if min(gx3)>0 bcon_2=0; if fx3 count=1; else count=2; end else bcon_2=0; count=3; end end if count==1 Xsorted(:,n)=x3; X=Xsorted; continue else Xsorted(:,n)=x2; X=Xsorted; continue end else if fx2 Xsorted(:,n)=x2; X=Xsorted; continue else if fx2 Xsorted(:,n)=x2; cof_beta=beta; bcon_3=1; while bcon_3<4 x4=Xsorted(:,n)+cof_beta*(px-Xsorted(:,n));