中科大《优化设计》课程大作业之约束优化实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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));

相关文档
最新文档