2型FIS模糊PID控制
本例将2型模糊PID控制器与1型模糊PID控制器和常规PID控制器进行比较。本例改编自[1]。
模糊PID控制
本例使用以下[1]中描述的模糊逻辑控制器(FLC)结构。控制器的输出( )使用错误( )和误差的导数( ).使用缩放因子 而且 ,输入 而且 被归一化 而且 ,分别。两个输入的归一化范围在[-1,1]的范围内。模糊逻辑控制器也产生范围[-1,1]的归一化输出。额外的扩展的因素 而且 映射模糊控制器输出 成 .
本例使用延迟一阶系统 作为植物模型。
在这里, , , 分别为增益、时延和时间常数。
缩放因子 , , 定义如下,其中 为闭环时间常数。
输入比例因子 是:
在哪里 而且 参考值和系统输出值是否与时间一致 .这些值对应于系统的标称工作点。
本例使用模糊逻辑控制器Simulink®块比较了1型和2型Sugeno模糊推理系统(FISs)的性能。
构建1型金融中间人
使用创建1型FISsugfis
.
fis1 = sugfis;
向FIS添加输入变量。
fis1 = addInput(fis1,[-1 1],“名字”,“E”);fis1 = addInput(fis1,[-1 1],“名字”,“删除”);
在每个输入中加入三个均匀分布的重叠三角形隶属函数(mf)。MF名称代表负(N
),零(Z
),积极的(P
).
fis1 = addMF (fis1,“E”,“trimf”(2 1 0),“名字”,“N”);fis1 = addMF (fis1,“E”,“trimf”(1 0 1),“名字”,“Z”);fis1 = addMF (fis1,“E”,“trimf”[0 1 2],“名字”,“P”);fis1 = addMF (fis1,“删除”,“trimf”(2 1 0),“名字”,“N”);fis1 = addMF (fis1,“删除”,“trimf”(1 0 1),“名字”,“Z”);fis1 = addMF (fis1,“删除”,“trimf”[0 1 2],“名字”,“P”);
绘制输入隶属函数图。
图次要情节(1、2、1)plotmf (fis1,“输入”1)标题(输入1的次要情节(1、2、2)plotmf (fis1,“输入”2)标题(“输入2”)
将输出变量添加到FIS中。
fis1 = addOutput(fis1,[-1 1],“名字”,“U”);
添加均匀分布常数
函数的输出。MF名称代表-大(注
),消极的媒介(纳米
),零(Z
),积极的媒介(点
),积极的大(PB
).
fis1 = addMF (fis1,“U”,“不变”, 1“名字”,“注”);fis1 = addMF (fis1,“U”,“不变”, -0.5,“名字”,“纳米”);fis1 = addMF (fis1,“U”,“不变”0,“名字”,“Z”);fis1 = addMF (fis1,“U”,“不变”, 0.5,“名字”,“点”);fis1 = addMF (fis1,“U”,“不变”, 1“名字”,“铅”);
向FIS添加规则。这些规则创建了一个比例控制面。
规则= [..."E==N & delE==N => U=NB";..."E==Z & delE==N => U=NM";..."E==P & delE==N => U=Z";..."E==N & delE==Z => U=NM";..."E==Z & delE==Z => U=Z";..."E==P & delE==Z => U=PM";..."E==N & delE==P => U=Z";..."E==Z & delE==P => U=PM";..."E==P & de ==P => U=PB"...];fis1 = addRule (fis1、规则);
绘制控制曲面。
图gensurf (fis1)标题(“1型FIS控制面”)
构建2型金融中间人
转换1型FIS,fis1
,改为2型FIS。
fis2 = convertToType2 (fis1);
二类Sugeno系统,fis2
,对输入变量使用类型-2隶属函数,对输出变量使用类型-1隶属函数。
为在[1]中定义的输入mf定义不确定性的范围(FOU)。为此,为每个MF设置较低的MF比例因子。对于本例,将较低的MF延迟值设置为0
.
Scale = [0.2 0.9 0.2;0.3 0.9 0.3];为i = 1:长度(fis2.Inputs)为j = 1:length(fis2.Inputs(i). membershipfunctions) fis2.Inputs(i). membershipfunctions (j)。LowerLag = 0;fis2.Inputs (i) .MembershipFunctions (j)。LowerScale =规模(i, j);结束结束
绘制type-2输入成员函数。
图次要情节(1、2、1)plotmf (fis2,“输入”1)标题(输入1的次要情节(1、2、2)plotmf (fis2,“输入”2)标题(“输入2”)
FOU为FIS增加了额外的不确定性,并产生了一个非线性控制面。
图gensurf (fis2)标题(“2型FIS控制面”)
传统的PID控制器
这个例子比较了模糊逻辑控制器的性能与下面的常规PID控制器。
在这里, 获得成正比, 积分器得到, 是导数增益,和 为导数滤波器时间常数。
配置模拟
定义名义工厂模型。
C = 0.5;L = 0.5;T = 0.5;G = tf(C,[t1],“Outputdelay”L);
生成常规PID控制器参数pidtune
.
pidController = pidtune (G,“pidf”);
在本例中,引用( 步进信号是和 ,结果是 如下。
= 1。
Ce = 1;
要配置仿真,请使用以下标称控制器参数。
tauC = 0.2;Cd = min (T、L / 2) * Ce;C0 = 1 / (C * * (tauC + L / 2));C1 = max (T、L / 2) * C0;
要模拟控制器,请使用comparepidcontrollers
仿真软件模型。
模型=“comparepidcontrollers”;load_system(模型)
名义上的流程进行模拟
在标称工况下对模型进行仿真。
着干活= sim(模型);
画出所有三个控制器的系统阶跃响应。
plotTitle = [的名义:C = 'num2str (C)”,L = 'num2str(左)”,T =”num2str (T)];plotOutput(着干活,plotTitle)
得到每个控制器的系统阶跃响应特性。这里,上升时间和稳定时间以秒为单位,超调量是最终值的百分比,绝对误差是对阶跃响应的积分。
stepResponseTable(着干活)
ans =3×4表上升时间超调设定时间绝对误差_________ _________ _____________ ______________ PID 0.62412 11.234 4.5583 1.04 1型FLC 1.4267 0 4.1023 1.1522 2型FLC 1.8662 0 5.129 1.282
对于名义工艺:
1型和2型模糊控制器在超调量方面优于常规PID控制器。
传统的PID控制器在上升时间和绝对误差积分(IAE)方面表现更好。
1型FLC在上升时间、沉降时间和IAE方面优于2型FLC。
修改流程进行模拟
与标称过程相比,通过增加增益、延时和时间常数值来修改工厂模型。
C = 0.85;L = 0.6;T = 0.6;G = tf(C,[t1],“Outputdelay”L);
使用更新后的设备参数对模型进行仿真。
out2 = sim(模型);
画出所有三个控制器的系统阶跃响应。
plotTitle = [修改1:C =”num2str (C)”,L = 'num2str(左)”,T =”num2str (T)];plotOutput (out2 plotTitle)
得到每个控制器的系统阶跃响应特性。
stepResponseTable (out2)
ans =3×4表上升时间超调设定时间绝对误差_________ _________ _____________ ______________ PID 0.38464 80.641 29.458 4.7486一类FLC 0.47262 24.877 4.6788 1.1137二类FLC 0.47262 22.787 3.4561 1.076
对于这个修改后的过程:
与模糊逻辑控制器相比,常规PID控制器具有明显的超调量、较大的调整时间和较高的IAE
对于所有的性能测量,2型FLC与1型FLC产生相同或更好的性能。
结论
总的来说,与传统的PID控制器相比,1型FLC在名义工厂中产生了优越的性能。2型FLC在改良植物中表现出更强的性能。
传统PID控制器的鲁棒性可以通过不同的方法来提高,如预测或多个PID控制器配置。另一方面,2型FLC的性能可以通过使用不同的:
规则库
的规则数量
傻人
例如,您可以创建一个type-2 FLC,它使用较低的MF缩放因子和较低的MF滞后来定义FOU。
为fis2
,设置低MF刻度和滞后值为0.7
而且0.1
,分别为所有输入隶属度函数。
为i = 1:长度(fis2.Inputs)为j = 1:length(fis2.Inputs(i). membershipfunctions) fis2.Inputs(i). membershipfunctions (j)。LowerScale = 0.7;fis2.Inputs (i) .MembershipFunctions (j)。LowerLag = 0.1;结束结束
绘制更新后的成员函数。
图次要情节(1、2、1)plotmf (fis2,“输入”1)标题(输入1的次要情节(1、2、2)plotmf (fis2,“输入”2)标题(“输入2”)
用标称装置对模型进行仿真,绘制控制器的阶跃响应。
C = 0.5;L = 0.5;T = 0.5;G = tf(C,[t1],“Outputdelay”L);out4 = sim(模型);close_system(model,0) plotTitle = [的名义:C = 'num2str (C)”,L = 'num2str(左)”,T =”num2str (T)];plotOutput (out4 plotTitle)
得到每个控制器的系统阶跃响应特性。
stepResponseTable (out4)
ans =3×4表上升时间超调设定时间绝对误差_________ _________ _____________ ______________ PID 0.62412 11.234 4.5583 1.04一类FLC 1.4267 0 4.1023 1.1522二类FLC 1.2179 0 3.8746 1.1087
在这种情况下,2型FLC的FOU的更新提高了阶跃响应的上升时间。
然而,较低的MF滞后值也增加了超调。
C = 0.85;L = 0.6;T = 0.6;G = tf(C,[t1],“Outputdelay”L);out5 = sim(模型);plotTitle = [的名义:C = 'num2str (C)”,L = 'num2str(左)”,T =”num2str (T)];plotOutput (out5 plotTitle)
t = stepResponseTable (out5)
t =3×4表上升时间超调设定时间绝对误差_________ _________ _____________ ______________ PID 0.38464 80.641 29.458 4.7486一类FLC 0.47262 24.877 4.6788 1.1137二类FLC 0.47262 26.699 4.6812 1.1278
因此,为了获得所需的阶跃响应特性,可以改变较低的MF尺度和滞后值,以找到一个合适的组合。
您可以使用Mamdani型FIS进一步改进模糊逻辑控制器输出,因为它也为输出隶属函数提供较低的MF尺度和滞后参数。然而,Mamdani type-2 FLC由于昂贵的类型缩减过程引入了额外的计算延迟。
参考文献
[1]孟德尔,j.m.。基于不确定规则的模糊系统:导论与新方向,第二版,施普林格,2017,pp. 229-234, 600-608。
本地函数
函数plotOutput(out,plotTitle)图图([0 20],[1 1])保持在plot(out.yout{1}.Values) plot(out.yout{2}.Values) plot(out.yout{3}.Values)保持从网格小包含(的时间(秒)) ylabel (“输出”标题(plotTitle)传说([“参考”,“PID”,“1型方法”,“2型方法”),“位置”,“最佳”)结束
函数t = stepResponseTable(out) s = stepinfo(out.yout{1}.Values.Data,out.yout{1}.Values.Time);stepResponseInfo(1)。上升时间= s.RiseTime;stepResponseInfo(1)。过度= s.Overshoot;stepResponseInfo(1)。SettlingTime = s.SettlingTime;stepResponseInfo(1)。IAE = out.yout {4} .Values.Data(结束);s = stepinfo (out.yout {2} .Values.Data, out.yout {2} .Values.Time); stepResponseInfo(2).RiseTime = s.RiseTime; stepResponseInfo(2).Overshoot = s.Overshoot; stepResponseInfo(2).SettlingTime = s.SettlingTime; stepResponseInfo(2).IAE = out.yout{5}.Values.Data(end); s = stepinfo(out.yout{3}.Values.Data,out.yout{3}.Values.Time); stepResponseInfo(3).RiseTime = s.RiseTime; stepResponseInfo(3).Overshoot = s.Overshoot; stepResponseInfo(3).SettlingTime = s.SettlingTime; stepResponseInfo(3).IAE = out.yout{6}.Values.Data(end); t = struct2table(stepResponseInfo,“RowNames”,[“PID”“1型方法”“2型方法”]);t.Properties。VariableNames {1} =的上升时间;t.Properties。VariableNames {2} = t.Properties.VariableNames {2};t.Properties。VariableNames {3} =“沉淀时间”;t.Properties。VariableNames {4} =的绝对误差;结束