%%如何绘制每一代值与迭代次数的图像,遗传算法,MATLAB
objfun=@untitled471;
%自变量个数
n=4;
%A,b线性不等式约束
A=[ ];
b=[];
%Aed,bed线性等式约束
Aed=[];
bed=[];
%lb下限
lb=[200 5 100 10];
%上限
ub=[];
%非线性约束
confun=confun1;
%选项
opts=optimoptions(@ga);
%%种群个体数量(种群大小)
opts.PopulationSize=100;
opts.Display='iter';
opts.MaxGenerations=200;
opts.CrossoverFraction = 0.6;
%opts.EliteCount =20;
[x,fval]=ga(objfun,n,A,b,Aed,bed,lb,ub,confun,opts);
function [c, ceq] = confun1(x)
%动平台位姿的选取
u1=-100:100:100;
u2=-100:100:100;
u3=500:100:600;
u4=-5:10:5;
u5=-5:10:5;
u6=-1:2:1;
P=[];
for i1=1:1:length(u1)
for i2=1:length(u2)
for i3=1:length(u3)
for i4=1:length(u4)
for i5=1:length(u5)
for i6=1:length(u6)
PK=[u1(i1),u2(i2),u3(i3),u4(i4),u5(i5),u6(i6)];
P=cat(1, P, PK);
end
end
end
end
end
end
%%动平台位姿
for t=1:1:length(P)
X=P(t,1);
Y=P(t,2);
Z=P(t,3);
l=P(t,4);
m=P(t,5);
n=P(t,6);
p=[X,Y,Z];
%%动定点的位置
%%动平台LJD
p1=[x(1)*cosd(90-x(2)) x(1)*sind(90-x(2)) 0];
p2=[x(1)*cosd(90+x(2)) x(1)*sind(90+x(2)) 0];
p3=[x(1)*cosd(210-x(2)) x(1)*sind(210-x(2)) 0];
p4=[x(1)*cosd(210+x(2)) x(1)*sind(210+x(2)) 0];
p5=[x(1)*cosd(330-x(2)) x(1)*sind(330-x(2)) 0];
p6=[x(1)*cosd(330+x(2)) x(1)*sind(330+x(2)) 0];
%%定平台LJD
B1=[x(3)*cosd(30+x(4)) x(3)*sind(30+x(4)) 0];
B2=[x(3)*cosd(150-x(4)) x(3)*sind(150-x(4)) 0];
B3=[x(3)*cosd(150+x(4)) x(3)*sind(150+x(4)) 0];
B4=[x(3)*cosd(270-x(4)) x(3)*sind(270-x(4)) 0];
B5=[x(3)*cosd(270+x(4)) x(3)*sind(270+x(4)) 0];
B6=[x(3)*cosd(30-x(4)) x(3)*sind(30-x(4)) 0];
%RP = rotz(PZ) * roty(PY) * rotx(PX);% XYZ旋转矩阵
RP=[cosd(m)*cosd(n) cosd(n)*sind(l)*sind(m)-cosd(l)*sind(n) cosd(l)*cosd(n)*sind(m)+sind(l)*sind(n);
cosd(m)*sind(n) cosd(l)*cosd(n)+sind(l)*sind(m)*sind(n) cosd(l)*sind(m)*sind(n)-cosd(n)*sind(l);
-sind(m) cosd(m)*sind(l) cosd(l)*cosd(m)];
%----------动平台的6个铰点,在静平台坐标系中的位置矢量---------------------
A1=RP*transpose(p1)+transpose(p);
A2=RP*transpose(p2)+transpose(p);
A3=RP*transpose(p3)+transpose(p);
A4=RP*transpose(p4)+transpose(p);
A5=RP*transpose(p5)+transpose(p);
A6=RP*transpose(p6)+transpose(p);
%--动平台的6个铰点位置矢量,减去,静平台的6个铰点位置矢量,得到每个杆长矢量
L1 = A1 -transpose(B1);
L2 = A2 -transpose(B2);
L3 = A3 -transpose(B3);
L4 = A4 -transpose(B4);
L5 = A5 -transpose(B5);
L6 = A6 -transpose(B6);
%%拉线单位矢量
n1 =L1/norm(L1);
n2 =L2/norm(L2);
n3 =L3/norm(L3);
n4 =L4/norm(L4);
n5 =L5/norm(L5);
n6 =L6/norm(L6);
% 计算线长
l1 = norm(L1);
l2 = norm(L2);
l3 = norm(L3);
l4 = norm(L4);
l5 = norm(L5);
l6 = norm(L6);
%%定平台与线向量角度
v1=[0 0 1]';
a1=rad2deg(acos(dot(v1, n1) / (norm(v1) * norm(n1))) );
a2=rad2deg(acos(dot(v1, n2) / (norm(v1) * norm(n2))) );
a3=rad2deg(acos(dot(v1, n3) / (norm(v1) * norm(n3))) );
a4=rad2deg(acos(dot(v1, n4) / (norm(v1) * norm(n4))) );
a5=rad2deg(acos(dot(v1, n5) / (norm(v1) * norm(n5))) );
a6=rad2deg(acos(dot(v1, n6) / (norm(v1) * norm(n6))) );
aa1=rad2deg(acos(dot(RP*v1, n1) / (norm(RP*v1) * norm(n1))) );
aa2=rad2deg(acos(dot(RP*v1, n2) / (norm(RP*v1) * norm(n2))) );
aa3=rad2deg(acos(dot(RP*v1, n3) / (norm(RP*v1) * norm(n3))) );
aa4=rad2deg(acos(dot(RP*v1, n4) / (norm(RP*v1) * norm(n4))) );
aa5=rad2deg(acos(dot(RP*v1, n5) / (norm(RP*v1) * norm(n5))) );
aa6=rad2deg(acos(dot(RP*v1, n6) / (norm(RP*v1) * norm(n6))) );
J=[n1 n2 n3 n4 n5 n6 ;
cross(RP*transpose(p1),n1) cross(RP*transpose(p2),n2) cross(RP*transpose(p3),n3) cross(RP*transpose(p4),n4) cross(RP*transpose(p5),n5) cross(RP*transpose(p6),n6) ]';
F=cond(J);
%%c = [l1; l2; l3; l4; l5; l6] - 700;% 线长大于900的
% 线长约束条件:100 < l1, l2, ..., l6 < 900
% 计算线长
% 线长约束条件
%c = [l1; l2; l3; l4; l5; l6] - 800; % 线长大于900的差
% c = [c; -l1; -l2; -l3; -l4; -l5; -l6] + 100;
c = [ a1; a2; a3; a4; a5; a6;]-45;
c = [c;-F]+1;
ceq = []; % 暂无等式约束
end
end
function[w]=untitled471(x)
%动平台位姿的选取
u1=-100:100:100;
u2=-100:100:100;
u3=500:100:700;
u4=-10:10:10;
u5=-10:10:10;
u6=-10:10:10;
P=[];
for i1=1:1:length(u1)
for i2=1:length(u2)
for i3=1:length(u3)
for i4=1:length(u4)
for i5=1:length(u5)
for i6=1:length(u6)
PK=[u1(i1),u2(i2),u3(i3),u4(i4),u5(i5),u6(i6)];
P=cat(1, P, PK);
end
end
end
end
end
end
TT=0;w=0;
for t=1:1:length(P)
X=P(t,1);
Y=P(t,2);
Z=P(t,3);
l=P(t,4); % 相对静平台的恣态
m=P(t,5);
n=P(t,6);
p=[X,Y,Z];
%%动定点的位置
%%动平台LJD
p1=[x(1)*cosd(90-x(2)) x(1)*sind(90-x(2)) 0];
p2=[x(1)*cosd(90+x(2)) x(1)*sind(90+x(2)) 0];
p3=[x(1)*cosd(210-x(2)) x(1)*sind(210-x(2)) 0];
p4=[x(1)*cosd(210+x(2)) x(1)*sind(210+x(2)) 0];
p5=[x(1)*cosd(330-x(2)) x(1)*sind(330-x(2)) 0];
p6=[x(1)*cosd(330+x(2)) x(1)*sind(330+x(2)) 0];
%%定平台LJD
B1=[x(3)*cosd(30+x(4)) x(3)*sind(30+x(4)) 0];
B2=[x(3)*cosd(150-x(4)) x(3)*sind(150-x(4)) 0];
B3=[x(3)*cosd(150+x(4)) x(3)*sind(150+x(4)) 0];
B4=[x(3)*cosd(270-x(4)) x(3)*sind(270-x(4)) 0];
B5=[x(3)*cosd(270+x(4)) x(3)*sind(270+x(4)) 0];
B6=[x(3)*cosd(30-x(4)) x(3)*sind(30-x(4)) 0];
%RP = rotz(PZ) * roty(PY) * rotx(PX);% XYZ旋转矩阵
RP=[cosd(m)*cosd(n) cosd(n)*sind(l)*sind(m)-cosd(l)*sind(n) cosd(l)*cosd(n)*sind(m)+sind(l)*sind(n);
cosd(m)*sind(n) cosd(l)*cosd(n)+sind(l)*sind(m)*sind(n) cosd(l)*sind(m)*sind(n)-cosd(n)*sind(l);
-sind(m) cosd(m)*sind(l) cosd(l)*cosd(m)];
%----------动平台的6个铰点,在静平台坐标系中的位置矢量---------------------
A1=RP*transpose(p1)+transpose(p);
A2=RP*transpose(p2)+transpose(p);
A3=RP*transpose(p3)+transpose(p);
A4=RP*transpose(p4)+transpose(p);
A5=RP*transpose(p5)+transpose(p);
A6=RP*transpose(p6)+transpose(p);
%--动平台的6个铰点位置矢量,减去,静平台的6个铰点位置矢量,得到每个杆长矢量
L1 = A1 -transpose(B1);
L2 = A2 -transpose(B2);
L3 = A3 -transpose(B3);
L4 = A4 -transpose(B4);
L5 = A5 -transpose(B5);
L6 = A6 -transpose(B6);
%-----------求模,得到每个杆的杆长-----------
%-----------求模,得到每个杆的杆长-----------------------------------------
n1 =L1/norm(L1);
n2 =L2/norm(L2);
n3 =L3/norm(L3);
n4 =L4/norm(L4);
n5 =L5/norm(L5);
n6 =L6/norm(L6);
J=[n1 n2 n3 n4 n5 n6 ;
cross(RP*transpose(p1),n1) cross(RP*transpose(p2),n2) cross(RP*transpose(p3),n3) cross(RP*transpose(p4),n4) cross(RP*transpose(p5),n5) cross(RP*transpose(p6),n6) ]';
gg=cond(J);
w=w+gg;
TT=TT+1;
end
end
```