智能控制作业报告基于遗传算法的模糊控制器最优设计.docx

上传人:b****3 文档编号:3962973 上传时间:2022-11-26 格式:DOCX 页数:14 大小:236.67KB
下载 相关 举报
智能控制作业报告基于遗传算法的模糊控制器最优设计.docx_第1页
第1页 / 共14页
智能控制作业报告基于遗传算法的模糊控制器最优设计.docx_第2页
第2页 / 共14页
智能控制作业报告基于遗传算法的模糊控制器最优设计.docx_第3页
第3页 / 共14页
智能控制作业报告基于遗传算法的模糊控制器最优设计.docx_第4页
第4页 / 共14页
智能控制作业报告基于遗传算法的模糊控制器最优设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

智能控制作业报告基于遗传算法的模糊控制器最优设计.docx

《智能控制作业报告基于遗传算法的模糊控制器最优设计.docx》由会员分享,可在线阅读,更多相关《智能控制作业报告基于遗传算法的模糊控制器最优设计.docx(14页珍藏版)》请在冰豆网上搜索。

智能控制作业报告基于遗传算法的模糊控制器最优设计.docx

智能控制作业报告基于遗传算法的模糊控制器最优设计

西安理工大学

研究生课程论文/研究报告

课程名称:

智能控制

任课教师:

论文/研究报告题目:

基于遗传算法的模糊控制器最优设计

完成日期:

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模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1