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

更新时间:2024-06-17 02:59:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

智能控制作业

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; íit 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'); Tfuzzy

writefis(a1,'tank'); %Save to fuzzy file \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;

本文来源:https://www.bwwdw.com/article/ufs3.html

Top