智能控制作业报告基于遗传算法的模糊控制器最优设计.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
ifymaxymax=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);
ifQfori=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.运行结果分析及总结
遗传算法作为一种模拟生物进化的全局优化方法,具有很强的鲁棒性和适应能力,能够在复杂空间进行有效的搜索。
将模糊控制和遗传算法相结合,对隶属函数和控制规则进行寻优,从而可获得全局最优的模糊控制器。
通过遗传算法对控制器参数寻优,有效地提高了遗传算法的全局搜索能力和收敛速度。
通过在适应度函数中引入表示超调量、上升时间和稳态误差的指标项,并对指标项进行适当加权,可使优化后的模糊逻辑控制器的综合性能达到满意程度。
由程序运行结果可知,经遗传算法求得的参数所组成的模糊控制器取得了满意的控制效果,且用遗传算法设计的模糊控制器的性能优于常规设计的模糊控制器。
由此可知,遗传算法可应用于模糊逻辑控制器参数的寻优过程,能较有效的确定出模糊逻辑控制器的结构和参数,进而设计出最优的模糊逻辑控制器,得到良好的系统输出。