该示例将2型模糊PID控制器与类型-1模糊PID控制器和传统PID控制器进行比较。此示例适用于[1]。
此示例使用以下模糊逻辑控制器(FLC)结构如[1]所述。控制器的输出( )使用错误( )和错误的衍生物( )。使用缩放因子 和 ,输入 和 被标准化为 和 ,分别。两个输入的规范化范围都在[-1,1]范围内。模糊逻辑控制器还产生[-1,1]范围内的规范化输出。额外的扩展的因素 和 映射模糊逻辑控制器输出 进入 。
此示例使用延迟的一阶系统 作为植物模型。
这里, 那 , 和 是增益,时间延迟和时间常数。
缩放因子 那 , 和 定义如下,在哪里 是闭环时间常数。
输入缩放因子 是:
在哪里 和 是当时的参考和系统输出值 。这些值对应于系统的标称操作点。
这个例子比较了使用模糊逻辑控制器Simulink®模块的1型和2型Sugeno模糊推理系统(FISs)的性能。金宝app
使用Type-1 FIS使用Sugfis.
。
fis1 = sugfis;
向FIS添加输入变量。
= addInput(1,[-1]),'名称'那“E”);= addInput(1,[-1]),'名称'那'dele');
将三个均匀分布的重叠三角形函数(MFS)添加到每个输入。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,'dele'那'trimf',[ - 2 -1 0],'名称'那'n');fis1 = addmf(fis1,'dele'那'trimf',[ - 1 0 1],'名称'那'z');fis1 = addmf(fis1,'dele'那'trimf'[0 1 2],'名称'那'P');
绘制输入隶属函数。
图次要情节(1、2、1)plotmf (fis1,'输入',1)标题('输入1')子图(1,2,2)plotmf(fis1,'输入',2)标题('输入2')
将输出变量添加到FIS。
= addOutput(1,[-1])'名称'那'U');
添加均匀分布不变
函数到输出。MF名称代表负大(NB.
),消极的媒介(纳米
),零(Z.
),积极的媒介(下午
), 和积极的大(PB.
)。
fis1 = addmf(fis1,'U'那“不变”, 1'名称'那“注”);fis1 = addmf(fis1,'U'那“不变”, -0.5,'名称'那'nm');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&dele == p => u = pb”......];fis1 = addrule(fis1,规则);
绘制控制表面。
图Gensurf(FIS1)标题('控制表面1 fis')
转换Type-1 FIS,FIS1.
,到2型FIS。
fis2 = converttotype2(fis1);
2型Sugeno系统,FIS2.
,使用类型-2 emperione函数用于输入变量和输出变量的1型隶属函数。
定义如[1]中定义的输入MFS的不确定性(FOU)的占用空间。为此,请设置每个MF的较低MF缩放系数。对于此示例,将较低的MF滞后值设置为0.
。
尺度= [0.2 0.9 0.2;0.3 0.9 0.3];为了i = 1:长度(fis2.inputs)为了j = 1:长度(fis2.inputs(i).membershipfunctions)fis2.inputs(i).membershipfunctions(j).lowerlag = 0;fis2.inputs(i).membershipfunctions(j).lowerscale = scale(i,j);结尾结尾
绘制Type-2输入隶属函数。
图形子图(1,2,1)plotmf(FIS2,'输入',1)标题('输入1')子图(1,2,2)plotmf(FIS2,'输入',2)标题('输入2')
FU为FIS增加了额外的不确定性,并产生非线性控制表面。
图gensurf (fis2)标题(“2型FIS的控制表面”)
此示例将模糊逻辑控制器性能与以下传统PID控制器的模糊逻辑控制器性能进行了比较。
这里, 获得成正比, 是集成商收益, 导数是增益,和 为导数滤波器时间常数。
定义名义植物模型。
c = 0.5;l = 0.5;t = 0.5;g = tf(c,[t 1],'outputdelay',l);
采用常规PID控制器参数生成Pidtune.
。
pidController = pidtune (G,“pidf”);
在本例中,引用( 是一个步进信号和 ,这导致了 如下。
= 1。
Ce = 1;
要配置仿真,请使用以下标称控制器参数。
Tauc = 0.2;Cd = min(t,l / 2)* ce;C0 = 1 /(C * CE *(Tauc + L / 2));c1 = max(t,l / 2)* c0;
要模拟控制器,请使用比素透明控制器
金宝app仿真软件模型。
模型='pomparepidcontrollers';load_system(模型)
在标称操作条件下模拟模型。
着干活= sim(模型);
为所有三个控制器绘制系统的步骤响应。
PlotOutput(Out1,[的名义:C = 'num2str(c)',l ='num2str(l)',t ='num2str(t)])
获得系统各控制器的阶跃响应特性。
stepResponseTable(着干活)
ans =3×4表上升时间(秒)过冲(%)沉降时间(秒)绝对误差的积分_________________________________________pid 0.62412 11.234 4.5564 1.04型-1 FLC 1.4267 0 4.1023 1.1522 TYPE-2 FLC 1.8662 0 5.129 1.282
对于标称流程:
Type-1和Type-2模糊逻辑控制器都在过冲方面优于传统的PID控制器。
传统的PID控制器相对于绝对误差(IAE)的上升时间和积分更好地执行。
在上升时间,沉降时间和IAE方面,1型FLC比2 FLC更好地执行。
与标称过程相比,通过增加增益,时间延迟和时间常数值来修改工厂模型。
C = 0.85;L = 0.6;T = 0.6;g = tf(c,[t 1],'outputdelay',l);
使用更新的工厂参数模拟模型。
out2 = sim(模型);
为所有三个控制器绘制系统的步骤响应。
plotOutput (out2 ['修改1:c ='num2str(c)”,L = 'num2str(l)',t ='num2str(t)])
获得系统各控制器的阶跃响应特性。
stepResponseTable (out2)
ans =3×4表上升时间(秒)过冲(百分比)沉降时间(秒)绝对误差的整体_____________________________________________PID 0.38464 80.6486 TYPE-1 FLC 0.47262 24.877 4.6788 1.1137型号-2 FLC 0.47262 22.787 3.4561 1.076
对于此修改过程:
与模糊逻辑控制器相比,传统的PID控制器呈现出显着的过冲,更大的沉降时间和更高的IAE
对于所有性能指标,2型FLC与1型FLC相比具有相同或更高的性能。
总的来说,与传统PID控制器相比,1型FLC为标称工厂产生了卓越的性能。Type-2 FLC为改性工厂表示更强大的性能。
可以使用不同的方法改进传统PID控制器的稳健性,例如预测或多个PID控制器配置。另一方面,可以通过使用不同的方式提高-2 FLC的性能:
规则基础
规则数量
烦恼
例如,您可以使用较低的MF缩放因子和下部MF滞后创建一个类型-2 FLC,其定义了FU的FU。
为了FIS2.
,设置较低的MF比例和滞后值0.7
和0.1
,分别用于所有输入隶属函数。
为了i = 1:长度(fis2.inputs)为了j = 1:长度(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,[t 1],'outputdelay',l);OUT4 = SIM(型号);close_system(model,0)plotoutput(Out4,[的名义:C = 'num2str(c)',l ='num2str(l)',t ='num2str(t)])
获得系统各控制器的阶跃响应特性。
stepResponseTable (out4)
ans =3×4表上升时间(秒)过冲(%)沉降时间(秒)绝对误差的积分_________________________________________PID 0.62412 11.234 4.5564 1.04 TYPE-1 FLC 1.4267 0 4.1023 1.1522 TYPE-2 FLC 1.2179 0 3.8746 1.1087
在这种情况下,2型FLC的更新的FOU改善了阶跃响应的上升时间。
然而,在改性工厂的情况下,较低的MF滞后值也会增加过冲。
C = 0.85;L = 0.6;T = 0.6;g = tf(c,[t 1],'outputdelay',l);OUT5 = SIM(型号);plotoutput(Out5,[的名义:C = 'num2str(c)',l ='num2str(l)',t ='num2str(t)])
StepresponseTable(Out5)
ans =3×4表上升时间(sec)过度(%)沉淀时间(sec)绝对误差的积分 _______________ _____________ ___________________ __________________________ PID 0.38464 80.641 29.452 4.7486 1型方法0.47262 26.699 4.6812 1.1278 0.47262 24.877 4.6788 1.1137 2型方法
因此,为了获得所需的步骤响应特性,您可以改变较低的MF比例和滞后值以找到合适的组合。
您可以使用Mamdani类型FIS进一步改进模糊逻辑控制器输出,因为它还为输出隶属函数提供了更低的MF规模和滞后参数。然而,Mamdani型2 FLC由于昂贵的类型减少过程引入了额外的计算延迟。
[1] Mendel,J. M.,基于规则的不确定模糊系统:介绍和新的方向,第二版,Springer,2017,pp.229-234,600-608。
功能plotoutput(out,plottitle)图绘图([020],[1 1])保持上绘图(out.yout {1} .values)plot(out.yout {2} .values)plot(out.yout {3} .values)持有离开网格次要的包含('时间(秒)')ylabel('输出')标题(绘图)传奇([“参考”那“PID”那“type-1 flc”那“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”“type-1 flc”“2型方法”]);t.properties.variablenames {1} =上升时间(秒);t.properties.variablenames {2} = [t.properties.variablenames {2}“(%)”];t.properties.variablenames {3} ='建立时间(秒)';t.properties.variablenames {4} =绝对误差的积分;结尾