📄 oprt_zh_buhuatu.m
字号:
clear
D=[50,5,1000];%依次表示行,列,页
N=3;n=6;%依次表示轴数和插值点数
%以P表示位置,V表示速度,A表示加速度,J表示加加速度
%T表示时间,h表示时间间隔
VC=[100,95,100];%依次设置第一轴,第二轴,第三轴的速度约束
AC=[70,75,75];%依次设置第一轴,第二轴,第三轴的加速度约束
JC=[70,85,70];%依次设置第一轴,第二轴,第三轴的冲击约束
V=zeros(N,n);%设置速度边界
A=zeros(N,n);%设置加速度边界
KT=1;KJ=0.5;
t1=0;%起始时间
Ps=0.04;Pm=0.16;Pc=0.8;
P(1,1)=120;P(1,3)=90;P(1,4)=45;P(1,6)=0;
P(2,1)=-10;P(2,3)=20;P(2,4)=50;P(2,6)=100;
P(3,1)=0;P(3,3)=-20;P(3,4)=50;P(3,6)=70;
%P(3,1)=0;P(3,3)=-20;P(3,4)=50;P(3,6)=70;%以上三行设置初始位置点
%群体数据的初始化
%rand('state',sum(50*clock));
rand('state',1);
JUST=1;
while JUST<=D(1)
%确定时间间隔及时间表
for i=1:n-1;
H(i)=0.5+rand*5;
%H(i)=0.5+rand*2.5;%%%%%%%%%%%%%%%%%%实验
end;%h(i)表示各插值点的时间间隔
T_ini=SOV_T(H,n,t1);
%T(i)各插值点的即时时间
%判断点是否生成
QA=SOL_QA(H,V,A,P,N,n);
BDVC=JUST_VC(QA,T_ini,H,P,VC,N,n);
if BDVC==1;
BDAC=JUST_AC(QA,AC,N,n);
if BDAC==1;
BDJC=1;%实验%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%BDJC=JUST_JC(QA,JC,H,N,n);
if BDJC==1;
HZD(JUST,:,1)=H;%HZD表示所有个体
JUST=JUST+1;
end;
end;
end;
end;
DS=1;
while DS<=D(3)
%HD=HZD(:,:,1);%HD表示某一代群体
for ii=1:D(1);
QAD(:,:,ii)=SOL_QA(HZD(ii,:,DS),V,A,P,N,n);%群体中的三轴加速度值
end;
%QADM=SOL_QAM(QAD,N,n,D(1));
FITD=SOV_fitness(HZD(:,:,DS),QAD,KT,KJ,N,n,D(1));
%以下是交叉操作
JCLS=1;
while JCLS<=D(1)*Pc/2;
XZ_new1=rand;XZ_new2=rand;%选择
[XB_new1,XB_new2]=SEAR_XZXB(FITD,XZ_new1,XZ_new2,D(1));
[GT_new1,GT_new2]=CRE_JC(HZD(XB_new1,:,DS),HZD(XB_new2,:,DS),D(2));
QA_new1=SOL_QA(GT_new1,V,A,P,N,n);
QA_new2=SOL_QA(GT_new2,V,A,P,N,n);
T_new1=SOV_T(GT_new1,n,t1);
T_new2=SOV_T(GT_new2,n,t1);
BDVC_new1=JUST_VC(QA_new1,T_new1,GT_new1,P,VC,N,n);
BDVC_new2=JUST_VC(QA_new2,T_new2,GT_new2,P,VC,N,n);
if BDVC_new1==1&&BDVC_new2==1;
BDAC_new1=JUST_AC(QA_new1,AC,N,n);
BDAC_new2=JUST_AC(QA_new2,AC,N,n);
%chsj_1=1;
if BDAC_new1==1&&BDAC_new2==1;
BDJC_new1=1;BDJC_new2=1;%实验%%%%%%%%%%%%%%%%%%%%%%%%%%
%BDJC_new1=JUST_JC(QA_new1,JC,GT_new1,N,n);
%BDJC_new2=JUST_JC(QA_new2,JC,GT_new1,N,n);
%chsj_2=2;
if BDJC_new1==1&&BDJC_new2==1;
HZD(JCLS*2-1,:,DS+1)=GT_new1;%HZD表示所有个体
HZD(JCLS*2,:,DS+1)=GT_new2;
JCLS=JCLS+1;
%chesj_3=3;
else
%chsj_33=333
end;
else
% chsj_22=222
end;
else
%chsj_11=1111
end;
end;
%以下操作为突变操作
TBLS=1;%突变临时变量
while TBLS<=D(1)*Pm;
TBXZ_new=ceil(rand*D(1));
TBGT_new=CRE_TB(HZD(TBXZ_new,:,DS),D(2));
QATB_new=SOL_QA(TBGT_new,V,A,P,N,n);
TTB_new=SOV_T(TBGT_new,n,t1);
BDVCTB_new=JUST_VC(QATB_new,TTB_new,TBGT_new,P,VC,N,n);
if BDVCTB_new==1;
BDACTB_new=JUST_AC(QATB_new,AC,N,n);
%chsj_tb1=1;
if BDACTB_new==1;
BDJCTB_new=1;%实验%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%BDJCTB_new=JUST_JC(QATB_new,JC,TBGT_new,N,n);
% chsjtb_2=2;
if BDJCTB_new==1;
HZD(D(1)*Pc+TBLS,:,DS+1)=TBGT_new;
TBLS=TBLS+1;
% chesjtb_3=3;
else
%chsjtb_33=333
end;
else
%chsjtb_22=222
end;
else
% chsjtb_11=1111
end;
end;
%以下是精英主义
JYXB_new=SOV_JYXB(FITD,D(1),Ps);
for j=1:D(1)*Ps;
HZD(D(1)*Pc+D(1)*Pm+j,:,DS+1)=HZD(JYXB_new(j),:,DS);
end;
DS=DS+1;
end;
%以下是求解最优解
for i=1:D(1);
QAD(:,:,i)=SOL_QA(HZD(i,:,DS),V,A,P,N,n);%求群体中的三轴加速度值
end;
FIT_ZZ=SOV_fitness(HZD(:,:,DS),QAD,KT,KJ,N,n,D(1));
ZYXB=SOV_ZYXB(FIT_ZZ,D(1));
H_ZY=HZD(ZYXB,:,DS)
T_HT=SOV_T(H_ZY,n,t1)
QA_HT=SOL_QA(H_ZY,V,A,P,N,n);
P_HT=SOV_P(P,QA_HT,H_ZY,V,N,n);
[QJ_MAX,QJ_ZH]=SOV_QJ(QA_HT,H_ZY,N,n)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -