⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parameterized_fitness.m

📁 大量遗传算法实现程序
💻 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 + -