模糊PID控制与2型FIS

该示例中,类型2的模糊PID控制器既具有1型模糊PID控制器和常规的PID控制器进行比较。这个例子是适于从[1]。

模糊PID控制

此示例使用以下模糊逻辑控制器(FLC)的结构[1]中所述。控制器的输出( ü )使用错误( Ë )和误差的导数( Ë ˙ )。使用缩放因子 C Ë C d ,输入 Ë Ë ˙ 标准化为 Ë Δ Ë ,分别。两个输入的归一化范围都在[-1,1]范围内。模糊逻辑控制器也产生一个归一化输出在范围[-1,1]。额外的扩展的因素 C 0 C 1 映射模糊逻辑控制器输出 ü ü

这个例子使用一个延迟的第一阶系统 G 小号 作为植物模型。

G 小号 = C Ë - LS TS + 1

这里, C 大号 Ť 是增益,时延,和时间常数。

缩放因素 C d C 0 C 1 被定义如下,其中 τ C 是闭环时间常数。

C d = Ť 大号 2 × C Ë C 0 = 1 C × C Ë τ C + 大号 2 C 1 = 最大 Ť 大号 2 × C 0

输入比例因子 C Ë 是:

C Ë 1 [R Ť [R - ÿ Ť [R

哪里 [R Ť [R ÿ Ť [R 是在时间参考和系统输出值 Ť = Ť [R 。这些值对应于所述系统的标称工作点。

本例使用模糊逻辑控制器Simulink®块比较了1型和2型Sugeno模糊推理系统(FISs)的性能。万博1manbetx

结构类型1 FIS

创建一个类型1的FIS使用sugfis

FIS1 = sugfis;

向FIS添加输入变量。

(1,[-1],'名称''E');(1,[-1],'名称''DELE');

添加三个均匀分布的重叠的三角形的隶属函数(MFS)到每个输入端。在MF名代表ñž),和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。

FIS1 = addOutput(FIS1,[ -  1 1],'名称''U');

添加均匀分布不变功能到输出。在MF名代表负大NB负中NMž积极的媒介下午),和积极的大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 ==ž&DELE == Z => U = Z”;...“E == P&DELE == Z => U = PM”;...“E == N'DELE == P => U = Z”;...“E ==ž&DELE == P => U = PM”;...“E == P&DELE == P => U = PB”...]。FIS1 = addRule(FIS1,规则);

绘制控制表面。

图gensurf(FIS1)标题(“类型1 FIS的控制面”

构建2型FIS

转换类型1 FIS,FIS1到类型2 FIS。

FIS2 = convertToType2(FIS1);

类型2关野系统,FIS2,使用类型2隶属函数的输入变量和类型1隶属函数的输出变量。

用于将输入的MF定义为在[1]中定义的不确定性(FOU)的足迹。要做到这一点,每个MF设置下MF缩放因子。对于这个例子,设定的下MF滞后值0

scale = [0.2 0.9 0.2;0.3 0.9 0.3];对于I = 1:长度(fis2.Inputs)对于J = 1:长度(fis2.Inputs(ⅰ).MembershipFunctions)fis2.Inputs(ⅰ).MembershipFunctions(j)的.LowerLag = 0;fis2.Inputs(ⅰ).MembershipFunctions(j)的.LowerScale =规模(I,J);结束结束

积型2输入隶属函数。

图副区(1,2,1)plotmf(FIS2,“输入”,1)标题(“输入1”)副区(1,2,2)plotmf(FIS2,“输入”,2)标题(“输入2”

缶增加了额外的不确定性的FIS,并产生一个非线性控制表面。

图gensurf (fis2)标题(“类型2 FIS的控制面”

传统的PID控制器

此示例与下列常规PID控制器的模糊逻辑控制器的性能进行比较。

PID 小号 = ķ p + ķ 一世 小号 + ķ d 小号 τ F 小号 + 1

这里, ķ p 获得成正比, ķ 一世 是积分增益, ķ d 导数是增益,和 τ F 为滤波器时间常数的导数。

配置仿真

定义标称工厂模型。

C = 0.5;L = 0.5;T = 0.5;G = TF(C,[T 1],'Outputdelay',L);

生成常规PID控制器参数使用pidtune

pidController = pidtune (G,“pidf”);

在本例中,引用( [R 是一个阶跃信号和 Ť [R = 0 ,这导致 C Ë = 1 如下。

C Ë = 1 [R Ť [R - ÿ Ť [R = 1 1 - 0 = 1。

Ce = 1;

要配置模拟,使用下面的标称控制器参数。

TAUC = 0.2;CD =分钟(T,L / 2)*铈;C0 = 1 /(C *的Ce *(TAUC + L / 2));C1 = MAX(T,L / 2)* C0;

要模拟控制器,请使用comparepidcontrollers万博1manbetx仿真软件模型。

模型='comparepidcontrollers';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 2型FLC 1.8662 0 5.129 1.282的

对于标称过程:

  • 两个类型1和类型2的模糊逻辑控制器优于常规的PID控制器在过冲的条款。

  • 传统的PID控制器,进行相对于更好到上升时间和积分绝对误差(IAE)的。

  • 在上升时间方面的类型1 FLC进行比类型2 FLC更好,稳定时间,和IAE。

模拟改进工艺

通过比标称工艺提高增益,延时,和时间常数的值修改工厂模型。

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.641 29.452 4.7486 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产生相同或更好的性能。

结论

总体而言,1型FLC产生用于标称植物相比于常规PID控制器优越的性能。类型2 FLC示出了对于修饰的植物更稳健的性能。

常规PID控制器的鲁棒性可以使用不同的方法,如预测或多个PID控制器配置得到改进。在另一方面,类型2 FLC的性能可通过使用不同的待改进:

  • 规则库

  • 规则数

  • FOU

例如,可以创建一个类型2 FLC定义FOU同时使用下MF缩放因子并降低MF滞后。

对于FIS2中,设置下MF规模和滞后值0.70.1,分别对所有输入隶属函数。

对于I = 1:长度(fis2.Inputs)对于J = 1:长度(fis2.Inputs(ⅰ).MembershipFunctions)fis2.Inputs(ⅰ).MembershipFunctions(j)的.LowerScale = 0.7;fis2.Inputs(ⅰ).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(型号1,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 1型FLC 1.4267 0 4.1023 1.1522 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 type-2 FLC引入了额外的计算延迟。

参考文献

[1]孟德尔,J.M.,不确定基于规则的模糊系统:简介和新方向,第二版,施普林格,2017年,第229-234,600-608。

本地函数

功能plotOutput(下,plotTitle)图图([0 20],[1 1])保持情节(out.yout {1} .Values)情节(out.yout {2} .Values)情节(out.yout {3} .Values)保持网格次要包含(“时间(秒)”)ylabel(“输出”)标题(plotTitle)图例([“参考”“PID”“类型1 FLC”“2型方法”),'位置'“最好”结束
功能T = stepResponseTable(下)S = stepinfo(out.yout {1} .Values.Data,out.yout {1} .Values.Time);stepResponseInfo(1).RiseTime = s.RiseTime;stepResponseInfo(1).Overshoot = 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(端); 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 FLC”“2型方法”]);t.Properties.VariableNames {1} =上升时间(秒);t.Properties.VariableNames {2} = [t.Properties.VariableNames {2}“(%)”]。t.Properties.VariableNames {3} =“稳定时间(秒)”;t.Properties.VariableNames {4} =“绝对误差积分”;结束

也可以看看

|

相关话题