西安理工大学研究生课程论文/研究报告课程名称:智能控制任课教师:论文/研究报告题目:基于遗传算法的模糊控制器最优设计完成日期:2016年8月27日学科:电力电子与电力传动学号:姓名:11.基于遗传算法的模糊控制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);%mfpara2(1),mfpara2(2),mfpara2(3)分别为an,bn,cnmfpara3=rand(N,varb);%mfpara3(1),mfpara3(2),mfpara3(3)分别为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=M%循环代数从1到3q=1whileq=N%染色体数从1到10y=zeros(1,TM);u=zeros(1,TM);er=zeros(1,TM);2yr=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);endfork=1:TMifabs(y(k)-1)=0.1tr=k*T;%上升时间trbreakendendymax=0;fork=1:TMifymaxy(k)ymax=y(k);%最大输出ymaxendendfork=1:TMera(k)=abs(e(k));%计算误差绝对值eraendaccer=sum(era);%累积误差accerovershoot=(ymax-1)/1;%超调量overshoottrovershootaccer%计算适配值,归一化0—100if(tr2)|(overshoot1)|(accer50)3fitness2=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;endfitness(q)=fitness2;y;yout1(q,:)=y;q=q+1end%一代种群运行完毕fitness[maxfit1,h]=max(fitness);maxfit(p)=maxfit1%每代的最大适配值存入maxfityout(p,:)=yout1(h,:);%每一代当适配值最大时,系统的阶跃响应输出init=gene_tic(init,fitness,p,N,varb,n,n1);%调用遗传算法优化,得到新的种群p=p+1end%运行3代后结束fork=1:TMtime(k)=k*T;endplot(time,yout(1,:),'r-',time,yout(2,:),'g-',time,yout(3,:),'b-')legend('遗传第1代','遗传第2代','遗传第3代')gridonbest=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;4u(k)=kp*e(k)+ki*sum(e)+kd*(e(k)-e1);u1=u(k);e1=e(k);endfigure(2)opt=find(maxfit==best);plot(time,y,'--',time,yout(opt(1),':'))legend('PID控制器','GA优化的模糊PID控制器')gridon各子函数MATLAB程序:1)模糊控制子程序fu_zzy.mfunctiondetae=fu_zzy(init,F,L,varb)ifF=-1%将系统误差e设定在【-1,1】之间F=-1;elseifF=1F=1;endifL=-1%将系统误差变化er设定在【-1,1】之间L=-1;elseifL=1L=1;end%模糊控制规则an=init(10);bn=init(11);cn=init(12);ap=init(13);bp=init(14);cp=init(15);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;531init(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;%保存每一代总的适应值到zongfitsumfit1(1)=fitness(1);fori=2:Nsumfit1(i)=sumfit1(i-1)+fitness(i);endlunpan=round(sumfit*rand(1,N));A=zeros(N,n1);fori=1:Nforj=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,:);endendendinit=A;%交叉pc=0.6;%交叉概率选为0.7Q=rand(1);place=round((n1-1)*rand(1)+1);%产生交叉位match=randperm(N);%产生匹配对的随机序列B=zeros(N,n1);ifQpcfori=1:placeB(:,i)=init(:,i);6endfori=place:n1forj=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);endendendinit=B;%变异pm=0.01;%变异概率选为0.01d=round(N*n1*pm);%计算变异位个数ifd==0init=init;elseifd==1i=round(N*rand(1)+1);j=round(n1*rand(1)+1);ifj=ninit(i,j)=round((varb-1)*rand(1)+1);%如果是前n位数,则变异为1至VN中的一个elseifj=n+varbinit(i,j)=-1*randint(1,1,[1,16])*1/16;%如果是n+1至n+3位数,则变异为-1至0之间中的一个elseifj=n1init(i,j)=randint(1,1,[1,16])*1/16;%如果是n+3至n2位数,则变异为0至1之间中的一个endelseifd1C=zeros(1,N*n1);x=randint(1,d,[1,N*n1]);%随机产生d个变异位置,存入x中C=reshape(init,[1,N*n1]);%将N行n1列的矩阵init转换为1行N*n1列的矩阵Cfori=1:difC(x(i))0C(x(i))=-1*rand(1);%若变异位为负数,则随机选取(-1,0)之间的小数赋值elseif(C(x(i))=0)&(C(x(i))1)C(x(i))=rand(1);%若变异位为小于1的正数,则随机选取(0,1)之间的小数赋值elseifC(x(i))=1C(x(i))=randint(1,1,[1,varb]);%若变异位大于等于1,则随机选取(1,varb)之间的整数赋值end7endinit=reshape(C,[N,n1]);%将变异后的1行N*n1列的矩阵C,转换为N行n1列的矩阵initendinit=init;2.程序运行结果程序运行过程中遗传各代的每条染色体的阶跃响应性能指标如下表1,2,3所示。表1遗传第一代各染色体阶跃响应的性能指标染色体第1条第2条第3条第4条第5条第6条第7条第8条第9条第10条上升时间01.30001.10001.10001.10001.10001.10001.40001.80001.4000超调量-0.26731.64640.9836-0.5809-0.7620-0.76720.96781.98440.3188