智能控制答案(最终版3题全做)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能控制作业
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所示:
控制电压u也分成5个模糊集:负大(NB),负小(NS),零(ZO),正小(PS),
正大(PB)。
将偏差u的变化分成7个等级:-3,-2,-1,0,+1,+2,+3,而得到
电压变化模糊表如表2示:
MATLAB仿真程序如下:
%Fuzzy Control for water tank
clear all;
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 神经网络实现下列函数的非线性映射:
101
()log ,110f x x x 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. 已知优化函数为:
62424
11
1
1222()4 2.144,
53
i x f x x x x x x x x =-++-+≤
用高级语言编程实现用遗传算法搜索其最大值和最优解。
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。