LAN博基尼 发表于 2010-11-10 15:14

悬置系统优化

悬置系统合理分配频率范围,以解耦率为目标函数的情况下,如何优化悬置刚度。
自己一个人实在是解决不了了,所以请大家帮忙。
我仔细研究过fmincom与fgoalattain这2个函数,也做过一些例子,但是具体实施到悬置系统上面来还是解决不了。
请大家帮忙,给点提示也行。
邮箱:zs.jordan@163.com

wy558558558 发表于 2010-11-15 12:15

您是单纯以解耦率为目标吗?这个应该很好解决。可以用遗传算法,蚁群算法,非线性规划等获得局部及全局最优解。我做过悬置解耦的程序,是用Nastran和Matalb 混合编译的。个人感觉有时候不要特意只关注解耦率有多高,而且还要根据实际的情况考虑,比如解耦各频率大小,还有供应商是否能够制造出你解耦出的悬置,这个还要向供应商取得他们悬置橡胶各方向刚度的变化的比例。

LAN博基尼 发表于 2010-11-15 12:32

我用线性规划的时候约束函数不起作用,算出来的频率不在限定的范围之内,导致求出来的刚度也不在约束的范围之内。
这是我的求解过程,但是算不出来,不知道哪里需要修改
这是求解的:
x0=;
lb=;
ub=;
option=optimset;
option.MaxFunEvals=50000000;
option.MaxIter=20000000;
=fmincon(@opt_jieou_myfun,x0,[],[],[],[],lb,ub,@opt_jieou_mycon,option)
目标函数:
function f=opt_jieou_myfun(x)
m=323.98;%kg
Jx=25.706;Jy=13.607;Jz=23.014;Jxy=-3.029;Jyz=3.359;Jzx=-0.876;%kg*m*m
Xz=72.44;Yz=-431.92;Zz=148.82;
Xy=4.34;Yy=452.98;Zy=250.22;
Xh=199.64;Yh=-7.72;Zh=-245.93;
%mm在下面将位移坐标变成m
% Kzx;Kzy;Kzz;
% Kyx;Kyy;Kyz;
% Khx;Khy;Khz;%N/m
ALFAzu=0;BETAzu=90*pi/180;GAMAzu=90*pi/180;
ALFAzv=90*pi/180;BETAzv=0;GAMAzv=90*pi/180;
ALFAzw=90*pi/180;BETAzw=90*pi/180;GAMAzw=0;
ALFAyu=0;BETAyu=90*pi/180;GAMAyu=90*pi/180;
ALFAyv=90*pi/180;BETAyv=0;GAMAyv=90*pi/180;
ALFAyw=90*pi/180;BETAyw=90*pi/180;GAMAyw=0;
ALFAhu=8*pi/180;BETAhu=90*pi/180;GAMAhu=82*pi/180;
ALFAhv=90*pi/180;BETAhv=0;GAMAhv=90*pi/180;
ALFAhw=98*pi/180;BETAhw=90*pi/180;GAMAhw=8*pi/180;
Th=;
Tz=;
Ty=;
Fh=*0.001;
Fz=*0.001;
Fy=*0.001;
%%此处将位移坐标转变成m
kz=;
ky=;
kh=;
M=;
% D=;
K=Fh'*Th'*kh*Th*Fh+Fz'*Tz'*kz*Tz*Fz+Fy'*Ty'*ky*Ty*Fy;
=eig(K,M);
g=diag(sqrt(d)/2/pi)'
for j=1:6
for k=1:6
for l=1:6
ENERGY(k,l)=M(k,l)*v(k,j)*v(l,j);
end
end
qq=sum(ENERGY);
qqt=sum(qq);
dig=;
EGEN(:,j)=dig;
ep1=max(dig);
ep2=sum(dig);
eper(j)=ep1/ep2*100;
end
eper;
EGEN=EGEN*100;
f=-(1.3*max(EGEN(1)))-(3*max(EGEN(2)))-(1.5*max(EGEN(3)))-(2*max(EGEN(4)))-(3*max(EGEN(5)))-(0.5*max(EGEN(6)));
约束函数:
function =opt_jieou_mycon(x)
% m=323.98;%kg
% Jx=25.706;Jy=13.607;Jz=23.014;Jxy=-3.029;Jyz=3.359;Jzx=-0.876;%kg*m*m
% Xz=72.44;Yz=-431.92;Zz=148.82;
% Xy=4.34;Yy=452.98;Zy=250.22;
% Xh=199.64;Yh=-7.72;Zh=-245.93;
% %mm在下面将位移坐标变成m
% ALFAzu=0;BETAzu=90*pi/180;GAMAzu=90*pi/180;
% ALFAzv=90*pi/180;BETAzv=0;GAMAzv=90*pi/180;
% ALFAzw=90*pi/180;BETAzw=90*pi/180;GAMAzw=0;
% ALFAyu=0;BETAyu=90*pi/180;GAMAyu=90*pi/180;
% ALFAyv=90*pi/180;BETAyv=0;GAMAyv=90*pi/180;
% ALFAyw=90*pi/180;BETAyw=90*pi/180;GAMAyw=0;
% ALFAhu=8*pi/180;BETAhu=90*pi/180;GAMAhu=82*pi/180;
% ALFAhv=90*pi/180;BETAhv=0;GAMAhv=90*pi/180;
% ALFAhw=98*pi/180;BETAhw=90*pi/180;GAMAhw=8*pi/180;
% Th=;
% Tz=;
% Ty=;
% Fh=*0.001;
% Fz=*0.001;
% Fy=*0.001;
% %%此处将位移坐标转变成m
% % x(1);x(2);x(3);
% % x(4);x(5);x(6);
% % x(7);x(8);x(9);%N/m
% kz=;
% ky=;
% kh=;
% M=;
% % D=;
% K=Fh'*Th'*kh*Th*Fh+Fz'*Tz'*kz*Tz*Fz+Fy'*Ty'*ky*Ty*Fy;
% =eig(K,M);
% g=diag(sqrt(d)/2/pi)'
% for j=1:6
% for k=1:6
% for l=1:6
% ENERGY(k,l)=M(k,l)*v(k,j)*v(l,j);
% end
% end
% qq=sum(ENERGY);
% qqt=sum(qq);
% dig=;
% EGEN(:,j)=dig;
% ep1=max(dig);
% ep2=sum(dig);
% eper(j)=ep1/ep2*100;
% end
% eper;
% EGEN=EGEN*100;
c(1)=g(1)-8;
c(2)=g(2)-15;
c(3)=g(3)-11;
c(4)=g(4)-18;
c(5)=g(5)-12;
c(6)=g(6)-17;
c(2)=7-g(1);
c(8)=7-g(2);
c(9)=8-g(3);
c(10)=8-g(4);
c(11)=8-g(5);
c(12)=8-g(6);
% ceq=[];

每次算的时候求出来的频率,(这里我改成了g)不在约束的范围之内,并且经常出现评价次数不够或者迭代次数不够,实在没办法。

约束函数不会写,目标函数我改了一下,设置了几个加权值。但是还是不对,算出来的g都不在范围之内。

wy558558558 发表于 2010-11-15 12:41

不好意思,我在班上没有Matlab无法运行你的程序。你说迭代次数不够无法收敛的情况吗?这个我没有用过线性规划,以前用过遗传算法,个人认为还是约束的不好导致无法收敛找不到最优解。你看看Matlab的版面有线性规划的帖子没,可以了解下。

LAN博基尼 发表于 2010-11-15 13:24

恩,迭代的时候经常会出现MaxFunEvals,MaxIter超出范围,我把参数设的特别大之后就求不出来,所以烦人啊。谢谢你哈

其他的类似的列子我做过很多,这些例子里面约束的都是关于自变量X(i)的,而这悬置的话求的是K(i),约束的确是另一个变量,通过求解特征值求出来的频率f(i),所以这里比较棘手,不知道怎么约束,还是要谢谢你哦...

wy558558558 发表于 2010-11-15 14:19

呵呵,大家互相学习。{:{39}:}

LAN博基尼 发表于 2010-11-20 12:29

回复 6 # wy558558558 的帖子

我做出来了,但是最后exitflag=5,是收敛的。
这和exitflag=1有什么区别啊。

LAN博基尼 发表于 2010-11-20 12:31

回复 6 # wy558558558 的帖子

{:{08}:}

wy558558558 发表于 2010-11-20 13:21

回复 7 # LAN博基尼 的帖子

不好意思没明白你的意思。

LAN博基尼 发表于 2010-11-20 15:33

回复 9 # wy558558558 的帖子

Optimization terminated: Magnitude of directional derivative in search
direction less than 2*options.TolFun and maximum constraint violation
is less than options.TolCon.
Active inequalities (to within options.TolCon = 1e-006):
lower      upper   ineqlin   ineqnonlin
    9          8                     

x =

343.8480   77.8024488.4697342.4638   95.0791480.7947497.0000   50.0000    7.0000


fval =

    0.3400


exitflag =

   5


output =

       iterations: 104
      funcCount: 1667
         stepsize: 1
      algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
    firstorderopt: 0.0041
   cgiterations: []
          message:

这是优化的结果,也不知道对不对,exitflag大于0就是收敛的,我做过的例子都是exitflag=1,而我这个结果怎么exitflag=5,1和5有什么区别。

wy558558558 发表于 2010-11-20 15:40

我感觉1的应该不对,很可能是局部的收敛。5的话是不是也有点太快了啊,我不敢说,如果你的参数设置的好,也有可能收敛很快的。请问你算出的7.0000是刚度吗?

LAN博基尼 发表于 2010-11-20 16:30

回复 11 # wy558558558 的帖子

x = 343.8480   77.8024488.4697342.4638   95.0791480.7947497.0000   50.0000    7.0000
这是防扭拉杆的Z方向的值,原始值是15n/mm,我设定的范围是15~50,结果他给我算出来一个这么小的刚度值。
对应的是左悬置kx ky kz=343.8480   77.8024488.4697
            右悬置kx ky kz=342.4638   95.0791480.7947
            防扭拉杆kx ky kz=497.0000   50.0000    7.0000
也不知道对不对啊,按理说拉杆主要承受侧倾力与扭转力,X方向是应该大一些的,可能是为了追求解耦高,导致z方向偏小了。


LAN博基尼 发表于 2010-11-20 16:34

哦,说错,是5到50,结果得出一个7的结果

wy558558558 发表于 2010-11-20 17:07

哦,要是扭力臂的话这个值还是可以的,你这个应该是动刚度吧,反正是能算出来数,但是与实际相差太远了,根本无法作出你算出的悬置,很难想象你刚度值这么大,固有频率点多大啊……可能你的发动机质量也很大。

LAN博基尼 发表于 2010-11-21 13:40

总成323kg,固有频率用优化的刚度算出来后值都比较小。优化的直接是动刚度,这样的话静刚度就更小了,估计实际的悬置都难以做出来。
解耦率83.5806   95.3373   86.9081   98.2464   97.3627   99.7429
频率8.2036    9.6405   11.6367   12.2828   14.2039    4.1244
貌似最小值偏低了
页: [1] 2 3
查看完整版本: 悬置系统优化