您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页智能控制答案(最终版3题全做)

智能控制答案(最终版3题全做)

来源:爱问旅游网
智能控制作业

1.已知某一炉温控制系统,要求温度保持着600℃恒定。针对该控制系统有以下控制经验。

(1)若炉温低于600℃,则升压;低得越多升压越高。 (2)若炉温高于600℃,则降压;高得越多降压越低。 (3)若炉温等于600℃,则保持电压不变。

设模糊控制器为一维控制器,输入语言变量为误差,输出为控制电压。输入、输出变量的量化等级为7级,取5个模糊集。试设计隶属度函数误差变化划分表,控制电压变化划分表和模糊控制规则表。

解:(1) 确定变量

定义理想温度为600℃,实际炉温为T,则温度差为:

e=600-T

将温度差e作为输入变量。

(2)输入量和输出量的模糊化

将偏差e分成5个模糊集:负大(NB),负小(NS),零(ZO),正小(PS),正大

(PB)。将偏差e的变化分成7个等级:-3,-2,-1,0,+1,+2,+3,从而得到温度变化模糊表如表1所示:

表1-温度变化e划分表 隶属度 模糊集 PB PS ZO NS NB 变化等级 -3 0 0 0 0 1 -2 0 0 0 0.5 0.5 -1 0 0 0.5 1 0 0 0 0 1 0 0 +1 0 1 0.5 0 0 +2 0.5 0.5 0 0 0 +3 1 0 0 0 0 控制电压u也分成5个模糊集:负大(NB),负小(NS),零(ZO),正小(PS),正大(PB)。将偏差u的变化分成7个等级:-3,-2,-1,0,+1,+2,+3,而得到电压变化模糊表如表2示:

表2-电压变化e划分表 隶属度 模糊集

MATLAB仿真程序如下: %Fuzzy Control for water tank clear all; PB PS ZO NS NB 变化等级 -3 0 0 0 0 1 -2 0 0 0 0.5 0.5 -1 0 0 0.5 1 0 0 0 0 1 0 0 +1 0 1 0.5 0 0 +2 0.5 0.5 0 0 0 +3 1 0 0 0 0 close all;

a=newfis('fuzz_tank');

a=addvar(a,'input','e',[-3,3]); %Parameter e a=addmf(a,'input',1,'NB','zmf',[-3,-1]); a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]); a=addmf(a,'input',1,'Z','trimf',[-2,0,2]); a=addmf(a,'input',1,'PS','trimf',[-1,1,3]); a=addmf(a,'input',1,'PB','smf',[1,3]);

a=addvar(a,'output','u',[-4,4]); %Parameter u a=addmf(a,'output',1,'NB','zmf',[-4,-1]); a=addmf(a,'output',1,'NS','trimf',[-4,-2,1]); a=addmf(a,'output',1,'Z','trimf',[-2,0,2]); a=addmf(a,'output',1,'PS','trimf',[-1,2,4]); a=addmf(a,'output',1,'PB','smf',[1,4]);

rulelist=[1 1 1 1; %Edit rule base 2 2 1 1; 3 3 1 1; 4 4 1 1; 5 5 1 1];

a=addrule(a,rulelist);

a1=setfis(a,'DefuzzMethod','mom'); %Defuzzy

writefis(a1,'tank'); %Save to fuzzy file \"tank.fis\" a2=readfis('tank');

figure(1); plotfis(a2); figure(2);

plotmf(a,'input',1); figure(3);

plotmf(a,'output',1);

flag=1; if flag==1 showrule(a) %Show fuzzy rule base ruleview('tank'); %Dynamic Simulation end

disp('-------------------------------------------------------');

disp(' fuzzy controller table:e=[-3,+3],u=[-4,+4] ');

disp('-------------------------------------------------------');

for i=1:1:7 e(i)=i-4;

Ulist(i)=evalfis([e(i)],a2); end

Ulist=round(Ulist)

e=-3; % Error

u=evalfis([e],a2) %Using fuzzy inference

2.用高级语言(C、VC++、MATLAB等)编程实现用BP神经网络实现下列函数的非线性映射:

f(x)1log10x,1x10 x分析误差曲线及网络的泛化能力。

解:clear all; close all;

xite=0.50; alfa=0.05;

w2=rands(6,1); w2_1=w2;w2_2=w2_1;

w1=rands(2,6); w1_1=w1;w1_2=w1;

dw1=0*w1; x=[0,0]';

u_1=0; y_1=0;

I=[0,0,0,0,0,0]'; Iout=[0,0,0,0,0,0]'; FI=[0,0,0,0,0,0]'; ts=0.001; for k=1:1:10000 time(k)=k*ts; u(k)=k*ts;

y(k)=u_1^(-1)*log10(u_1);

for j=1:1:6 I(j)=x'*w1(:,j); Iout(j)=1/(1+exp(-I(j))); end

yn(k)=w2'*Iout; % Output of NNI networks

e(k)=y(k)-yn(k); % Error calculation

w2=w2_1+(xite*e(k))*Iout+alfa*(w2_1-w2_2);

for j=1:1:6

FI(j)=exp(-I(j))/(1+exp(-I(j)))^2; end

for i=1:1:2

for j=1:1:6

dw1(i,j)=e(k)*xite*FI(j)*w2(j)*x(i); end end

w1=w1_1+dw1+alfa*(w1_1-w1_2); yu=0; for j=1:1:6

yu=yu+w2(j)*w1(1,j)*FI(j); end dyu(k)=yu;

x(1)=u(k); x(2)=y(k);

w1_2=w1_1;w1_1=w1; w2_2=w2_1;w2_1=w2; u_1=u(k); y_1=y(k); end figure(1);

plot(time,y,'r',time,yn,'b'); xlabel('times');ylabel('y and yn');

3. 已知优化函数为:

x1624f(x)4x2.1xx1x24x24x2,32141xi5

用高级语言编程实现用遗传算法搜索其最大值和最优解。

MATLAB 程序如下: Size=80; G=200;

CodeL=10; umax=5; umin=-5;

E=round(rand(Size,2*CodeL)); %Initial Code for k=1:1:G time(k)=k; for s=1:1:Size m=E(s,:); y1=0;y2=0;

m1=m(1:1:CodeL); for i=1:1:CodeL

y1=y1+m1(i)*2^(i-1); end

x1=(umax-umin)*y1/1023+umin; m2=m(CodeL+1:1:2*CodeL); for i=1:1:CodeL

y2=y2+m2(i)*2^(i-1); end

x2=(umax-umin)*y2/1023+umin;

F(s)=4*x1^2-2.1*x^4+x1^6/3+x1*x2-4*x2^2+4*x2^4; end Ji=1./F;

BestJ(k)=min(Ji);

fi=F; [Oderfi,Indexfi]=sort(fi); Bestfi=Oderfi(Size); BestS=E(Indexfi(Size),:); bfi(k)=Bestfi;

fi_sum=sum(fi);

fi_Size=(Oderfi/fi_sum)*Size;

fi_S=floor(fi_Size); %Selecting Bigger fi value

kk=1;

for i=1:1:Size

for j=1:1:fi_S(i)

TempE(kk,:)=E(Indexfi(i),:); kk=kk+1; end end pc=0.60;

n=ceil(20*rand); for i=1:2:(Size-1) temp=rand;

if pc>temp for j=n:1:20

TempE(i,j)=E(i+1,j); TempE(i+1,j)=E(i,j); end end end

TempE(Size,:)=BestS; E=TempE; %pm=0.001;

%pm=0.001-[1:1:Size]*(0.001)/Size; %Bigger fi, smaller Pm %pm=0.0; %No mutation pm=0.1; %Big mutation

for i=1:1:Size

for j=1:1:2*CodeL temp=rand;

if pm>temp %Mutation Condition if TempE(i,j)==0 TempE(i,j)=1; else

TempE(i,j)=0; end end end end

TempE(Size,:)=BestS; E=TempE; end

Max_Value=Bestfi BestS x1 x2

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务