机械优化设计——复合形方法及源程序
机械优化设计
机械优化设计matlab优化设计程序学校:班级:学号:姓名:指导老师:一.进退法求最优点所在区间1.算例:函数:f=x(1)^3+x(2)^2-10*x(1)*x(2)+1;初始参数:x0=0,step=0.01,st=[0,0],sd=[1,1];2.编程代码:function [lb,ub]=jintuifa(x0,step0,st,sd)% lb为区间下限,up为区间上限% x0初始探测点,step0是初始探测步长,st初始搜索点,sd是初始搜索方向step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendendend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)f=x(1)^3+x(2)^2-10*x(1)*x(2)+1;end3.运行结果二.黄金分割法求最求最优值1.eg:函数:f=x^2+2*x;初始参数:a=-3,b=5,e=0.0001;2.编程代码:function [ans,sp]=golden(a,b,e)%[a,b]初始区间,e为最小区间长度要求%ans为最优解,sp为所需迭代次数a(1)=a;b(1)=b;L=e;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;m(1)=feval('f1',t(1));n(1)=feval('f1',u(1));while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endm(k+1)=feval('f1',t(k+1));n(k+1)=feval('f1',u(k+1));ans=feval('f1',t(k+1));k=k+1;endans=(a(k)+b(k))/2;sp=k-1;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y=f1(x)y=x^2+2*x;end3.运行结果三.无约束优化方法——坐标轮换法1.eg:函数:min f(x)=4*(x(1)-5)^2+(x(2)-6)^2;初始参数:初始点x为[8,9];2.编程代码:function [x,f]=lunhuan(x0)%输入初始点x0[8,9]%输出最优解点x,与最优解值fp=1;h=0.000001;x=x0;while(p>h)%做精度比较w=x(1);q=x(2);d1=[1,0];a1=golden('objfun',x,d1);%黄金分割法求最佳步长 x=x+a1*d1;d2=[0,1];a2=golden('objfun',x,d2);x=x+a2*d2;p=sqrt((x(1)-w)^2+(x(2)-q)^2);endf=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)%函数名f=4*(x(1)-5)^2+(x(2)-6)^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd)%进退法函数x0=0;step0=0.000001;step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendendend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(f_name,st,sd)[a,b]=jintuifa(st,sd); %进退法求最佳步长区间a(1)=a;b(1)=b;L=0.1;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd;q=st+u(1)*sd;m(1)=feval(f_name,p);n(1)=feval(f_name,q);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd;z=st+u(k+1)*sd;m(k+1)=feval(f_name,w);n(k+1)=feval(f_name,z);ans=feval(f_name,w);k=k+1;endt(k)=0;u(k)=0;m(k)=0;n(k)=0;p=[a',b',t',u',m',n'];ans=(a(k)+b(k))/2;end3.运行结果四.无约束优化方法——鲍威尔法1.eg:函数:min f(x)=4*(x(1)-5)^2+(x(2)-6)^2;初始参数:初始点x为[8,9],初始搜索方向[0,1],[1,0];2.编程代码:function [x,f]=powill(x0,d1,d2)%输入x0为初始点,d1,d2为两个线性无关向量for k=1:2w=x0(1);q=x0(2);a1=golden('objfun',x0,d1);x1=x0+a1*d1;a2=golden('objfun',x1,d2);x2=x1+a2*d2;d1=d2;d2=x2-x0;a3=golden('objfun',x2,d2);x3=x2+a3*d2;x0=x3;endx=x0;f=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)f=4*(x(1)-5)^2+(x(2)-6)^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd)x0=0;step0=0.0001;step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(f_name,st,sd)[a,b]=jintuifa(st,sd);a(1)=a;b(1)=b;L=0.1;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd;q=st+u(1)*sd;m(1)=feval(f_name,p);n(1)=feval(f_name,q);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd;z=st+u(k+1)*sd;m(k+1)=feval(f_name,w);n(k+1)=feval(f_name,z);ans=feval(f_name,w);k=k+1;endend3.运行结果五.有约束优化方法——复合形法1.eg:函数:min f(x)=x1^2+x2^2-x1*x2-10*x1-4*x2+60 St:g1(x)=-x1≤0g2(x)=-x2≤0g3(x)=x1-6≤0g4(x)=x2-8≤0g5(x)=x1+x2-11≤02.编程代码:function fuhexing(n,b,h,xb1,xb2)%元素数n,初始可行点b,精度h,xb1横坐标上下界,xb2为纵坐标上下界if (rem(n,2)==0)k=n+n/2;elsek=n+(n+1)/2;end%取k值A=kexingdian(k,xb1,xb2,b');%确定可行点A=mubiao(A,n,k,h);%求出目标函数并排序比较,得出最优解End %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function A=mubiao(A,n,k,h)for i=1:kA(3,i)=objfun(A(:,i));endB=A';%根据目标函数值排序A=sortrows(B,3)';p=0;for j=1:kx=(objfun(A(:,j))-objfun(A(:,1)))^2;p=p+x;endo=sqrt(p/(k-1));%收敛条件if(o<h)%判断所求点是否为最优点disp('最优点为')xz(1)=A(1,1);xz(2)=A(2,1);disp(xz);disp('其函数值为')f=A(3,1);disp(f);elsexr=Xcpanduan(A,k,n,h,1.3);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function A=kexingdian(k,xb1,xb2,b)A=zeros(3,k);A(1,1)=b(1);A(2,1)=b(2);for i=2:kA(1,i)=xb1(1)+rand(1)*(xb1(2)-xb1(1));A(2,i)=xb2(1)+rand(1)*(xb2(2)-xb2(1));%产生j个顶点endt=0;for j=1:kif(A(1,j)+A(2,j)<=11&&A(1,j)<=6&&A(2,j)<=8)%判断是否有不可行点t=t+1;T(:,t)=A(:,j);endendif(t<k)%计算出可行点的中心位置xcxc=zhongxindian(T,t);endt=0;for j=1:k%利用中心点将原不可行点逼近为可行点while(A(1,j)+A(2,j)>11||A(1,j)>6||A(2,j)>8)A(:,j)=xc+0.5*(A(:,j)-xc);endendendx=x0;f=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function f=objfun(x)f= x1^2+x2^2-x1*x2-10*x1-4*x2+60;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xc=Xcpanduan(A,k,n,h,a)for i=1:k-1T(:,i)=A(:,i);endxc=zhongxindian(T,k-1);%计算除最坏点以外的可行点中心坐标if(xc(1)+xc(2)<=11&&xc(1)<=6&&xc(2)<=8)%判断xc是否可行xr=Xrpanduan(xc,A,a,n,k,h);A(:,k)=xr;else%不可行时,即重新确定初始可行点fuhexing(n,h,A(:,1),xr);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xc=zhongxindian(T,t)xc=[0;0;0];for i=1:txc=xc+T(:,i);endxc=xc/t;%求解中心点end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function xr=Xrpanduan(xc,A,a,n,k,h)xr=xc+a*(xc-A(:,k));while(xr(1)+xr(2)>11||xr(1)>6||xr(2)>8)%判断xr 是否可行若不可行,则持续迭代a=0.5*a;xr=xc+a*(xc-A(:,k));endxr=ercipanduan(a,xr,A(:,k),A,n,k,xc,h,xr);%可行时进入下一判断end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xr=ercipanduan(a,p,b,A,n,k,xc,h,t)if(objfun(p)>=objfun(b))%判断反射点和最坏点函数值的大小if(a<=1e-10)A(:,k)=A(:,k-1);xr=Xcpanduan(A,k,n,h,a);disp(xr);elsea=0.5*a;xr=Xrpanduan(xc,A,a,n,k,h);%返回中心点判断,持续迭代endelseA(:,k)=p;%以反射点取代最坏点进行循环mubiao(A,n,k,h);xr=t;endend3.运行结果五.有约束优化方法——混合惩罚法1.eg:函数:min f(x)=(x(4)-x(1))^2+(x(5)-x(2))^2+(x(6)-x(3))^2;St:g1=x(1)^2+x(2)^2+x(3)^2-5;g2=(x(4)-3)^2+x(5)^2-1;g3=x(6)-8;g4=4-x(6);2.编程代码function [x,f]=hunhechengfa(x0,r0,c,h1,h2)k=1;z=0;A(:,1)=x0;r(1)=r0;while (z==0)k=k+1;x=lunhuan(x0,r(k-1));A(:,k)=x;r(k)=c*r(k-1);z=shoulian(A,r,h1,h2,k);if(z==1)break;endx0=x;enddisp('最优解点x=');disp(x);disp('最优值=');f=fhanshu(x);disp(f);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function z=shoulian(A,r,h1,h2,k)%判断收敛条件U=abs(objfun(A(:,k),r(k))-objfun(A(:,k-1),r(k-1))/obj fun(A(:,k-1),r(k-1)));V=0;for i=2:kV=V+(A(1,k)-A(1,k-1))^2;endV=sqrt(V);if(U<=h1&&V<=h2)z=1;elsez=0;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function p=objfun(x,r)%φ函数g1=x(1)^2+x(2)^2+x(3)^2-5;g2=(x(4)-3)^2+x(5)^2-1;g3=x(6)-8;g4=4-x(6);j=sqrt(r);u=r*(1/g1+1/g2+1/g3+1/g4);v=(g1^2+g2^2+g3^2+g4^2)/j;p=fhanshu(x)-u+v;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function f=fhanshu(x)%目标函数f=(x(4)-x(1))^2+(x(5)-x(2))^2+(x(6)-x(3))^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function x=lunhuan(x0,r)%轮换法p=1;h=0.01;d=zeros(6,6);a=zeros(6,1);x=x0;for i=1:6for j=1:6if(i==j)d(i,j)=1;endendendwhile(p>h)t=x;v=0;for k=1:6a(k)=golden(x,d(:,k),r);c=d(:,k);x=x-a(k)*c';v=v+(x(k)-t(k))^2;endp=sqrt(v);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(st,sd,r)%黄金分割法求最佳步长 [g,h]=jintuifa(st,sd,r);a(1)=g;b(1)=h;L=0.01;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd';q=st+u(1)*sd';m(1)=objfun(p,r);n(1)=objfun(q,r);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd';z=st+u(k+1)*sd';m(k+1)=objfun(w,r);n(k+1)=objfun(z,r);k=k+1;endans=(a(k)+b(k))/2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd,r)%代入步长f=objfun(st+a.*sd',r);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd,r)%进退法求最佳步长区间x0=0;step0=0.001;step=step0;f0=jintui(x0,st,sd,r);x1=x0+step0;f1=jintui(x1,st,sd,r);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd,r);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd,r);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2; f1=f0; f0=f2;endendend3.运行结果。
优化设计复合形法
所以,坏点X H X 2 ;好点X L X 3 去掉坏点的其余各顶点的几何中心 X C
五、复合形法习题
K
2 3
X C
Xj
j 1
K 1
1 3 31
22..05( j 2)
三、复合形法的计算步骤
6. α>δ 若是,则α=0.5α ,重新计算反射点X(R) 若否,用次坏点取代最坏点进行上述寻优
过程; 7. 检查终止准则: 满足,迭代终止得到最优解, 否则以新构成的复合形,继续进行搜索;
四、复合形法的特点
1、不必保持规则的图形,比较灵活; 2、复合形法适用于仅含不等式约束的问题。 3、对目标函数和约束函数无特殊要求,适 应性强; 4、寻优过程始终在可行域内,结果可靠;
再重新构造新的复合形。
8、复合形法搜索的其他方法
(1)扩张 如果求得的反射点为可行点,且目标函数下 降较多,比如F(X(R))<F(X(L))则沿此反射方向 继续移动,可能找到更好的新点X(E),X(E)) 就 称为扩张点。
X E X R X R X C
γ为扩张系数,一般取γ=1
(1)扩张
1)映射点优于坏点 F(X(R))< F(X(H))
在此情况,用X(R)代替X(H),构成新 的复合形。
7、如何构造新的复合形?
2)映射点次于坏点 F(X(R))>F(X(H))
这种情况由于映射点过远引起的,减半映射 系数,若有F(X(R))< F(X(H)),这又转化为第一种 情况。
若经过多次的映射系数减半,直至映射系
XS
1 q
优化设计6 复合形法
于k个顶点都必须满足所有的约束条件,因此当设计变量数目较多或 约束条件比较复杂时,这样做是很困难的。 2.给定一个初始顶点,随机产生其它顶点
如果用常规设计方法能取得一个设计方案,此方案虽然不是最优 的,但却是一个可行的。则其它k一1个顶点可用随机法产生
数,建议取
0.1
22
23
3、两次构造复合形
在迭代过程中,当复合形满足收敛条件时;或者当采用 X ( )、 联 线取代 X (H) 联线进行映射,仍然无效时,就以 为初始点,再 一次构造初始复合形,重新开始选代。如果前后两次选代收放结果一 致或相差很小时,则可停止计算,否则还要再一次构造初始复合形, 继续进行迭代。
代次数的上限值( 建议取5),当迭代次
X (L)
数超过上限值时,则缩短步长,转回
式
处,重新求
映射点
2、防止复合形的退化
为了防止复合形在迭代过程中出现退化现象(搜索空间维数减少),按下 式迭代后取得 X (R),令 X (R)随机偏离 X (R)、 联线的一个小角度即
0.1
等式右边采用“十”或“一”由计算机产生的随机数来决定, 是角度偏移
复合形法
一、基本原理 1966年由勃克斯(M.J.box)提出。所谓复合形是指在n维设计空间 内由k=(n十1~2n)个顶点所构成的多面体。复合形法就是在n维设 计空间的可行域内,对复合形各顶点的目标函数值逐一进行比较, 不断地去掉最坏点,代之以既能使目标函数值有所下降,又满足所有 约束条件的新点,逐步调向最优点。这种方法不必保持规则图形, 比较灵活,同时其调优过程始终在可行域内进行所求结果可靠,有 一定收敛精度,能够有效地处理不等式约束优化问题
(完整版)机械优化设计习题参考答案孙靖民第四版机械优化设计
2.黄金分割法(0.618法)
原理:提高搜索效率:1)每次只插一个值,利用一个前次的插值;2)每次的缩短率λ相同。左右对称。
程序:p52
(四)插值方法
1.抛物线法
原理:任意插3点:
算得: ; ;
要求:
设函数 用经过3点的抛物线 代替,有
解线代数方程
解得:
程序框图p57
网格法 ,缩小区间,继续搜索。
Monte Carlo方法 , ,随机数。
比较各次得到的 得解
遗传算法(专题)
(二)区间消去法(凸函数)
1.搜索区间的确定:高—低--高( )则区间内有极值。
2.区间消去法原理:在区间[a, b]内插两个点a1, b1保留有极值点区间,消去多余区间。
缩短率:
(三)0.618法
可行方向—约束允许的、函数减小的方向。(图)约束边界的切线与函数等高线的切线方向形成的区域。
数学模型
用内点法或混合法,取 ,
直接方法
(一)随机方向法
1.在可行域产生一个初始点 ,因 (约束),则
--(0,1)的随机数。
2.找k个随机方向,每个方向有n个方向余弦,要产生kn个随机数 , , ,随机方向的单位向量为
3.取一试验步长 ,计算每个方向的最优点
4.找出可行域中的最好点 得搜索方向 。以 为起点, 为搜索方向得 。最优点必须在可行域内或边界上,为此要逐步增加步长。
得
穷举下去得递推公式
3.算例
p73
4.框图p72
5.特点
作业:1. 2.
(六)变尺度法
1.引言
坐标变换
二次函数
令 为尺度变换矩阵
复合形法matlab程序及例题
复合形法matlab程序及例题一、复合形法简介复合形法是一种求解非线性规划问题的方法,该方法由李连达在20世纪60年代发明,曾被广泛应用于实际生产中的工程问题。
该方法是通过构造不同大小和形状的简单多面体来搜索解决方案空间。
根据目标函数的变化趋势,复合形方法可以根据前一个顶点的坐标来确定新顶点,从而得到更好的解。
二、复合形法MATLAB程序1. 复合形法MATLAB基本编写格式:function [x,fval,exitflag,output] =fminsearch(fun,x0,options)Example:fun = @bivarfcn;[x,fval] = fminsearch(fun,[0,0])2. 复合形函数matlab代码展示:function[xmin,fval]=simplex(func,x)[n,m] = size(x);if n ~= m, error('x must be square!'); endx=[x eye(n)];y = feval(func,x(:,1));xlim = y;for j=2:n+1y = feval(func,x(:,j));if y < xlim, xlim = y; imin = j-1; endendxmax = y;for j=2:n+1y = feval(func,x(:,j));if y > xmax, xmax = y; kmax = j-1; endendfor i=1:10000xc = (sum(x(:,1:n),2)-x(:,n+1))/n;xr = 2*xc-x(:,n+1);yr = feval(func,xr);if yr < xlimxe = 3*xc-2*x(:,n+1);ye = feval(func,xe);if ye < yr, x(:,kmax+1) = xe; else x(:,kmax+1) = xr; endelseif yr < xmax x(:,kmax+1) = xr;xnew = (x(:,imin+1)+xc)/2; ynew = feval(func,xnew);if ynew < x(:,n+1) x(:,kmax+1) = xnew;else for j=1:n+1, if j ~= imin+1, x(:,j) = (x(:,j)-x(:,imin+1))/2+x(:,imin+1); end; end; endy = feval(func,x(:,1)); xlim = y; imin = 0;for j=2:n+1, y = feval(func,x(:,j)); if y < xlim, xlim = y; imin = j-1;end; end; xmax = y; for j=2:n+1, y = feval(func,x(:,j)); if y > xmax, xmax =y; kmax = j-1; end; end;endxmin = x(:,imin+1); fval = feval(func,xmina)3. 复合形法MATLAB例题:已知一个函数f(x1,x2)=-(1.4-x1^2)*(2.1-x2^2),求解f(x1,x2)的最小值以及使f(x1,x2)最小的点。
机械优化设计PPT
2.梯度投影法
约束面上的梯度投影方向
四、步长的确定
1.取最优步长
2. αk取到约束边界的最大步长
1.取最优步长
2. αk取到约束边界的最大步长
1) 取一试验步长αt,计算试验点xt。
2) 判别试验点xt的位置。 3) 将位于非可行域的试验点xt,调整到约束面上。
2. αk取到约束边界的最大步长
3.计算步骤
三、 不等式约束的增广乘子法
三、 不等式约束的增广乘子法
三、 不等式约束的增广乘子法
图6-36 增广乘子法框图
第七节 非线性规划问题的线性化解法——线性逼近法
一、 序列线性规划法
二、割平面法 三、小步梯度法 四、非线性规划法
一、 序列线性规划法
6-37
二、割平面法
三、小步梯度法
1) 由设计者决定k个可行点,构成初始复合形。 2) 由设计者选定一个可行点,其余的(k-1)个可行点用随机法产生。 3) 由计算机自动生成初始复合形的全部顶点。
二、复合形法的搜索方法
1.反射 2.扩张 3.收缩 4.压缩
1.反射
1) 2) 3) 4) 计算复合形各顶点的目标函数值,并比较其大小,求出最好点L、最坏 点H及次坏点G 计算除去最坏点H外的(k-1)个顶点的中心C 从统计的观点来看,一般情况下,最坏点H和中心点C的连线方向为目标
四、非线性规划法
第八节 广义简约梯度法
一、 简约梯度法
一、 简约梯度法
二、 广义简约梯度法
二、 广义简约梯度法
三、 不等式约束函数的处理和换基问题
1.不等式约束函数的处理方法
2.基变量的选择和换基问题
1.不等式约束函数的处理方法
2.基变量的选择和换基问题
机械优化设计-复合型法
comple(2,3,3,0.00001,x,a,b,xcom,&f);
printf(" \n\n\n输出最优解及目标函数值:\n");
printf("\n x1=%.5f x2=%.5f f(x1,x2)=%.5f\n\n ",x[0],x[1],f);
(一)题目:用复合形法求约束优化问题
; ; 的最优解。
基本思路:在可行域中构造一个具有K个顶点的初始复合形。对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。
{
xs=0;
for(l=0;l<ll;l++)
{
if(l!=lΒιβλιοθήκη )xs=xs+xcom[i][l];
}
if(lh>-1)
x0[i]=xs/(ll-1);
else
x0[i]=xs/ll;
}
}
void fxse(int n,int k,double x[],double xcom[][100],double fxk[])
iw=gau(x,g,kg);
if(iw==0)
goto s5;
for(i=0;i<n;i++)
xcom[i][0]=x[i];
for(l=1;l<k;l++)
for(i=0;i<n;i++)
复合形法
太原理工大学机械学院机测系课程上机实验报告课程名称:机械优化设计班级日期成绩评定姓名实验室老师签名实验名称用复合形法程序解题所用软件C++ DEV实验目的及内容实验目的:1.掌握并能够建立最优化基本类型问题的数学模型。
2.掌握最优化方法的基本概念、基本理论和基本方法,奠定最优化的理论基础。
3.能够熟练编制和调试最优化方法的程序,奠定解决实际中的优化问题的基础实验内容:理解复合形法并编写相关程序求其最优解。
1)2221)1()2()(min-+-=xxXF)(..2121≥-=xxXgt s2)(212≥--=xxXg取:321104]85[]65[-==-∈-∈εkxx实验原理:实验原理步骤、实验步骤:1,画流程图,编写程序;2,将目标函数代入;3,编译运行,将结果保存实验结果及分析**********复合形法计算结果**********本次优化的上下限为:a=[ -5.000, 6.000]b=[ -5.000, 8.000]初始复合形各顶点坐标及函数值:x( 0)=[ -5.0000000, 6.8509781], f( 0)= 83.2339449x( 1)=[ -5.0000000, 6.9139073], f( 1)= 83.9742994x( 2)=[ -5.0000000, 6.9560839], f( 2)= 84.4749350x( 3)=[ -5.0000000, 6.9535330], f( 3)= 84.4445555最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.942570812迭代轮数k= 1x( 0)=[ -5.0000000, 6.8509781], f( 0)= 83.2339449x( 1)=[ -5.0000000, 6.9139073], f( 1)= 83.9742994x( 2)=[ -5.0000000, 6.8412118], f( 2)= 83.1197550x( 3)=[ -5.0000000, 6.9535330], f( 3)= 84.4445555最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.790313540迭代轮数k= 2x( 0)=[ -5.0000000, 6.8509781], f( 0)= 83.2339449x( 1)=[ -5.0000000, 6.9139073], f( 1)= 83.9742994x( 2)=[ -5.0000000, 6.8412118], f( 2)= 83.1197550x( 3)=[ -5.0000000, 6.7584149], f( 3)= 82.1593422最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 1.158796098迭代轮数k= 3x( 0)=[ -5.0000000, 6.8509781], f( 0)= 83.2339449x( 1)=[ -5.0000000, 6.6907175],f( 1)= 81.3842661x( 2)=[ -5.0000000, 6.8412118], f( 2)= 83.1197550x( 3)=[ -5.0000000, 6.7584149], f( 3)= 82.1593422最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 1.326082257迭代轮数k= 4x( 0)=[ -5.0000000, 6.6496590], f( 0)= 80.9186469x( 1)=[ -5.0000000, 6.6907175], f( 1)= 81.3842661x( 2)=[ -5.0000000, 6.8412118], f( 2)= 83.1197550x( 3)=[ -5.0000000, 6.7584149], f( 3)= 82.1593422最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 1.284620848迭代轮数k= 5x( 0)=[ -5.0000000, 6.6496590], f( 0)= 80.9186469x( 1)=[ -5.0000000, 6.6907175], f( 1)= 81.3842661x( 2)=[ -5.0000000, 6.5154981], f( 2)= 79.4207197x( 3)=[ -5.0000000, 6.7584149], f( 3)= 82.1593422最低和最高顶点号:L= 2, H= 3复合形顶点值均方差: 1.843865066迭代轮数k= 6x( 0)=[ -5.0000000, 6.6496590], f( 0)= 80.9186469x( 1)=[ -5.0000000, 6.6907175], f( 1)= 81.3842661x( 2)=[ -5.0000000, 6.5154981], f( 2)= 79.4207197x( 3)=[ -5.0000000, 6.4368979], f( 3)= 78.5598586最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 1.889592676迭代轮数k= 7x( 0)=[ -5.0000000, 6.6496590], f( 0)= 80.9186469x( 1)=[ -5.0000000, 6.3303094], f( 1)= 77.4121981x( 2)=[ -5.0000000, 6.5154981], f( 2)= 79.4207197x( 3)=[ -5.0000000, 6.4368979], f( 3)= 78.5598586最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 2.100384836迭代轮数k= 8x( 0)=[ -5.0000000, 6.1388508], f( 0)= 75.4077872x( 1)=[ -5.0000000, 6.3303094], f( 1)= 77.4121981x( 2)=[ -5.0000000, 6.5154981], f( 2)= 79.4207197x( 3)=[ -5.0000000, 6.4368979], f( 3)= 78.5598586最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 2.741206122迭代轮数k= 9x( 0)=[ -5.0000000, 6.1388508], f( 0)= 75.4077872x( 1)=[ -5.0000000, 6.3303094], f( 1)= 77.4121981x( 2)=[ -5.0000000, 6.0244969], f( 2)= 74.2455693x( 3)=[ -5.0000000, 6.4368979], f( 3)= 78.5598586最低和最高顶点号:L= 2, H= 3复合形顶点值均方差: 2.738219360迭代轮数k= 10x( 0)=[ -5.0000000, 6.1388508], f( 0)= 75.4077872x( 1)=[ -5.0000000, 6.3303094], f( 1)= 77.4121981x( 2)=[ -5.0000000, 6.0244969], f( 2)= 74.2455693x( 3)=[ -5.0000000, 5.8105032], f( 3)= 72.1409408最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 3.274442715迭代轮数k= 11x( 0)=[ -5.0000000, 6.1388508], f( 0)= 75.4077872x( 1)=[ -5.0000000, 5.5505501], f( 1)= 69.7075064x( 2)=[ -5.0000000, 6.0244969], f( 2)= 74.2455693x( 3)=[ -5.0000000, 5.8105032], f( 3)= 72.1409408最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 3.840859862迭代轮数k= 12x( 0)=[ -5.0000000, 5.3484158], f( 0)= 67.9087203x( 1)=[ -5.0000000, 5.5505501], f( 1)= 69.7075064x( 2)=[ -5.0000000, 6.0244969], f( 2)= 74.2455693x( 3)=[ -5.0000000, 5.8105032], f( 3)= 72.1409408最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 3.914810890迭代轮数k= 13x( 0)=[ -5.0000000, 5.3484158], f( 0)= 67.9087203x( 1)=[ -5.0000000, 5.5505501], f( 1)= 69.7075064x( 2)=[ -5.0000000, 4.9787470], f( 2)= 64.8304278x( 3)=[ -5.0000000, 5.8105032], f( 3)= 72.1409408最低和最高顶点号:L= 2, H= 3复合形顶点值均方差: 4.655786221迭代轮数k= 14x( 0)=[ -5.0000000, 5.3484158], f( 0)= 67.9087203x( 1)=[ -5.0000000, 5.5505501], f( 1)= 69.7075064x( 2)=[ -5.0000000, 4.9787470], f( 2)= 64.8304278x( 3)=[ -5.0000000, 4.6192591], f( 3)= 62.0990368最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 4.977492567迭代轮数k= 15x( 0)=[ -5.0000000, 5.3484158], f( 0)= 67.9087203x( 1)=[ -5.0000000, 4.2432084], f( 1)= 59.5184005x( 2)=[ -5.0000000, 4.9787470], f( 2)= 64.8304278x( 3)=[ -5.0000000, 4.6192591], f( 3)= 62.0990368最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 5.130175009迭代轮数k= 16x( 0)=[ -5.0000000, 3.6586572], f( 0)= 56.0684582x( 1)=[ -5.0000000, 4.2432084], f( 1)= 59.5184005x( 2)=[ -5.0000000, 4.9787470], f( 2)= 64.8304278x( 3)=[ -5.0000000, 4.6192591], f( 3)= 62.0990368最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 5.591111034迭代轮数k= 17x( 0)=[ -5.0000000, 3.6586572], f( 0)= 56.0684582x( 1)=[ -5.0000000, 4.2432084], f( 1)= 59.5184005x( 2)=[ -5.0000000, 3.1271579], f( 2)= 53.5248005x( 3)=[ -5.0000000, 4.6192591], f( 3)= 62.0990368最低和最高顶点号:L= 2, H= 3复合形顶点值均方差: 5.383097686迭代轮数k= 18x( 0)=[ -5.0000000, 3.6586572], f( 0)= 56.0684582x( 1)=[ -5.0000000, 4.2432084],f( 1)= 59.5184005x( 2)=[ -5.0000000, 3.1271579], f( 2)= 53.5248005x( 3)=[ -5.0000000, 2.4505477], f( 3)= 51.1040888最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 5.032530479迭代轮数k= 19x( 0)=[ -5.0000000, 3.6586572], f( 0)= 56.0684582x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 3.1271579], f( 2)= 53.5248005x( 3)=[ -5.0000000, 2.4505477], f( 3)= 51.1040888最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 4.075033247迭代轮数k= 20x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 3.1271579], f( 2)= 53.5248005x( 3)=[ -5.0000000, 2.4505477], f( 3)= 51.1040888最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 2.445955398迭代轮数k= 21x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, -0.4348017], f( 2)= 51.0586558x( 3)=[ -5.0000000, 2.4505477], f( 3)= 51.1040888最低和最高顶点号:L= 0, H= 3复合形顶点值均方差: 1.421455082迭代轮数k= 22x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, -0.4348017], f( 2)= 51.0586558x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 1.090233677迭代轮数k= 23x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 2.3328587], f( 2)= 50.7765122x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.963931643迭代轮数k= 24x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, -0.2482854], f( 2)= 50.5582165x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.869333822迭代轮数k= 25x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 2.0903875], f( 2)= 50.1889450x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.718762840迭代轮数k= 26x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 0.3389249], f( 2)= 49.4370204x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 3复合形顶点值均方差:0.490383508迭代轮数k= 27x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 0.3389249], f( 2)= 49.4370204x( 3)=[ -5.0000000, 1.4296473], f( 3)= 49.1845968最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.222366457迭代轮数k= 28x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 1.5304375], f( 2)= 49.2813639x( 3)=[ -5.0000000, 1.4296473], f( 3)= 49.1845968最低和最高顶点号:L= 0, H= 1复合形顶点值均方差:0.166131819迭代轮数k= 29x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 1.5304375], f( 2)= 49.2813639x( 3)=[ -5.0000000, 1.4296473], f( 3)= 49.1845968最低和最高顶点号:L= 1, H= 2复合形顶点值均方差:0.137913956迭代轮数k= 30x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 0.6201420], f( 2)= 49.1442921x( 3)=[ -5.0000000, 1.4296473], f( 3)= 49.1845968最低和最高顶点号:L= 1, H= 3复合形顶点值均方差:0.086897399迭代轮数k= 31x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 0.6201420], f( 2)= 49.1442921x( 3)=[ -5.0000000, 0.5917880], f( 3)= 49.1666371最低和最高顶点号:L= 1, H= 3复合形顶点值均方差:0.079891031迭代轮数k= 32x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 0.6201420], f( 2)= 49.1442921x( 3)=[ -5.0000000, 0.8611643], f( 3)= 49.0192754最低和最高顶点号:L= 3, H= 2复合形顶点值均方差:0.070394704迭代轮数k= 33x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313],f( 1)= 49.0454835x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.8611643], f( 3)= 49.0192754最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.046304162迭代轮数k= 34x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.8611643], f( 3)= 49.0192754最低和最高顶点号:L= 2, H= 1复合形顶点值均方差:0.025163811迭代轮数k= 35x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 1.1229312], f( 1)= 49.0151121x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.8611643], f( 3)= 49.0192754最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.013205196迭代轮数k= 36x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 1.1229312], f( 1)= 49.0151121x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 1.1129387], f( 3)= 49.0127552最低和最高顶点号:L= 2, H= 1复合形顶点值均方差:0.011065035迭代轮数k= 37x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 1.1129387], f( 3)= 49.0127552最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.008121836迭代轮数k= 38x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.005268438迭代轮数k= 39x( 0)=[ -5.0000000, 0.9159881], f( 0)= 49.0070580x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.003755703迭代轮数k= 40x( 0)=[ -5.0000000, 1.0838142], f( 0)= 49.0070248x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.003740303迭代轮数k= 41x( 0)=[ -5.0000000, 0.9272981], f( 0)= 49.0052856x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002951093迭代轮数k= 42x( 0)=[ -5.0000000, 1.0691112], f( 0)= 49.0047764x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002729299迭代轮数k= 43x( 0)=[ -5.0000000, 0.9368551], f( 0)= 49.0039873x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002398513迭代轮数k= 44x( 0)=[ -5.0000000, 1.0566871], f( 0)= 49.0032134x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002095651迭代轮数k= 45x( 0)=[ -5.0000000, 0.9449307], f( 0)= 49.0030326x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002029012迭代轮数k= 46x( 0)=[ -5.0000000, 1.0461888], f( 0)= 49.0021334x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.001729933迭代轮数k= 47x( 0)=[ -5.0000000, 1.0461888], f( 0)= 49.0021334x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 1.0468300], f( 3)= 49.0021930最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.001471563迭代轮数k= 48x( 0)=[ -5.0000000, 1.0461888], f( 0)= 49.0021334x( 1)=[ -5.0000000, 1.0113408],f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9901944], f( 3)= 49.0000961最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.001025689迭代轮数k= 49x( 0)=[ -5.0000000, 0.9758200], f( 0)= 49.0005847x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9901944], f( 3)= 49.0000961最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.000252186*********************复合形法优化最优点及目标函数值为:x( *)=[ -5.0000000, 1.0090879], f( *)= 49.0000826迭代精度:0.000252186本次优化最终迭代次数为:49算法程序实现//*复合形法求仅有不等式的非线性最优化问题**/#include <math.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 2 /*给出优化问题的维数N*/#define K 4 /*给出复合形法顶点数K*/#define N1 5 /*给出约束方程个数K*/#define E 0.0000001 /*复合形法迭代精度*/#define NM 500 /*寻找初始复合形的最大次数*/FILE *fp;char outname[50]="复合形法计算结果.txt"; /*输出文件名*/int H=0,L=0; /*H,L--复合形顶点最大和最小值顶点号*/ double f[K]; /*本程序顶点值从f[0]开始*/struct{double x1[N]; /* double x2; 改为数组方式*/}Tpoint[K],xc,xr; /*Tpoint存放K个点的坐标,xc,xr分别为中心点和影射点坐标*//*目标函数子程序*/double function(double x[]){double zhi;zhi=(x[0]-2)(x[0]-2)+(x[1]-1)*(x[1]-1);return(zhi);}/*约束条件子程序*/int strain(double x[]){int i,fin=1;double g[N1];g[0]=x[1]-x[0]*x[0];g[1]=2-x[0]-x[1];for(i=0;i<N1;i++)if(g[i]≥0.){fin=0;break;}return(fin);}/*初始可行点产生区间*/void startab(double a[],double b[]){a[0]=-5.0;b[0]=6.0;a[1]=-5.0;b[1]=8.0;return;}/***********以上为修改部分***********//*输出当前迭代点坐标及目标函数值*/double xfout(double x[],int m){int j;double f;f=function(x);fprintf(fp," x(%3d)=[",m);for(j=0;j<N-1;j++)fprintf(fp,"%15.7lf,",x[j]);fprintf(fp,"%15.7lf], f(%3d)=%15.7lf\n",x[N-1],m,f);return f;}/**初始复合形****/int startfhx(double a[],double b[],int num){int i,i1,iw,kk=0;int j,j1,m,fh1=1;double sum2[N],sum3,delt1=0.01;double alf,r;srand( (unsigned)time( NULL ) ); /*种子函数*/do /*自动产生第一个可行点*/{for(i=0;i<N;i++){r=rand()/32767.; /*直接调用函数产生随机数*/Tpoint[0].x1[i]=a[i]+r*(b[i]-a[i]);}iw=strain(Tpoint[0].x1);kk=kk+1;if(kk>num){printf("找不到初始可行点,可能初始区间不合适!\n");fh1=2;return(fh1);}}while(iw==0);for(j=1;j<K;j++) /*产生其余个可行点*/{do{sum3=1.;for(i=0;i<N;i++){r=rand()/32767.; /*直接调用函数产生随机数*/Tpoint[j].x1[i]=a[i]+r*(b[i]-a[i]);}iw=strain(Tpoint[j].x1);if(iw==0){m=j;for(i1=0;i1<N;i1++)sum2[i1]=0.;for(i1=0;i1<N;i1++) /*求前j-1个顶点中心*/for(j1=0;j1<m;j1++)sum2[i1]+=Tpoint[j1].x1[i1];for(j1=0;j1<N;j1++)xc.x1[j1]=sum2[j1]/m;alf=0.5;do /*求中心的映射点*/{for(i=0;i<N;i++)Tpoint[m].x1[i]=xc.x1[i]+alf*(Tpoint[m].x1[i]-xc.x1[i]);sum3=0.;for(i1=0;i1<N;i1++)sum3+=(Tpoint[m].x1[i1]-xc.x1[i1])*(Tpoint[m].x1[i1]-xc.x1[i1]);sum3=sqrt(sum3);iw=strain(Tpoint[m].x1);}while(iw==0&&sum3>delt1);}}while(sum3<delt1);}return(fh1);}void suan() /*计算值并找出最好点和最差点*/{double max,min;int i;for(i=0;i<K;i++)f[i]=function(Tpoint[i].x1);max=f[0];min=f[0];H=0;L=0;for(i=1;i<K;i++){if(f[i]>max){max=f[i];H=i;}elseif(f[i]<min){min=f[i];L=i;}}return;}void suan1() /*找出次坏点*/{double min;int i,ih;min=f[L];ih=0;for(i=0;i<K;i++){if(i==H) continue;if(f[i]>min){min=f[i];ih=i;}}H=ih;return;}double panbie() /*检验迭代终止条件*/{double sum=0.0,temp;int i;for(i=0;i<K;i++)sum+=(f[i]-f[L])*(f[i]-f[L]);temp=sqrt(sum/K);return(temp);}int newfhx(double a[],double b[]){int i,j,fh1=1,chd=0;double sum1[N];double alfa; /**映射系数**/do{alfa=1.3;for(j=0;j<N;j++)sum1[j]=0.0;for(i=0;i<K;i++){if(i==H)continue;else{for(j=0;j<N;j++)sum1[j]+=Tpoint[i].x1[j];}}for(j=0;j<N;j++)xc.x1[j]=sum1[j]/(K-1);if(!(strain(xc.x1))){printf("xc is wrong非凸集\n");fh1=3;for(i=0;i<N;i++){a[i]=Tpoint[L].x1[i];b[i]=xc.x1[i];}return(fh1);}for(j=0;j<N;j++)xr.x1[j]=xc.x1[j]+alfa*(xc.x1[j]-Tpoint[H].x1[j]);while(!(strain(xr.x1))||(function(xr.x1)>=function(Tpoint[H].x1))){alfa=alfa*0.5;for(j=0;j<N;j++)xr.x1[j]=xc.x1[j]+alfa*(xc.x1[j]-Tpoint[H].x1[j]);if(alfa<E){if(chd==0){suan1(); /*寻找次坏点*/alfa=1.3;chd=1;break;}elsereturn(4);}}}while(chd==1);for(j=0;j<N;j++)Tpoint[H].x1[j]=xr.x1[j]; /**/return(fh1);}void main(){int i,val1,val2,dds,nmax;double a[N],b[N],fv;nmax=NM;fp=fopen(outname,"w");fprintf(fp,"**********复合形法计算结果**********\n\n");startab(a,b);fprintf(fp,"本次优化的上下限为:\n");fprintf(fp," a=[");for(i=0;i<N-1;i++)fprintf(fp,"%8.3f,",a[i]);fprintf(fp,"%8.3f]\n",a[N-1]);fprintf(fp," b=[");for(i=0;i<N-1;i++)fprintf(fp,"%8.3f,",b[i]);fprintf(fp,"%8.3f]\n",b[N-1]);do{val2=1;dds=1;val1=startfhx(a,b,nmax);if(val1==2)fprintf(fp,"找不到初始可行点,可能初始区间不合适!\n");else{fprintf(fp,"初始复合形各顶点坐标及函数值:\n");for(i=0;i<K;i++)fv=xfout(Tpoint[i].x1,i);suan();fprintf(fp," 最低和最高顶点号:L=%2d, H=%2d\n",L,H);fprintf(fp,"复合形顶点值均方差:%15.9lf\n\n",panbie());while(panbie()>E){val2=newfhx(a,b);if(val2==3){fprintf(fp,"该优化问题可行域为非凸集,");fprintf(fp,"重新给出优化的上下限为:\n");fprintf(fp,"a=[");for(i=0;i<N-1;i++)fprintf(fp,"%8.3f,",a[i]);fprintf(fp,"%8.3f]\n",a[N-1]);fprintf(fp,"b=[");for(i=0;i<N-1;i++)fprintf(fp,"%8.3f,",b[i]);fprintf(fp,"%8.3f]\n",b[N-1]);break;}suan();fprintf(fp,"迭代轮数k=%3d \n",dds);for(i=0;i<K;i++)fv=xfout(Tpoint[i].x1,i);fprintf(fp," 最低和最高顶点号:L=%2d, H=%2d\n",L,H);fprintf(fp,"复合形顶点值均方差:%15.9lf\n\n",panbie());dds++;}}}while(val2==3&&val1!=2);if(val2==4){fprintf(fp,"对次坏点的影射仍然无法找到下一个");fprintf(fp,"复合形顶点,计算终止。
机械优化复合形法 程序设计
课程设计(实验)材料(3)机械优化设计课程设计(实验)报告专业班级:设计题目:复合形程序设计学生姓名:学生学号:任课教师:2013年月日一、设计要求:根据已知条件,用复合形法完成一次迭代,只用反射变换复合形即可。
已知条件:1、目标函数:f(x)=25/(x1*x2*x2*x2)2、约束条件:g(x) 30/(x1*x2*x2*x2)-50<=0G(x) 0.0004*x1*x2-0.001<=0X1>=2 x1<=4 x2<=1 x2>=0.53、初始复合形顶点:X1=[2.2,0.55] X2=[2.4,0.6] X3=[2.6,0.65] X4=[2.8,0,7]二、方法原理:复合形法的基本思路是在n维空间的可行域中选取K个设计点(通常取n+1<=K<=2*n)作为初始复合形的顶点。
然后比较复合形各顶点目标函数的大小,其中目标函数值最大的点作为坏点,以坏点之外其余各点的中心为映射中心,寻找坏点的映射点,一般说来此映射点的目标函数值总是小于坏点的,也就是说映射点优于坏点。
这时,以映射点替换坏点与原复合形除坏点之外其余各点构成K个顶点的新的复合形。
如此反复迭代计算,在可行域中不断以目标函数值低的新点代替目标函数值最大的坏点从而构成新复合形,使复合形不断向最优点移动和收缩,直至收缩到复合形的各顶点与其形心非常接近、满足迭代精度要求时为止。
最后输出复合形各顶点中的目标函数值最小的顶点作为近似最优点。
三、程序清单:# include <stdio.h># include <math.h># define p 1.3# define k 4float fr,fh;float xr[2][1],xc[2][1];int xb_h,xb_xh;float f(float x[2][1]);float x1[2][1] = {{2.2},{0.55}};float x2[2][1] = {{2.4},{0.63}};float x3[2][1] = {{2.6},{0.65}};float x4[2][1] = {{2.8},{0.7 }};float Max_value,Min_value,Max_h_value; float shuzu[4];void hanshu_Maxvalue(void);void hanshu_Max_h_value(void);void zhshuzu(void);void hanshu_Minvalue(void);void chu_h(void);int ke_xr(void);int main(void){ int kexing_flag = 0;zhshuzu();hanshu_Minvalue();hanshu_Maxvalue();hanshu_Max_h_value();chu_h();while(ke_xr()){kexing_flag = 1;switch(xb_xh){case 1: fr = f(xr);fh = f(x1);if(fr < fh){ x1[0][0] = xr[0][0];x1[1][0] = xr[1][0]; }break;case 2: fr = f(xr);fh = f(x2);if(fr < fh){ x2[0][0] = xr[0][0];x2[1][0] = xr[1][0]; }break;case 3: fr = f(xr);fh = f(x3);if(fr < fh){ x3[0][0] = xr[0][0];x3[1][0] = xr[1][0]; } break;case 4: fr = f(xr);fh = f(x4);if(fr < fh){ x4[0][0] = xr[0][0];x4[1][0] = xr[1][0]; }break;} if(kexing_flag == 1)break;} printf("替换后结果为");printf("x1=");printf("[%.1f,%.2f]\n",x1[0][0],x1[1][0]);printf("输出\n");printf("x2=");printf("[%.1f,%.2f]\n",x2[0][0],x2[1][0]);printf("x3=");printf("[%.1f,%.2f]\n",x3[0][0],x3[1][0]);printf("x4=");printf("[%.1f,%.2f]\n",x4[0][0],x4[1][0]);return 0;}float f(float x[2][1]){float hanshuvalue;hanshuvalue = (25 * 1.0) / (x[0][0] * pow(x[1][0],3));return hanshuvalue;}void zhshuzu(void){shuzu[0] = f(x1);shuzu[1] = f(x2);shuzu[2] = f(x3);shuzu[3] = f(x4);}void hanshu_Minvalue(void){int i;Min_value = shuzu[0] ;for(i = 0; i < 4; i++)if(shuzu[i] <= Min_value )Min_value = shuzu[i] ;}void hanshu_Max_h_value(void){int i;Max_h_value = shuzu[0] ;for(i = 0; i<4; i++){if( xb_h == i)continue;elseif(shuzu[i] >= Max_h_value)Max_h_value = shuzu[i];} }void hanshu_Maxvalue(void){int i;Max_value = shuzu[0] ;for(i = 0; i < 4; i++)if(shuzu[i] >= Max_value ){Max_value = shuzu[i] ;xb_h = i;}}void chu_h(void){switch( xb_h){case 0: xc[0][0] = 1.0*(x2[0][0] + x3[0][0] + x4[0][0]) / (k-1);xc[1][0] = 1.0*(x2[1][0] + x3[1][0] + x4[1][0]) / (k-1);xr[0][0] = xc[0][0] + p*(xc[0][0] - x1[0][0]);xr[1][0] = xc[1][0] + p*(xc[1][0] - x1[1][0]); xb_xh = 1;break;case 1: xc[0][0] = 1.0*(x1[0][0] + x3[0][0] + x4[0][0]) / (k-1);xc[1][0] = 1.0*(x1[1][0] + x3[1][0] + x4[1][0]) / (k-1);xr[0][0] = xc[0][0] + p*(xc[0][0] - x2[0][0]);xr[1][0] = xc[1][0] + p*(xc[1][0] - x2[1][0]); xb_xh = 2;break;case 2: xc[0][0] = 1.0*(x1[0][0] + x2[0][0] + x4[0][0]) / (k-1);xc[1][0] = 1.0*(x1[1][0] + x2[1][0] + x4[1][0]) /(k-1);xr[0][0] = xc[0][0] + p*(xc[0][0] - x3[0][0]);xr[1][0] = xc[1][0] + p*(xc[1][0] - x3[1][0]); xb_xh = 3;break;case 3: xc[0][0] = 1.0*(x1[0][0] + x2[0][0] + x3[0][0]) / (k-1);xc[1][0] = 1.0*(x1[1][0] + x2[1][0] + x3[1][0]) / (k-1);xr[0][0] = xc[0][0] + p*(xc[0][0] - x3[0][0]);xr[1][0] = xc[1][0] + p*(xc[1][0] - x3[1][0]); xb_xh = 4;break;}}int ke_xr(void){if((30*1.0 / (xr[0][0]*pow(xr[1][0],3)) - 50) <= 0){ if((0.0004*xr[0][0]*xr[1][0] -0.001) <= 0)if(2 <= xr[0][0] && xr[0][0] <= 4 )if(0.5 <= xr[1][0] && xr[1][0] <= 1)return 1;} else return 0;}四、实验结果(要求附上程序运行结果截图)五、手算过程计算初始复合形各顶点的值f(X1)=68.3 f (X2)=48.2f (X3)=35.0 f (X4)=26.0坏点X(H)=X1 好点X(L)=X4去掉坏点后各点的几何中心X(C) X(C)=[2.6,0.65] 取映射α=1.3映射X(R)=X(C)+α(X(C)-X(H))=[2.82,0.78] 将映射点代入约束条件验证0.0004*2.82*0.78-0.001=-0.0001202<0 满足约束条件X(R)=[2.82,0.78] 是新的复合形顶点最优点为X(R)=[3.12,0.78]。
复合形法减速器优化设计
1 前言1.1 复合形法减速器优化设计的意义1.1.1 机械优化设计与减速器设计现状机械优化设计是在电子计算机广泛应用的基础上发展起来的一门先进技术。
它是根据最优化原理和方法,利用电子计算机为计算工具,寻求最优化设计参数的一种现代设计方法。
实践证明,优化设计是保证产品具有优良的性能、减轻重量或体积、降低成本的一种有效设计方法。
机械优化设计的过程是首先将工程实际问题转化为优化设计的数学模型,然后根据数学模型的特征,选择适当的优化设计计算方法及其程序,通过计算机求得最优解。
概括起来,最优化设计工作包括两部分内容:(1)将设计问题的物理模型转变为数学模型。
建立数学模型时要选取设计变量,列出目标函数,给出约束条件。
目标函数是设计问题所要求的最优指标与设计变量之间的函数关系式。
(2)采用适当的最优化方法,求解数学模型。
可归结为在给定的条件(例如约束条件)下求目标函数的极值或最优值问题。
减速器作为一种传动装置广泛用于各种机械产品和装备中,因此,提高其承载能力,延长使用寿命,减小其体积和质量等,都是很有意义的,而目前在二级传动齿轮减速器的设计方面,许多企业和研究所都是应用手工设计计算的方法,设计过程琐碎而且在好多方面都是通过先估计出参数然后再校核计算的过程。
这对于设计者来说是枯燥无味的,进行的是重复性工作,基本没有创造性;对于企业来说增加了产品的成本且不易控制产品质量。
这些对提高生产力,提高经济效益都是不利的。
现代最优化技术的发展为解决这些问题提供了有效途径。
目前,最优化方法在齿轮传动中的应用已深入到设计和研究等许多方面。
例如,关于对齿面接触强度最佳齿廓的设计;关于形成最佳油膜或其它条件下齿轮几何参数的最优化设计;关于齿轮体最优结构尺寸的选择;关于齿轮传动装置传动参数的最优化设计;在满足强度要求等约束条件下单位功率质量或体积最小的变速器的最优化设计;以总中心距最小和以转动惯量最小作为目标的多级齿轮传动系统的最优化设计;齿轮副及其传动系统的动态性能的最优化设计(动载荷和噪音最小化的研究,惯性质量的最优化分配及弹性参数的最优选择)等。
机械优化实验报告
一、实验目的本次实验旨在加深对机械优化设计方法的基本理论和算法步骤的理解,培养学生独立编制、调试计算机程序的能力,并掌握常用优化方法程序的使用方法。
通过实验,学生能够灵活运用优化设计方法解决工程实际问题。
二、实验内容本次实验主要涉及以下内容:1. 优化方法的基本原理2. 编程实现优化方法3. 优化方法的实际应用三、实验步骤1. 黄金分割法(1)基本原理黄金分割法是一种在给定初始区间内搜索极小点的一维搜索方法。
其基本原理是:在区间内取两个点,根据函数值的比较,将区间分为三段,保留包含极小值的段,再进行相同的操作,逐步缩小搜索区间。
(2)编程实现根据黄金分割法的基本原理,编写相应的C语言程序,实现一维搜索。
```c#include <stdio.h>#include <math.h>double f(double x) {// 定义目标函数return x x - 4 x + 4;}double golden_section_search(double a, double b, double tol) {double r = 0.618;double a1 = a + r (b - a); double a2 = b - r (b - a); double fa1 = f(a1);double fa2 = f(a2);while (fabs(b - a) > tol) { if (fa1 > fa2) {a = a1;a1 = a2;a2 = b - r (b - a); fa1 = fa2;fa2 = f(a2);} else {b = a2;a2 = a1;a1 = a + r (b - a); fa2 = fa1;fa1 = f(a1);}}return (a + b) / 2;}int main() {double x_min = golden_section_search(a, b, tol);printf("Optimal solution: x = %f\n", x_min);return 0;}```(3)结果分析通过运行程序,可以得到最优解 x = 2.000000,目标函数值为 f(x) = 0。
机械优化大作业-MATLAB复合型法
机床主轴机构优化设计机床主轴是机床中重要的零件之一,一般多为支撑空心阶梯轴。
为了便于使用材料力学进行结构分析,常常将阶梯轴简化成以当量直径表示的等截面轴。
如图0.1所示是一个已经简化处理的专用机床双主轴的力学模型。
从机床主轴制造成本较低和加工精度较高的要求出发,需要考虑主轴的自重和外身段挠度这样两个重要因素。
对于专用机床来说,并不追求过高的加工精度。
因此选取零件自身重量轻为设计目标,将主轴的刚度作为约束条件。
一、设计变量和目标函数当主轴的材料选定之后,与主轴重量设计方案有关设计变量主轴的外径D、孔径d、两支承跨度l、和外伸段长度a,如图0.1所示。
由于机床主轴的孔径主要取决于待加工棒料的直径,不能作为设计变量处理。
因此,设计变量为机床主轴重量最轻优化设计目标函数为二、约束条件1.刚度性条件机床的加工质量在很大程度上取决于主轴的刚度,主轴刚度是一个很重要的性能指标。
因此,要求主轴悬臂端挠度不超过给定的变形量y 0 。
根据材料力学可知,主轴悬臂端挠度为)()()(44231232d x E 3x x Fx 64EJ 3a l Fa y -+=+=π式中,)(44d -D 64J π=是空心主轴的惯性矩;E=2.1x105MPa 是主轴的弹性模量;F 是作用主轴外伸端的力。
整理得到主轴刚度的约束条件为0d x E 3x x Fx 64X g 442312301≥-+-=)()()(πy2.设计边界条件三个设计变量的边界约束条件为max min l l l ≤≤max min D D D ≤≤maxmin a a a ≤≤3.具体算例已知某机床主轴悬臂端受到的切削力F=15000N ,主轴内径d=30mm ,悬臂端许用挠度y 0=0.05mm 。
要求主轴两支承跨度mm lmm 650300≤≤,外径mm D mm 14060≤≤,悬臂长度mm a mm 15090≤≤。
建立优化的数学模型)30)((7854.0)(22231++=x x x X fTT a D l x x x X ],,[],,[321==0)30()(7009.91)(..44231231≥-+⨯-=x x x x X g t s01300/)(12≥-=x X g0650/1)(13≥-=x X g0160/)(24≥-=x X g0140/1)(25≥-=x X g0190/)(36≥-=x X g0150/1)(37≥-=x X g4.基于matlab 程序的复合形法实现优化(1)算法原理复合形法来源于无约束优化问题的单纯形法,通过构造复合形来求得最优解,新的复合形通过替换旧的复合形中的坏点(目标函数最大或次大的点)得到,替换方式仍是单纯性法中的反应、压缩、扩展这几个基本方法。
《机械优化设计》教学大纲
《机械优化设计》教学大纲大纲说明课程代码:3335047总学时:48学时(讲课40学时,上机8学时)总学分:3课程类别:专业模块选修课适用专业:机械设计制造及其自动化专业预修要求:高等数学、线性代数、BASIC或其它适于科学计算的高级语言、工程力学、机械设计基础一、课程的性质、目的、任务:机械优化设计是在电子计算机广泛应用的基础上发展起来的一门先进技术.它是根据最优化原理和方法,以电子计算机为计算工具,寻求最优设计参数的一种现代设计方法。
该课程是为高年级设置的专业课,可供机械类或近机类专业的学生学习。
该课程的主要目的和任务在于培养学生:1)了解和基本掌握机械优化设计的基本知识2)扩大视野,并初步具有应用机械优化设计的基本理论和基本方法解决简单工程实际问题的素质。
二、课程教学的基本要求:课堂讲授:课堂讲授主要以导学式教学为主,启发引导学生的学习兴趣,通过实例及典型例题加深学生对课堂内容的理解。
实践性环节基本要求:本课程的实践性环节主要是上机编制和调试程序(8学时)1)目的和要求上机调试并通过教材上已有的或是自行编制的计算程序,达到巩固某些基本的重要算法的目的2)内容编制并调试一维收索方法、无约束优化方法、约束优化方法及机械零件设计优化计算程序,上机练习并输出计算结果。
课程考核要求:期末考试成绩占总成绩的60—70%,平时成绩占30-40%。
三、大纲的使用说明:课程总学时:课堂教学+上机时数 = 40+8大纲正文第一章绪论学时:1学时(讲课1学时)本章讲授要点:1)明确本课程的研究对象、内容、性质、任务;2)明确优化的含义、机械优化设计的内容及目的.重点:了解机械优化设计的一般过程。
难点:机械优化设计的一般步骤。
第二章优化设计概述学时:3学时(讲课3学时)本章讲授要点:通过机械设计优化问题示例,使学生了解机械优化设计的基本概念和基本术语、优化设计的数学模型、优化问题的几何描述、优化设计的基本方法。
重点:掌握可行域与非可行域、等值线(面)的概念及在优化方法中的重要意义。
机械优化设计方案三个案例
机械优化设计案例11.题目对一对单级圆柱齿轮减速器,以体积最小为目标进行优化设计。
2■已知条件已知数输入功p=58kw,输入转速n i=1000r/min,齿数比u=5, 齿轮的许用应力[、:]H=550Mpa,许用弯曲应力[:]F=400Mpa。
3■建立优化模型3.1问题分析及设计变量的确定由已知条件得求在满足零件刚度和强度条件下,使减速器体积最小的各项设计参数。
由于齿轮和轴的尺寸(即壳体内的零件) 是决定减速器体积的依据,故可按它们的体积之和最小的原则建立目标函数。
单机圆柱齿轮减速器的齿轮和轴的体积可近似的表示为:2 2 2 2 2 2v =0.25*0 -d z1) 0.25二b(d2 -d z2) -0.25(b -c)(D g2 -d g2)-d0c 0.25二l(d; d;2) 7二d; 8:d;22 2 2 2 2 2 2 2= 0.25叫m z b _d z初+m z u b _d z2b-0.8b(mzu—10m) +2 2 2 22.05bd Z2 -0.05b(mzu -10m -1.6d z2)+d zd + 28d z1 +32d z2】式中符号意义由结构图给出,其计算公式为d1= mz, d2= mz2D g2二u m1z10md g2=1.6d z2,d0=0.25(u m1z10m-1.6d z2)c =0.2b由上式知,齿数比给定之后,体积取决于b、Z1、m、l、d z1和d z2六个参数,则设计变量可取为x 二[X1 X2 X3 X4 X冷]丁=[b 乙m I d z1 d z2〕T3.2目标函数为2 2 2 2 2 2 f (x^ 0.785398(4.75X1X2X385X1X2X3-85X1X30.92X1X^X1X52 2 2 2 2 20.8x1x2x3x^ -1.6x1x3x6x4x5x4x628x532x6)—;min3.3约束条件的建立1)为避免发生根切,应有乙-為山=17,得g i(x) =17 _X2 乞0:? .:■■ b.■:min 二—T max m CO CD 2 )齿宽应满足 d , Fin和Fax为齿宽系数'd的最大值和最小值,一般取;:min =0.9, max=1.4,得g2(x) =0.9 -为(X2X3) _0g3(x) =x1;(X2X3) -1.4 乞03)动力传递的齿轮模数应大于2mm,得g4(x)=2-X3 乞04)为了限制大齿轮的直径不至过大,小齿轮的直径不能大于d1 max 彳得g5(x) 7x3 -3 0 005)齿轮轴直径的范围:dzmin - dz "/x得g6(x)=1 0 0X5 _0g7(x) =X5 -1 5 00g8(x) =1 3 0X6 岂0g9(x)=冷一2 0 0 06)轴的支撑距离1按结构关系,应满足条件:1 - b • 2:伽• 0.5dz2(可取比min =20),得g10 (x)二X1 0.5x6 - X4 - 40 _ 0 7)齿轮的接触应力和弯曲应力应不大于许用值,得g11(x) =1468250. (x2x3 _ % ) -550 - 0q12(x)=7098 2 Q-4 2 一400 —0 12X1X2X3 (0.169 0.6666 10 x^ 0.854 10 X2)g13(x)=70982 2 4 2 -400 空01X1X2X3 (0.2824 0.177 10 x^0.394 10 X2)8)齿轮轴的最大挠度;max 不大于许用值,得g 14(x ) =117.04x ;.(X 2X 3X 4) -0.003x 4 乞 09)齿轮轴的弯曲应力;w 不大于许用值['」w ,得 g i5(x )=厶](2.85"0 生)2 +2.4X101'-5.5 兰0X 5 V X 2X 3 | 61 J 2.85^ 10 沧\2 丄c 12g i6(x )=p 1( -------------- ) +6X10 —5.5 兰 0X 6 t X 2X 34■优化方法的选择由于该问题有6个设计变量,16个约束条件的优化设计问题, 采用传统的优化设计方法比较繁琐,比较复杂,所以选用 Matlab 优化工具箱中的fmincon 函数来求解此非线性优化问题,避免了 较为繁重的计算过程。
机械优化设计实验报告
《机械优化设计》实验报告目录1.进退法确定初始区间 (3)1.1 进退法基本思路 (3)1.2 进退法程序框图 (3)1.3 题目 (3)1.4 源程序代码及运行结果 (3)2.黄金分割法 (4)2.2黄金分割法流程图 (4)2.3 题目 (5)2.4 源程序代码及结果 (5)3.牛顿型法 (5)3.1牛顿型法基本思路 (6)3.2 阻尼牛顿法的流程图 (6)3.3 题目 (6)3.4 源程序代码及结果 (6)4.鲍威尔法 (7)4.1 鲍威尔法基本思路 (7)4.2 鲍威尔法流程图 (7)4.3 题目 (8)4.4 源程序代码及结果 (8)5. 复合形法 (15)5.1 复合行法基本思想 (15)5.3 源程序代码及结果 (15)6. 外点惩罚函数法 (23)6.1解题思路: (23)6.2 流程框图 (23)6.3 题目 (23)6.4 源程序代码及结果 (23)7.机械设计实际问题分析 (29)7.2计算过程如下 (29)7.3 源程序编写 (30)8.报告总结 (32)1.进退法确定初始区间1.1 进退法基本思路:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。
1.2 进退法程序框图1.3 题目:用进退法求解函数()2710=-+的搜索区间f x x x1.4 源程序代码及运行结果#include <stdio.h>#include <math.h>main(){float h,h0,y1,y2,y3,a1=0,a2,a3,fa2,fa3;scanf("h0=%f,y1=%f",&h0,&y1);h=h0;a2=h;y2=a2*a2-7*a2+10;if (y2>y1){h=-h;a3=a1;y3=y1;loop:a1=a2;y1=y2;a2=a3;y2=y3;}a3=a2+2*h;y3=a3*a3-7*a3+10;if (y3<y2){goto loop;}elseprintf("a1=%f,a2=%f,a3=%f,y1=%f,y2=%f,y3=%f\n",a1,a2,a3,y1,y2,y3);} 搜索区间为0 62.黄金分割法2.1黄金分割法基本思路:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。
优化设计复合形法 C语言程序
EE+=pow((FF[j]-F(Xs)),2); } EE=pow((1/(k+0.0)*EE),0.5); if(EE<=E1) { goto s333; } for(i=0;i<n;i++) { Xc[i]=0; for(j=1;j<k;j++) { Xc[i]+=X[j][i]; } Xc[i]=1/(k-1.0)*Xc[i]; } if(cons(Xc)==1) { af=1.3; ss:for(i=0;i<n;i++) { Xr[i]=Xc[i]+af*(Xc[i]-Xh[i]); } if(cons(Xr)==1) { if(F(Xr)>=F(Xh)) { if(af<=ep) { for(i=0;i<n;i++) { Xh[i]=Xg[i]; } af=1.3;goto ss; } else {af=1/2.0*af;goto ss;}
} for(j=1;j<k;j++) { for(i=0;i<n;i++) { X0[i]=0; for(jj=1;jj<j+1;jj++) { X0[i]+=X[jj][i]; } X0[i]=(1/j)*(X0[i]); } if(cons(X0)==0) { goto sl; } for(i=0;i<n;i++) {XX[i]=X[j][i];} while(cons(XX)==0) { for(i=0;i<n;i++) { X[j][i]=X0[i]+0.5*(X[j][i]-X0[i]); XX[i]=X[j][i]; } } } } main() { double EE,Xc[n],Xh[n],Xg[n],X1[n],Xr[n],Xs[n],w; int l, lp, lp1; bou(); s111:produce(a,b); s222:for(j=0;j<k;j++) {
优化设计复合型法程序
复合形法Const N = 2Const K = 4'Const N1 = 2Const N1 = 5Const E = 0.001Const NM = 500Dim OutName As StringDim H As IntegerDim L As IntegerDim f() As DoubleFunction Fx(x() As Double) As Double'Fx = (x(1) - 2) * (x(1) - 2) + (x(2) - 1) * (x(2) - 1)Fx = x(2) ^ 3 * ((x(1) - 3) ^ 2 - 9) / (27 *Sqr(3))End FunctionFunction Strain(x() As Double) As Integer Dim i As IntegerDim fin As IntegerDim g() As DoubleReDim g(N1) As Doublefin = 1'=========所有约束条件都为大于0的格式:g(x)>0==============='g(1) = x(2) - x(1) * x(1)'g(2) = 2 - x(1) - x(2)g(1) = x(1) / Sqr(3) - x(2)g(2) = x(1) + x(2) / Sqr(3)g(3) = 6 - x(1) - Sqr(3) * x(2)g(4) = x(1)g(5) = x(2)For i = 1 To N1If g(i) < 0# Thenfin = 0Exit ForEnd IfNext iStrain = finEnd FunctionSub Startab(a() As Double, b() As Double)'a(1) = -5#: b(1) = 6#'a(2) = -5#: b(2) = 8#a(1) = -10#: b(1) = 20# a(2) = -5#: b(2) = 8#End SubFunction xfout(x() As Double, m As Integer) As DoubleDim j As IntegerDim f As Doublef = Fx(x)Print #1, "For j = 1 To N - 1Print #1, Format$(x(j), "###0.0000000"); " ";Next jPrint #1, Format$(x(N), "###0.0000000"); "]", m, Format$(f, "###0.0000000")xfout = fEnd FunctionFunction StartFhx(a() As Double, b() As Double, num As Integer) As IntegerDim i As Integer, i1 As Integer, iw As Integer, kk As IntegerDim j As Integer, j1 As Integer, m As Integer, fh1 As IntegerDim sum2() As DoubleReDim sum2(N) As DoubleDim sum3 As Double, delt1 As DoubleDim alf As Double, r As Doublekk = 0fh1 = 1delt1 = 0.01'RandomizeDoFor i = 1 To NRandomizeTpoint(1).X1(i) = a(i) + Rnd * (b(i) - a(i)) Next iiw = Strain(Tpoint(0).X1)kk = kk + 1If (kk > num) ThenDebug.Print "找不到初始可行点,可能初始区间不合适!"fh1 = 2StartFhx = fh1Exit FunctionEnd IfLoop While (iw = 0)For j = 2 To KDoFor i = 1 To NRandomizeTpoint(j).X1(i) = a(i) + Rnd * (b(i) - a(i)) Next iiw = Strain(Tpoint(j).X1)If iw = 0 Thenm = jFor i1 = 1 To Nsum2(i1) = 0Next i1For i1 = 1 To NFor j1 = 1 To msum2(i1) = sum2(i1) + Tpoint(j1).X1(i1) Next j1Next i1For j1 = 1 To NXc.X1(j1) = sum2(j1) / mNext j1alf = 0.5DoFor i = 1 To NTpoint(m).X1(i) = Xc.X1(i) + alf * (Tpoint(m).X1(i) - Xc.X1(i))Next isum3 = 0For i1 = 1 To Nsum3=sum3 + (Tpoint(m).X1(i1) -Xc.X1(i1)) * (Tpoint(m).X1(i1) - Xc.X1(i1)) Next i1sum3 = Sqr(sum3)iw = Strain(Tpoint(m).X1)Loop While (iw = 0 And sum3 > delt1)End IfLoop While (sum3 < delt1)Next jStartFhx = fh1 '返回标志fh1=1End FunctionSub Suan()Dim Max As Double, Min As DoubleDim i As IntegerFor i = 1 To K f(i) = Fx(Tpoint(i).X1)Next iMax = f(1): Min = f(1): H = 1: L = 1For i = 2 To KIf f(i) > Max ThenMax = f(i)H = iElseIf f(i) < Min ThenMin = f(i)L = iEnd IfEnd IfNext iEnd SubSub suan1()Dim Min As DoubleDim i As IntegerDim ih As IntegerMin = f(L) ih = 0For i = 1 To KIf i <> H ThenIf f(i) > Min ThenMin = f(i)ih = iEnd IfEnd IfNext iH = ihEnd SubFunction PanBie() As DoubleDim sum As DoubleDim i As Integersum = 0#For i = 1 To Ksum = sum + (f(i) - f(L)) * (f(i) - f(L))Next iPanBie = Sqr(sum / K)End FunctionFunction NewFhx(a() As Double, b() As Double) As IntegerDim i As Integer, j As Integer, fh1 As Integer, chd As IntegerDim alfa As DoubleDim sum1() As DoubleReDim sum1(N) As Doublefh1 = 1chd = 0Doalfa = 1.3For j = 1 To Nsum1(j) = 0#Next jFor i = 1 To KIf i <> H ThenFor j = 1 To Nsum1(j) = sum1(j) + Tpoint(i).X1(j) Next jEnd IfNextFor j = 1 To NXc.X1(j) = sum1(j) / (K - 1)Next jIf Strain(Xc.X1) = 0 ThenPrint #1, "Xc is wrong "fh1 = 3For i = 1 To Na(i) = Tpoint(L).X1(i)b(i) = Xc.X1(i)Next iNewFhx = fh1Exit FunctionEnd IfFor j = 1 To NXr.X1(j) = Xc.X1(j) + alfa * (Xc.X1(j) - Tpoint(H).X1(j))Next jDo While (Strain(Xr.X1) = 0) Or(Fx(Xr.X1) >= Fx(Tpoint(H).X1))alfa = alfa * 0.5For j = 1 To NXr.X1(j) = Xc.X1(j) + alfa * (Xc.X1(j) - Tpoint(H).X1(j))Next jIf alfa < E ThenIf chd = 0 ThenCall suan1alfa = 1.3 chd = 1Exit DoElseNewFhx = 4Exit FunctionEnd IfEnd IfLoopLoop While (chd = 1)For j = 1 To NTpoint(H).X1(j) = Xr.X1(j)Next jNewFhx = fh1End FunctionPrivate Sub Command1_Click()Dim i As IntegerDim val1 As IntegerDim val2 As IntegerDim dds As IntegerDim nmax As IntegerDim fv As DoubleDim a() As Double, b() As Double ReDim a(N) As Double, b(N) As Double ReDim f(K) As DoubleReDim Tpoint(K) As Coordnmax = NMH = 1: L = 1OutName = "复合形法计算结果.txt" Open OutName For Output As #1Print #1,"************复合形法计算结果****" Call Startab(a, b)Print #1, "本次优化的上下限为:" Print #1, " a=[";For i = 1 To N - 1Print #1, a(i);Next iPrint #1, a(N); "]"Print #1, " b=[";For i = 1 To N - 1Print #1, b(i);Next iPrint #1, b(N); "]"Doval2 = 1dds = 1val1 = StartFhx(a, b, nmax)If val1 = 2 ThenPrint #1, "找不到初始可行点,可能初始区间不合适!"ElsePrint #1, "初始复合形各顶点坐标及函数值:"For i = 1 To Kfv = xfout(Tpoint(i).X1, i)Next iCall SuanPrint #1, " 最好和最差顶点号:"; "L="; L, "H="; HPrint #1, " 复合形顶点值均方差:", Format$(PanBie(), "###0.0000000")Print #1,"---------------------------------------------------" Do While PanBie() > Eval2 = NewFhx(a, b)If (val2 = 3) ThenPrint #1, "该优化问题可行域为非凸集,"; Print #1, "重新给出优化的上下限为:" Print #1, "a=[";For i = 1 To N - 1Print #1, a(i);Next iPrint #1, a(N); "]"Print #1, "b=[";For i = 1 To N - 1Print #1, b(i);Next iPrint #1, b(N); "]"Exit DoEnd IfCall SuanPrint #1, "迭代轮数k="; ddsFor i = 1 To Kfv = xfout(Tpoint(i).X1, i)Next iPrint #1, "最好和最差顶点号:"; "L="; L, "H="; HPrint #1, "复合形顶点值均方差:"; Format$(PanBie(), "###0.0000000")Print #1,"---------------------------------------------------" dds = dds + 1LoopEnd IfLoop While (val2 = 3 And val1 <> 2)If val2 = 4 ThenPrint #1, "对次坏点的影射仍然无法找到下一个";Print #1, "复合形顶点,计算终止。
机械优化设计——复合形方法及源程序
机械优化设计——复合形方法及源程序(一)题目:用复合形法求约束优化问题()()()2221645min -+-=x x x f ;06422211≤--=x x g ;01013≤-=x g 的最优解.基本思路:在可行域中构造一个具有K 个顶点的初始复合形。
对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。
(二)复合形法的计算步骤1)选择复合形的顶点数k,一般取n k n 21≤≤+,在可行域内构成具有k 个顶点的初始复合形。
2)计算复合形个顶点的目标函数值,比较其大小,找出最好点x L 、最坏点x H 、及此坏点x G .。
3)计算除去最坏点x H 以外的(k —1)个顶点的中心x C 。
判别x C 是否可行,若x C 为可行点,则转步骤4);若x C 为非可行点,则重新确定设计变量的下限和上限值,即令C L x b x a ==,,然后转步骤1),重新构造初始复合形。
4)按式()H C C R x x x x -+=α计算反射点x R,必要时改变反射系数α的值,直至反射成功,即满足式()()()()H R R j x f x f m j x g <⋯⋯=≤;,2,1,0,。
然后x R以取代x H,构成新的复合形。
5)若收敛条件()()[]ε≤⎪⎭⎪⎬⎫⎩⎨⎧--∑=211211k j L j x f x f k 得到满足,计算终止。
约束最优解为:()()L L x f x f x x ==*,*.(三)复合形法程序框图见下图:(四)/*输入值选择n=2,k=3,本程序可以处理n为2或3,k为3或4的情况*/#include 〈stdio。
h>#include 〈stdlib。
h〉#include 〈time.h>#include 〈math.h>#define E0 1e—5 /*复合形法收敛控制精度*/double **apply(int,int); /*申请矩阵空间*/double f(double *);/*目标函数*/double *g(double *);/*约束函数*/bool judge(double *); /*可行点的判断*/int main(){int n,k;int i,j,k1;int l;double temporary;double restrain; /*收敛条件*/double reflect; /*反射系数*/srand((unsigned)time(NULL));printf("请输入目标函数的维数n:"); /*输入已知数据*/scanf("%d",&n);printf(”请输入复合形的顶点数k:”);scanf(”%d",&k);double **x=apply(k,n);/*存放复合形顶点*/double *y=(double *)calloc(k,sizeof(double)); /*存放目标函数值*/double *p=(double *)calloc(3,sizeof(double)); /*存放约束函数值*/double *a=(double *)calloc(n,sizeof(double)); /*存放设计变量的下限*/double *b=(double *)calloc(n,sizeof(double)); /*存放设计变量的上限*/double *x_c=(double *)calloc(n,sizeof(double));/*存放可行点中心*/double *x_r=(double *)calloc(n,sizeof(double)); /*存放最坏点的反射点*/printf("本程序中的所有输入,两个数之间用空格隔开,然后按enter键时不要长时间的按,否则,可能会出错\n”);printf("请输入选定的第一个可行点x1(包含%d个数):",n);for(i=0;i〈n;i++)scanf("%lf”,*x+i);printf(”请输入初选变量的下限a(包含%d个数):”,n);for(i=0;i<n;i++)scanf("%lf",a+i);printf(”请输入初选变量的上限b(包含%d个数):",n);for(i=0;i〈n;i++)scanf(”%lf",b+i);printf(”输出输入结果为:\nn=%d,k=%d,x1=(",n,k);/*输出已知数据*/for(i=0;i<n—1;i++)printf("%.5lf ”,*(*x+i));printf(”%。
机械优化设计_第六章约束优化方法
X K X H XC X H
f XK f XH
则收缩成功,用收 缩点构成新的复合 形。
机械优化设计 (4)压缩
若采用上述方法均无效,可采取复合形各顶点向最 好点 X L 靠拢,即采用压缩的方法来改变复合形的形状。 压缩后的各顶点的计算公式为:
X j X L 0.5 X L X j ( j 1, 2, , k ; j L)
x, 1 , 2 f x 1G g j x 2 H hk x
j 1 k 1
m
l
新目标函数
加权因子
机械优化设计 2)间接解法的特点
①计算效率和数值计算的稳定性有较大提高; ②可以有效地处理具有约束等式约束的约束优化 问题; ③选择加权因子困难,如果选择不当,不但影响 收敛速度和计算精度,甚至会导致计算失败。
hk X hk x1, x2 , xn 0(k 1,2, l )
求解上式的方法称为约束优化方法
机械优化设计 2、求解方法 根据求解方式不同,约束优化设计问题可分为 直接解法和间接解法。 (1)直接解法:将迭代点限制在可行域内(可行 性),步步降低目标函数值(下降性),直至到达 最优点。如随机方向法、复合形法、可行方向法、 广义简约梯度法。 (2)间接解法:通过变换,将约束优化问题转化 为无约束优化问题求解。如惩罚函数法、增广乘子 法等。
g j X R 0 J 1, 2, , m f XR f XH
机械优化设计 (2)扩张
当求得的反射点为可行点,且目标函数值下降较多, 则沿反射方向继续移动,即采用扩张的方法,可能找到 更好的新点
X E X R X R XC
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)题目:用复合形法求约束优化问题
2 2 2 2
min f xx154 x26;g164x1x20;g3x1100的最优解。
基本思路:在可行域中构造一个具有K个顶点的初始复合形。对该复合形各顶点的目标 函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标 函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状 每改变一次,就向最优点移动一步,直至逼近最优点。
(二)复合形法的计算步骤
1)选择复合形的顶点数k,一般取2n,在可行域内构成具有k个顶点的初始 复合形。
2) 计算复合形个顶点的目标函数值,比较其大小,找出最好点xl、最坏点xh及此坏点
Xg..
3)计算除去最坏点Xh以外的(k-1)个顶点的中心Xc。判别Xc是否可行,若Xc为可行点, 则转步骤4);若Xc为非可行点,贝U重新确定设计变量的下限和上限值,即令
le-5
**apply(int,int);
double f(double
*);
double *g(doub
e *);
bool judc
e(double *);
int mai n()
将各疋点的目标函数值复合形法收敛控制精度*/
申请矩阵空间*/
/*
否.
/*
约束函数*/
计算出去Xh后的各顶可彳
点中心
曰
标函数*/
1卩
亍点的判断
*/
int n
k;
否
int i,j
,k1;
int l;
double temporary;
double restrai n;
double reflect;
pri nt‘:(
一次坏点xg代替最坏
sran d(( un sig ned)time(NULL))
的复合形。
(三)复合形法程序框图见下图:
(四)源程序如下:
/*输入值选择
#in elude<>
#in elude
<>
#inelude
<>
#inelude
<>
#defi ne EE0
double
输入n,k,
n=2,k=3.本程序可以处理4n为2或3,k为3或4的情况*/
形成初始复合形的k
计算各顶点的目标函