基于遗传算法的PID整定_第1页
基于遗传算法的PID整定_第2页
基于遗传算法的PID整定_第3页
基于遗传算法的PID整定_第4页
基于遗传算法的PID整定_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、参数编码遗传操作种群1计算适配置满足要求,即达到最大迭代次数解码种群2寻优结束种群1> 种群2复制交叉变异基于遗传算法的PID整定流程图% 基于遗传算法的PID整定% 被控对象为二阶函数: 400% G(s) = -% S2+50S% 采样时间为 1ms,输入信号为阶跃信号% 采用二进制编码方式,种群个体(kp,ki,kd)长度为10close all;clc;clear;global rin yout timef %定义全局变量G=100; %迭代次数Size=30; %种群大小CodeL=10; %种群个体长度(二进制编码)MinX=zeros(1,3); %约束条件,即kp,kd,

2、ki 的取值范围MaxX(1)=20*ones(1); % kp in 0 20MaxX(2)=1.0*ones(1); % kd,ki in 0 1MaxX(3)=1.0*ones(1);E=round(rand(Size,3*CodeL); %初始化种群,编码Bsj=0;for k=1:G %迭代次数 time(k)=k; for s=1:Size m=E(s,:); y1=0;y2=0;y3=0; %输出量初始化(十进制) m1=m(1:CodeL); for i=1:CodeL y1=y1+m1(i)*2(i-1); %计算输出量 end K(s,1)=(MaxX(1)-MinX(1)

3、*y1/1024+MinX(1); %解码,计算Kp的取值 m2=m(CodeL+1:2*CodeL); for i=1:CodeL y2=y2+m2(i)*2(i-1); %计算输出量 end K(s,2)=(MaxX(2)-MinX(2)*y2/1024+MinX(2); %解码,计算Kd的取值 m3=m(2*CodeL+1:3*CodeL); for i=1:CodeL y3=y3+m1(i)*2(i-1); %计算输出量 end K(s,3)=(MaxX(3)-MinX(3)*y1/1024+MinX(3); %解码,计算Ki的取值 % *适应度函数* KK=K(s,:); KK,Bs

4、j=pid_ga(KK,Bsj); % 调用 pid_ga.m Bsji(s)=Bsj; % 最优代价值 end O,D=sort(Bsji); %最优代价值排序 Bestj(k)=O(1) %取最小值 BJ=Bestj(k); Ji=Bsji+1e-10; fi=1./Ji; %适应函数值 O2,D2=sort(fi); %适应函数值排序 Bestfi=O2(Size); %取最大值 Bests=E(D2(Size),:); % * 选择算子 * fi_sum=sum(fi); fi_size=(O2/fi_sum)*Size; fi_s=floor(fi_size); %取较大的适应值,确

5、定其位置 kk=1; for i=1:Size for j=1:fi_s(i) %选择,复制 tempE(kk,:)=E(D2(j),:); kk=kk+1; end end % * 交叉算子 * pc=0.6; %交叉概率 n=30*pc; for i=1:2:(Size-1) temp=rand; if pc>temp %交叉条件 for j=n:-1:1 tempE(i,j)=E(i+1,j); %新、旧种群个体交叉互换 tempE(i+1,j)=E(i,j); end end end tempE(Size,:)=Bests; E=tempE; % * 变异算子 * pm=0.00

6、1-1:1:Size*(0.001)/Size; %变异算子,从大到小 for i=1:Size for j=1:2*CodeL temp=rand; if pm>temp %变异条件 if tempE(i,j)=0 tempE(i,j)=1; else tempE(i,j)=0; end end end end tempE(Size,:)=Bests; E=tempE;endBJ,Bestfi,KKfigure(1),plot(time,Bestj);xlabel('Times');ylabel('Best J');figure(2),plot(time

7、f,rin,'r',timef,yout,'b');xlabel('Times');ylabel('rin,yout');function KK,Bsj=pid_ga(KK,Bsj)global rin yout timef ts=0.001;sys=tf(400,1,50,0); % 被控对象为二阶传递函数dsys=c2d(sys,ts,'z'); %做Z变换num,den=tfdata(dsys,'v');rin=1.0; % 输入信号为阶跃信号 u_1=0.0;u_2=0.0; y_1=0.0

8、;y_2=0.0;x=0 0 0;B=0;err_1=0;tu=1;s=0;P=100;for k=1:P timef(k)=k*ts; r(k)=rin; u(k)=sum(KK.*x); %控制器输出 if u(k)>=10 % 约束条件 u(k)=10; end if u(k)<=-10 u(k)=-10; end %跟踪输入信号 yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2; err(k)=r(k)-yout(k); % * 返回 PID 参数* u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout

9、(k); x(1)=err(k); %计算 P x(2)=(err(k)-err_1)/ts; %计算 D x(3)=x(3)+err(k)*ts; %计算 I err(2)=err_1; err_1=err(k); if s=0 if yout(k)>0.95&yout(k)<1.05 tu=timef(k); % tu为上升时间 s=1; % 进入稳态区域 end endendfor i=1:P % 求代价函数值 Ji(i)=0.999*abs(err(i)+0.01*u(i)2*0.1; B=B+Ji(i); if i>1 erry(i)=yout(i)-yout(i-1); % 系统误差 if erry(i)<0 % 若产生超调,采取惩罚措施 B=B+100*abs(erry(i); end endend

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论