GA寻优PID参数程序运行问题
GA寻优PID参数程序运行问题本人,写了一个简单的GA寻优PID参数程序,但是只运行一次,进化代数是17代
获得了PID参数,但第二次运行就提出问题如下:
Atempted to access y(10002); index out of bounds because numel(y)=10001.
求助各位达人给予帮助。 是否是程序哪里出问题了?
程序如下:
function J=gafitness(x)
syms Kp Ki Kd %定义PID系数
Kd=x(1); Ki=x(2); Kp=x(3);
syms w1 w2 w3 w4;
w1=1 ;w2=1;w3=1;w4=10; % 权值系数
Kv=10;
nG3=[Kv];
dG3=[1/(207.5^2) 2*0.2/207.5 1 0];
G3=tf(nG3,dG3); %G2为系统传递函数
nG4=[ Kd Ki Kp ];
dG4=[ 1 0];
G4=tf(nG4,dG4); %G4为PID控制器传递函数
G5=G4*G3/(1+G4*G3); %系统总传递函数
syms t
t=0:0.001:10;
dta=0.02;
y=step(G5,t);
yss=1; %稳态输出值
r=1;while y(r)<yss;r=r+1;end
tr=(r-1)*0.001; %上升时间
[ymax,tp]=max(y);
tp=(tp-1)*0.001; %峰值时间
mp=(ymax-yss)/yss; %最大超调量
s=10001;while y(s)>1-dta&y(s)<1+dta;s=s-1;end
ts=(s-1)*0.001; %调整时间
J=w1*tr+w2*tp+w3*mp*100+w4*ts % 适应度函数