📄 parameterized_fitness.m
字号:
function y = parameterized_fitness(x,S,lb,ub,C_x,C_y,B_x,B_y,d,Julidizuo,xx11,xx12,angel)
y = zeros(size(x,1),1); %Pre-allocate y
for ii = 1:size(x,1)
x1 = x(ii,1);
x2 = x(ii,2);
x3 = x(ii,3);
x4 = x(ii,4);
x5 = x(ii,5);
x6 = x(ii,6);
x7 = x(ii,7);
x8 = x(ii,8);
x9 = x(ii,9);
x10 = x(ii,10);
x0g=xx11;y0g=xx12;
a=lb;
b=ub;
if (x1>a(1))&(x1<b(1))&(x2>a(2))&(x2<b(2))&(x3>a(3))&(x3<b(3))&(x4>a(4))&(x4<b(4))&(x5>a(5))&(x5<b(5))&(x6>a(6))&(x6<b(6))&(x7>a(7))&(x7<b(7))&(x8>a(8))&(x8<b(8))&(x9>a(9))&(x9<b(9))&(x10>a(10))&(x10<b(10)); %边界约束
for i=1:(angel+1);
[xa(i),ya(i),xb(i),yb(i),xc(i),yc(i),xm(i),ym(i),xg(i),yg(i),d1(i),d2(i),d3(i),d4(i),d5(i),d6(i),fo(i),fa(i),fj(i)]=shouli(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x0g,y0g,(i-1));
ping(i)=(fo(i)-fo(1))/fo(1); % 平稳性约束
xie(i)=D_2point(xc(i),yc(i),x5,x6)-D_2point(xc(1),yc(1),x5,x6); %卸料性约束
% 紧凑型约束
% 协调性约束
chuandong1(i)= cdjiao(xc(i),xa(i),x5,yc(i),ya(i),x6); %传动性约束
chuandong2(i)= cdjiao(xb(i),xa(i),x3,yb(i),ya(i),x4);
xx1 = -Julidizuo*sin((i-1)*pi/180); %不干涉约束
yy1 = Julidizuo*cos((i-1)*pi/180);
xx2 = 100;
yy2 = tan((i-1)*pi/180)*(xx2-xx1)+yy1;
buganshe(i) = DDX(xc(i),yc(i),xx1,yy1,xx2,yy2);
end
if (ping<0.1)&(xie<S)&(xie>=0)&(chuandong1>10)&(chuandong1<170)&(chuandong2>10)&(chuandong2<170)&(buganshe>d)&(xb>xc)&(xc(1)>C_x(1))&(xc(1)<C_x(2))&(xb(1)>B_x(1))&(xb(2)<B_x(2));
y(ii)=fo(1);
else y(ii)=5;
end
else y(ii)=5;
end
end
function [xa,ya,xb,yb,xc,yc,xm,ym,xg,yg,d1,d2,d3,d4,d5,d6,fo,fa,fj]=shouli(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x0g,y0g,angel)
%fo 油缸举升力,fa拉杆,fj举升机构举升力
a=0;b=0;c=0;d=0;e=0;f=0; h=0;k=0;
m=0;n=0;p=0;q=0;r=0;s=0;t=0;u=0; % A点坐标 a,b xa,ya
Fo=0;Fa=0;Fj=0; % B点坐标 c,d xb,yb
[a,b]=ZJ(x1,x2,angel); % C点坐标 e,f xc,yc
[c,d]=JDC1(a,b,x3,x4,x9,x10); % M点坐标 m,n xm,ym
[e,f]=JDC2(a,b,c,d,x8,x7); % G点坐标 h,k xg,yg
[h,k]=ZJ(x0g,y0g,angel); % d1 质心到原点距离
[m,n]=JFC(c,d,x3,x4,e,f,x5,x6); % d2 原点到举升力距离
r=DDX(c,d,a,b,m,n); % d3 B点到举升力距离
s=DDX(c,d,e,f,m,n); % d4 B点到油缸力距离
p=h;
% d5 C点到举升力距离
q=DDX(0,0,a,b,m,n); % d6 C点到拉杆力距离
t=DDX(e,f,a,b,m,n); % fj 举升机构举升力
u=DDX(e,f,c,d,x3,x4); % fo 油缸静态举升力
Fj=p/(q+eps); % fa 拉杆力
Fo=(Fj*r)/(s+eps);
Fa=(Fj*t)/(u+eps);
xa=a;ya=b;
xb=c;yb=d;
xc=e;yc=f;
xm=m;ym=n;
xg=h;yg=k;
d1=p;d2=q;d3=r;d4=s;d5=t;d6=u;fo=Fo;fa=Fa;fj=Fj;
function [x0,y0]=JFC(x1,y1,x2,y2,x3,y3,x4,y4)
% 以知点x1,y1和点x2,y2的连线 点x3,y3和点x4,y4的连线 求交点坐标
m=y1*(x2-x1)-x1*(y2-y1);
n=y3*(x4-x3)-x3*(y4-y3);
a=m*(x4-x3)-n*(x2-x1);
b=n*(y1-y2)-m*(y3-y4);
c=(y1-y2)*(x4-x3)-(y3-y4)*(x2-x1);
x0=a/(c+eps);
y0=b/(c+eps);
function [x0,y0]=JDC2(x1,y1,x2,y2,m,n)
% 点x1,y1为三角架与车箱铰点,点x2,y2首先求得的三角架上的点,m n 均为三角架边长,m 为x1,y1点与所求点连线
% 求另一三角架铰点
% 点为上面点
a3=(y1-y2)/(x2-x1+eps);
c3=(m^2+x2^2+y2^2-x1^2-y1^2-n^2)/(2*(x2-x1)+eps);
a4=a3^2+1;
b4=2*(a3*c3-a3*x1-y1);
c4=x1^2+y1^2+c3^2-2*c3*x1-m^2;
y0=(-b4+sqrt(b4^2-4*a4*c4))/(2*a4+eps);
x0=a3*y0+c3;
function [x0,y0]=JDC1(x1,y1,x2,y2,m,n)
% 点x1,y1为三角架与车箱铰点,点x2,y2为拉杆与副车架铰点,m为三角架下杆n 为拉杆长,求一三角架铰点
a1=(x1-x2)/(y2-y1+eps);
c1=(m^2+x2^2+y2^2-x1^2-y1^2-n^2)/(2*(y2-y1)+eps);
a2=a1^2+1;
b2=2*(a1*c1-a1*y2-x2);
c2=x2^2+y2^2+c1^2-2*c1*y2-n^2;
x0=(-b2+sqrt(b2^2-4*a2*c2))/(2*a2+eps);
y0=a1*x0+c1;
function y=D_2point(x1,y1,x2,y2)
%求两点间离
y=sqrt((x1-x2)^2+(y1-y2)^2)+eps;
function d=DDX(x0,y0,x1,y1,x2,y2)
% 求点到直线的距离
a=y1-y2;
b=x2-x1;
c=x1*(y2-y1)-y1*(x2-x1);
m=abs(a*x0+b*y0+c);
n=sqrt(a^2+b^2)+eps;
d=m/n;
function [x,y]=ZJ(x0,y0,a)
%子程序 点绕原点转过a度后的坐标
x=x0*cos(pi*a/180)-y0*sin(pi*a/180);
y=x0*sin(pi*a/180)+y0*cos(pi*a/180);
function f=cdjiao(xa,xb,xc,ya,yb,yc)
% 计算传动角
a1=D_2point(xa,ya,xb,yb);
a2=D_2point(xa,ya,xc,yc);
a3=D_2point(xc,yc,xb,yb);
f=acos((a1^2+a2^2-a3^2)/(2*a1*a2+eps))*180/pi;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -