智能控制作业报告基于遗传算法的模糊控制器最优设计.docx
- 文档编号:3962973
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:14
- 大小:236.67KB
智能控制作业报告基于遗传算法的模糊控制器最优设计.docx
《智能控制作业报告基于遗传算法的模糊控制器最优设计.docx》由会员分享,可在线阅读,更多相关《智能控制作业报告基于遗传算法的模糊控制器最优设计.docx(14页珍藏版)》请在冰豆网上搜索。
智能控制作业报告基于遗传算法的模糊控制器最优设计
西安理工大学
研究生课程论文/研究报告
课程名称:
智能控制
任课教师:
论文/研究报告题目:
基于遗传算法的模糊控制器最优设计
完成日期:
2016年8月27日
电力电子与电力传动
学
科:
学
号:
姓
名:
1.基于遗传算法的模糊控制MATLAB程序:
clearallcloseallclcT=0.1;TM=200;time=zeros(1,TM);kp=0.2;ki=0.002;kd=20;
tr=0;
%定义初始种群参数
N=10;M=3;varb=3;yout1=zeros(N,TM);yout=zeros(M,TM);fitness=zeros(1,N);
%产生初始种群n=varb^2;
n1=varb^2+varb*2;mfpara1=randint(N,n,[1,varb]);mfpara2=-1*rand(N,varb);
为an,bn,cnmfpara3=rand(N,varb);
为ap,bp,cpinit=[mfpara1,mfpara2,mfpara3];
%离散化被控对象num=[1];
den=conv(conv([1,0.1],[1,0.2]),[1,0.7]);g=tf(num,den);
yn=c2d(g,T,'zoh');[tt,ff]=tfdata(yn,'v');
%开始循环p=1whilep<=Mq=1
whileq<=Ny=zeros(1,TM);u=zeros(1,TM);er=zeros(1,TM);
%控制系统采样时间
%控制系统运行次数
%初始种群数目
%遗传代数
%语言值个数
%每条染色体的长度
%控制规则表
%mfpara2
(1),mfpara2
(2),mfpara2(3)
%mfpara3
(1),mfpara3
(2),mfpara3(3)
%循环代数从1到3
%染色体数从1到10
分别
分别
yr=zeros(1,TM);
e1=0;e2=0;E1=0;
y1=0;y2=0;y3=0;
u1=0;u2=0;u3=0;
e=zeros(1,TM);
E=zeros(1,TM);
fork=1:
TM%运行系统
yr(k)=1;
y(k)=-ff
(2)*y1-ff(3)*y2-ff(4)*y3+tt
(2)*u1+tt(3)*u2+tt(4)*u3;
y3=y2;y2=y1;y1=y(k);
u3=u2;u2=u1;
e(k)=yr(k)-y(k);
er(k)=(e(k)-e1)/T;
%调用模糊控制规则程
detae=fu_zzy(init(q,:
),e(k),er(k),varb);序
E(k)=e(k)+detae;u(k)=kp*E(k)+ki*sum(E)+kd*(E(k)-E1);E1=E(k);
u1=u(k);
e2=e1;e1=e(k);
end
fork=1:
TM
ifabs(y(k)-1)<=0.1
tr=k*T;
breakend
end
ymax=0;
fork=1:
TM
ifymax ymax=y(k); end end fork=1: TMera(k)=abs(e(k)); endaccer=sum(era);overshoot=(ymax-1)/1;trovershootaccer %计算适配值,归一化if %上升时间tr %最大输出ymax %计算误差绝对值era %累积误差accer %超调量overshoot fitness2=0; elsetr1=tr*50; overshoot1=overshoot*100;accer1=accer*2; index=[tr1,abs(overshoot1),accer1]; fitness1=(0.6*index (1)+1.2*index (2)+1.2*index(3))/3;fitness2=100-fitness1; end fitness(q)=fitness2; y; yout1(q,: )=y; %一代种群运行完毕 %每代的最大适配值存入maxfit %每一代当适配值最大时,系统的阶跃响应输出 %调用遗传算法优化,得到新 %运行3代后结束 q=q+1 end fitness[maxfit1,h]=max(fitness);maxfit(p)=maxfit1yout(p,: )=yout1(h,: );init=gene_tic(init,fitness,p,N,varb,n,n1); 的种群 p=p+1 endfork=1: TM time(k)=k*T;endplot(time,yout(1,: ),'r-',time,yout(2,: ),'g-',time,yout(3,: ),'b-')legend('遗传第1代','遗传第2代','遗传第3代') gridon best=max(maxfit) e1=1; y=[];e=[]; e1=0; y1=0;y2=0;y3=0; u1=0;u2=0;u3=0; fork=1: TM%运行系统 yr(k)=1; y(k)=-ff (2)*y1-ff(3)*y2-ff(4)*y3+tt (2)*u1+tt(3)*u2+tt(4)*u3; y3=y2;y2=y1;y1=y(k); u3=u2;u2=u1; e(k)=yr(k)-y(k); er(k)=(e(k)-e1)/T; u(k)=kp*e(k)+ki*sum(e)+kd*(e(k)-e1); u1=u(k); e1=e(k); end figure (2) opt=find(maxfit==best); plot(time,y,'--',time,yout(opt (1),': ')) legend('PID控制器','GA优化的模糊PID控制器')gridon 各子函数MATLAB程序: 1)模糊控制子程序fu_zzy.m functiondetae=fu_zzy(init,F,L,varb) ifF<=-1%将系统误差e设定在【-1,1】之间 F=-1; elseifF>=1 F=1; end ifL<=-1%将系统误差变化er设定在【-1,1】之间 L=-1; elseifL>=1 L=1; end %模糊控制规则an=init(10);bn=init(11);cn=init(12);ap=init(13);bp=init(14);cp=init(1 5); a=newfis( 'fuzzf' ;%建立隶属度函数 a=addvar(a, 'input' 'F',[-1,1]); a=addmf(a, 'input' 1,'NL','zmf' [-1,an]); a=addmf(a, 'input' 1,'ZR','trimf' [an,0,ap]); a=addmf(a, 'input' 1,'PL','smf' [ap,1]); a=addvar(a, 'input' 'L',[-1,1]); a=addmf(a, 'input' 2,'NL','zmf' [-1,bn]); a=addmf(a, 'input' 2,'ZR','trimf' [bn,0,bp]); a=addmf(a, 'input' 2,'PL','smf' [bp,1]); a=addvar(a, 'output' 'detae',[-1,1]); a=addmf(a, 'output' 1,'NL','zmf' [-1,cn]); a=addmf(a, 'output' 1,'ZR','trimf' [cn,0,cp]); a=addmf(a, 'output' 1,'PL','smf' [cp,1]); %建立控制规则表 rulelist=[11init (1)11;12init (2)11;13init(3)11; 21init(4)11;22init(5)11;23init(6)11; 31init(7)11;32init(8)11;33init(9)11];a=addrule(a,rulelist); a1=setfis(a,'DefuzzMethod','mom'); writefis(a1,'fuzzf'); a2=readfis('fuzzf'); %模糊控制器输出detae=evalfis([F,L],a2); 2)遗传算法子程序gene_tic.mfunctioninit=gene_tic(init,fitness,k,N,varb,n,n1)fitness=fitness; N=N; varb=varb; init=init; %复制 sumfit=sum(fitness);%sumfit为每一代总的适应值 zongfit(k)=sumfit;%保存每一代总的适应值到zongfit sumfit1 (1)=fitness (1); fori=2: N sumfit1(i)=sumfit1(i-1)+fitness(i); end lunpan=round(sumfit*rand(1,N)); A=zeros(N,n1); fori=1: N forj=1: (N-1) if(lunpan(i)>=0)&(lunpan(i)<=sumfit1 (1)) A(i,: )=init(1,: ); elseif(lunpan(i)>sumfit1(j))&(lunpan(i)<=sumfit1(j+1)) A(i,: )=init(j+1,: ); end end end init=A; %交叉概率选为0.7 %产生交叉位 %产生匹配对的随机序列 %交叉 pc=0.6; Q=rand (1);place=round((n1-1)*rand (1)+1);match=randperm(N); B=zeros(N,n1); ifQ fori=1: place B(: i)=init(: i); end fori=place: n1 forj=1: (N/2) B(match((j-1)*2+1),i)=init(match(j*2),i);B(match(j*2),i)=init(match((j-1)*2+1),i); end endendinit=B; %变异pm=0.01;d=round(N*n1*pm); ifd==0 init=init; elseifd==1 i=round(N*rand (1)+1);j=round(n1*rand (1)+1); ifj<=n init(i,j)=round((varb-1)*rand (1)+1); 至VN中的一个 elseifj<=n+varb init(i,j)=-1*randint(1,1,[1,16])*1/16;异为-1至0之间中的一个 elseifj<=n1init(i,j)=randint(1,1,[1,16])*1/16; 异为0至1之间中的一个 end elseifd>1 C=zeros(1,N*n1); x=randint(1,d,[1,N*n1]); C=reshape(init,[1,N*n1]); 阵C fori=1: d ifC(x(i))<0 C(x(i))=-1*rand (1); 赋值 elseif(C(x(i))>=0)&(C(x(i))<1)C(x(i))=rand (1); 间的小数赋值 elseifC(x(i))>=1 C(x(i))=randint(1,1,[1,varb]); varb)之间的整数赋值 end %变异概率选为0.01 %计算变异位个数 %如果是前n位数,则变异为1 %如果是n+1至n+3位数,则变 %如果是n+3至n2位数,则变 %随机产生d个变异位置,存入x中 %将N行n1列的矩阵init转换为1行N*n1列的矩 %若变异位为负数,则随机选取(-1,0)之间的小数 %若变异位为小于1的正数,则随机选取(0,1)之 %若变异位大于等于1,则随机选取(1, %将变异后的1行N*n1列的矩阵C,转换为N行n1 end init=reshape(C,[N,n1]); 列的矩阵init end init=init; 2.程序运行结果程序运行过程中遗传各代的每条染色体的阶跃响应性能指标如下表1,2,3所示。 表1遗传第一代各染色体阶跃响应的性能指标 染色体 第1条 第2条 第3条 第4条 第5条 第6条 第7条 第8条 第9条 第10条 上升时间 0 1.3000 1.1000 1.1000 1.1000 1.1000 1.1000 1.4000 1.8000 1.4000 超调量 -0.267 1.6464 0.9836 -0.580 -0.762 -0.767 0.9678 1.9844 0.3188 0.6170 3 9 0 2 累计误差 118.43 162.24 172.29 139.09 189.34 195.73 166.95 215.31 18.971 124.32 11 75 24 05 29 97 54 48 1 50 适应度值 0 0 0 0 0 0 0 0 54.069 7 0 表2遗传第二代各染色体阶跃响应的性能指标 染色体 第1条 第2条 第3条 第4条 第5条 第6条 第7条 第8条 第9条 第10条 上升时间 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 超调量 0.3188 0.3188 0.3188 0.3188 0.2811 0.3188 0.3188 0.3188 0.3188 0.3188 累计误差 18.971 18.971 18.971 18.971 17.992 18.971 18.971 18.971 18.971 19.373 1 1 1 1 8 1 1 1 1 5 适应度值 54.069 54.069 54.069 54.069 56.363 54.069 54.069 54.069 54.069 53.7478 7 7 7 7 3 7 7 7 7 表3遗传第三代各染色体阶跃响应的性能指标 染色体 第1条 第2条 第3条 第4条 第5条 第6条 第7条 第8条 第9条 第10条 上升时间 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 1.8000 超调量 0.3188 0.3188 0.3188 0.3188 0.3188 0.3188 0.3188 0.2022 0.3188 0.3188 累计误差 18.971 18.971 19.373 19.508 18.971 18.971 18.971 19.623 18.971 19.373 1 1 5 5 1 1 1 3 1 5 适应度值 54.069 54.069 53.747 53.639 54.069 54.069 54.069 58.214 54.069 53.7478 7 7 8 9 7 7 7 5 7 程序运行的各代最大适应度值为: maxfit= 54.069756.363358.2145 程序运行的最佳适应度值为: best= 58.2145 Kp=0.2,ki=0.002,kd=10时系统运行结果如图1所示,优化后的控制器输出平稳但存在稳态误差,此时系统调节时间为1.8s,超调为2.1%,误差为21.2,优化后系统的阶跃响应性能得到明显改善。 图1PID控制器和优化模糊PID控制器的阶跃响应比较 Kp=0.2,ki=0.002,kd=20时系统运行结果如图2所示,优化后的控制器输出累积误差减少,但超调增大,此时系统调节时间为1.4s,超调为37.7%,误差为20.2。 图3遗传三代系统阶跃响应程序运行结果 3.运行结果分析及总结 遗传算法作为一种模拟生物进化的全局优化方法,具有很强的鲁棒性和适应能力,能够在复杂空间进行有效的搜索。 将模糊控制和遗传算法相结合,对隶属函数和控制规则进行寻优,从而可获得全局最优的模糊控制器。 通过遗传算法对控制器参数寻优,有效地提高了遗传算法的全局搜索能力和收敛速度。 通过在适应度函数中引入表示超调量、上升时间和稳态误差的指标项,并对指标项进行适当加权,可使优化后的模糊逻辑控制器的综合性能达到满意程度。 由程序运行结果可知,经遗传算法求得的参数所组成的模糊控制器取得了满意的控制效果,且用遗传算法设计的模糊控制器的性能优于常规设计的模糊控制器。 由此可知,遗传算法可应用于模糊逻辑控制器参数的寻优过程,能较有效的确定出模糊逻辑控制器的结构和参数,进而设计出最优的模糊逻辑控制器,得到良好的系统输出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 控制 作业 报告 基于 遗传 算法 模糊 控制器 最优设计
![提示](https://static.bdocx.com/images/bang_tan.gif)