辽宁工程技术大学毕业设计(论文)
遗传算法流程图如图所示:
开始待优化参数Kp,Ki,Kd编码初始种群计算适配值Y满足条件?N遗传操作(复制、交叉、变异)新种群解码得到优化后的Kp,Ki,Kd寻优结束
图5—1 算法流程图 Fig.5-1 Algorithm flow chart
5.3 一阶滞后系统的PID参数整定
工业上的被控对象多为一阶或二阶系统,现在特假设某系统为一阶滞后系统,传递函数现在假设为
G(s)?1e?80s60s?1
现在利用已存在方法对其进行PID参数整定。
5.3.1 常规法整定
观察传递函数后,利用Z—N法对其进行参数整定。根据表4-1所给的数据,得到
T?60s ,K?1,??80s。根据公式,调节器选用PID调节器[20],则根据表中公式得:
25
基于遗传算法的PID控制器参数优化与仿真研究
Kp?1.2T???1.2?60?0.980
Ki?KpTiKp2??0.9?0.00562?80
Kd?KpTd?0.5Kp??0.5?0.9?80?36利用上述参数,在MATLAB中进行阶跃响应的仿真,得到其响应曲线如下图:
1.41.210.80.60.40.20050010001500200025003000
图5-2 阶跃响应曲线 Fig.5-2 The step response curve
5.3.2 基于遗传算法的PID参数优化
按照前面所述的遗传算法流程,进行以下工作
[21]
:
1)确定范围和编码 根据Z-N法整定的参数知道其大概取值范围,经过考虑,决定使用二进制编码,二进制编码位数为10位,则三个参数组成长达30位的二进制字符串,其中前十位是KP ,中间十位是Kd ,后十位是Ki。其中KP取值范围是[0,2],Kd的取值范围是[0,50],Ki的取值范围是[0,1]。
2)生成初始种群 设置群体大小为50。
3)解码并确定适应度函数值 由于采用二进制编码方式,有固定的解码套路,方式是:
x?Umin?(Umax?Umin)*X2n?1 (5-7)
其中n是二进制编码位数,X为二进制表示的十进制数,[Umin,Umax]是其实数取值范围。 在程序中采用平方误差积分
J??e2(t)dt0?作为最优指标,为了尽量消除响应在前面
26
辽宁工程技术大学毕业设计(论文)
的震荡,减小调节时间,采用惩罚功能,当出现前一时刻的输出大于后一时刻时,将两者差值e'(t)再次加入最优指标[22],此时最优指标为 J??e2(t)?100e'(t)dt,由于遗传算
?0??法中按照最大化方向搜索,而最优参数应该使得最优指标最小,于是选取最优指标的倒数
f?1J
为适应度函数,即
程序实现如下:for i=1:1:P Ji(i)=error(i)^2; B=B+Ji(i); if i>1
erry(i)=y(i)-y(i-1); if erry(i)<0
B=B+100*abs(erry(i)); end end
end BsJ=B;
而对应于误差的计算中,就要求先求系统的输出,在遗传算法中,是使用离散方法计算
10.2835z?4?80sG(s)?eG(z)?y(k)的。60s?1z?0.7165 利用z变化,由于系统函数为 离散化后得
程序实现为:ts=20;
sys=tf(1,[60 1],'inputdelay',80); dsys=c2d(sys,ts,'z'); [num,den]=tfdata(dsys,'v');
运行后可得num[1]=0,num[2]=0.2835;den[1]=1,den[2]=-0.7165;
Y(z)0.2835z?4?G(z)??5?1num(2)zU(z)?Y(z)?den(2)zY(z) U(z)z?0.7165由得:改写为差分方程可得:y(k)??den(2)*y(k?1)?num(2)*u(k?5) 程序:u_1=0.0;u_2=0.0;u_3=0; u_4=0;u_5=0;y_1=0;
27
基于遗传算法的PID控制器参数优化与仿真研究
y(k)=-den(2)*y_1+num(2)*u_5; u_5=u_4;u_4=u_3;u_3=u_2; u_2=u_1;u_1=u(k);y_1=y(k);
4)设置遗传算子 遗传算子要遵守一定的原则:交叉算子要适量的大,变异算子要适量的小。
a 在遗传算法中选择采用比例选择策略,选择概率与个体适应度成正比,下代复制个体的个数为复制概率与上代字符串个数相乘。复制概率小的个体将逐渐被淘汰。同时为了尽量保证接近最优的个体被保留,特别使用了最优保持策略,将上一代适应度最高的个体代替适应度最低的个体。 程序实现:fi_sum=sum(fi);
fi_Size=(Oderfi/fi_sum)*Size; fi_S=floor(fi_Size);
kk=1;
for i=1:1:Size for j=1:1:fi_S(i)
TempE(kk,:)=E(Indexfi(i),:); kk=kk+1; end end
b 交叉操作是产生新个体的主要操作,在这里交叉算子选择要尽量大,Pc?0.8,采用单点交叉策略。 程序如下:pc=0.80;
n=ceil(30*rand);
for i=1:2:(Size-1)
temp=rand;
if pc>temp
for j=n:1:30 TempE(i,j)=E(i+1,j);
TempE(i+1,j)=E(i,j);
28
辽宁工程技术大学毕业设计(论文)
end end end
c 变异操作可以增加局部灵活性,但是变异概率过高,会破坏个体的稳定性,又会在一定程度上影响算法的收敛性能,所以不能过高。全局考虑后,决定采用自适应变异概率,
Pm?0.1?[1:1:Size]?0.07Size,即变异概率与适应度有关,适应度越小,变异概率
越大[23]。
程序如下:pm=0.1-(1:1:Size)*(0.07)/Size; for i=1:1:Size for j=1:1:3*CodeL; temp=rand; if pm>temp if TempE(i,j)==0 TempE(i,j)=1; else
TempE(i,j)=0; end end end end
5)设置终止条件 在本遗传算法中以进化代数作为终止条件。设置终止代数G?100,只要进化代数到达100代,算法自动停止,输出结果。 对程序执行,得到Kp?0.4516,
Kd?10.8016, Ki?0.0049
J?7.5410
得出最优指标J的优化过程和优化后阶跃响应过程曲线:
29