Нечеткое управление ПИДом с Типом 2 FIS

Этот пример сравнивает тип 2 нечеткий ПИД-регулятор и с типом 1 нечеткий ПИД-регулятор и с обычным ПИД-регулятором. Этот пример адаптируется от [1].

Нечеткое управление ПИДом

Этот пример использует следующую структуру контроллера нечеткой логики (FLC) как описано в [1]. Выход контроллера (u) найден с помощью ошибки (e) и производная ошибки (e˙). Используя масштабные коэффициенты Ce и Cd, входные параметры e и e˙ нормированы к E и ΔE, соответственно. Нормированные области значений для обоих входных параметров находятся в области значений [-1,1]. Контроллер нечеткой логики также производит нормированный выход в области значений [-1,1]. Дополнительные масштабные коэффициенты C0 и C1 сопоставьте контроллер выход нечеткой логики U в u.

Этот пример использует задержанную систему первого порядка G(s) как модель объекта управления.

G(s)=Ce-LsTs+1

Здесь, C, L, и T усиление, задержка и постоянная времени, соответственно.

Масштабные коэффициенты Cd, C0, и C1 определяются следующим образом, где τc постоянная времени с обратной связью.

Cd=min(T,L2)×CeC0=1C×Ce(τc+L2)C1=max(T,L2)×C0

Входной масштабный коэффициентCe :

Ce1r(tr)-y(tr)

где r(tr) и y(tr) ссылка и системные выходные значения во время t=tr. Эти значения соответствуют номинальной рабочей точке системы.

Этот пример сравнивает эффективность типа 1 и типа 2 Sugeno нечеткие системы вывода (ФИСС) с помощью блока Fuzzy Logic Controller Simulink®.

Создайте Тип 1 FIS

Создайте тип 1 FIS использование sugfis.

fis1 = sugfis;

Добавьте входные переменные в FIS.

fis1 = addInput(fis1,[-1 1],'Name','E');
fis1 = addInput(fis1,[-1 1],'Name','delE');

Добавьте три равномерно распределенных перекрывающихся треугольных функции принадлежности (MFS) в каждый вход. Имена MF обозначают отрицательный (N), нуль (Z), и положительный (P).

fis1 = addMF(fis1,'E','trimf',[-2 -1 0],'Name','N');
fis1 = addMF(fis1,'E','trimf',[-1 0 1],'Name','Z');
fis1 = addMF(fis1,'E','trimf',[0 1 2],'Name','P');
fis1 = addMF(fis1,'delE','trimf',[-2 -1 0],'Name','N');
fis1 = addMF(fis1,'delE','trimf',[-1 0 1],'Name','Z');
fis1 = addMF(fis1,'delE','trimf',[0 1 2],'Name','P');

Постройте входные функции принадлежности.

figure
subplot(1,2,1)
plotmf(fis1,'input',1)
title('Input 1')
subplot(1,2,2)
plotmf(fis1,'input',2)
title('Input 2')

Figure contains 2 axes objects. Axes object 1 with title Input 1 contains 6 objects of type line, text. Axes object 2 with title Input 2 contains 6 objects of type line, text.

Добавьте выходную переменную в FIS.

fis1 = addOutput(fis1,[-1 1],'Name','U');

Добавьте равномерно распределенный constant функции к выходу. Имена MF обозначают большой отрицательный (NB), отрицательный носитель (NM), нуль (Z), положительный носитель (PM), и положительный большой (PB).

fis1 = addMF(fis1,'U','constant',-1,'Name','NB');
fis1 = addMF(fis1,'U','constant',-0.5,'Name','NM');
fis1 = addMF(fis1,'U','constant',0,'Name','Z');
fis1 = addMF(fis1,'U','constant',0.5,'Name','PM');
fis1 = addMF(fis1,'U','constant',1,'Name','PB');

Добавьте правила в FIS. Эти правила создают пропорциональную поверхность управления.

rules = [...
    "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,rules);

Постройте поверхность управления.

figure
gensurf(fis1)
title('Control surface of type-1 FIS')

Figure contains an axes object. The axes object with title Control surface of type-1 FIS contains an object of type surface.

Создайте Тип 2 FIS

Преобразуйте тип 1 FIS, fis1, к типу 2 FIS.

fis2 = convertToType2(fis1);

Тип 2 система Sugeno, fis2, функции принадлежности типа 2 использования для входных переменных и функции принадлежности типа 1 для выходных переменных.

Задайте место неопределенности (FOU) для входа MFs, как задано в [1]. Для этого установите более низкий масштабный коэффициент MF для каждого MF. В данном примере установите более низкие значения задержки MF к 0.

scale = [0.2 0.9 0.2;0.3 0.9 0.3];
for i = 1:length(fis2.Inputs)
    for j = 1:length(fis2.Inputs(i).MembershipFunctions)
        fis2.Inputs(i).MembershipFunctions(j).LowerLag = 0;
        fis2.Inputs(i).MembershipFunctions(j).LowerScale = scale(i,j);
    end
end

Постройте входные функции принадлежности типа 2.

figure
subplot(1,2,1)
plotmf(fis2,'input',1)
title('Input 1')
subplot(1,2,2)
plotmf(fis2,'input',2)
title('Input 2')

Figure contains 2 axes objects. Axes object 1 with title Input 1 contains 12 objects of type line, patch, text. These objects represent UpperMF, LowerMF, FOU. Axes object 2 with title Input 2 contains 12 objects of type line, patch, text. These objects represent UpperMF, LowerMF, FOU.

FOU добавляет дополнительную неопределенность в FIS и создает нелинейную поверхность управления.

figure
gensurf(fis2)
title('Control surface of type-2 FIS')

Figure contains an axes object. The axes object with title Control surface of type-2 FIS contains an object of type surface.

Обычный ПИД-регулятор

Этот пример сравнивает контроллер нечеткой логики эффективность с тем из следующего обычного ПИД-регулятора.

PID(s)=Kp+Kis+Kdsτfs+1

Здесь, Kp пропорциональная составляющая, Ki усиление интегратора, Kd производное усиление, и τf производная постоянная времени фильтра.

Конфигурируйте моделирование

Задайте номинальную модель объекта управления.

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

Сгенерируйте обычные параметры ПИД-регулятора с помощью pidtune.

pidController = pidtune(G,'pidf');

В этом примере, ссылка (r) сигнал шага и tr=0, который приводит к Ce=1 можно следующим образом.

Ce=1r(tr)-y(tr)=11-0=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;

Чтобы симулировать контроллеры, используйте comparepidcontrollers Модель Simulink.

model = 'comparepidcontrollers';
load_system(model)

Симулируйте номинальный процесс

Симулируйте модель в номинальных условиях работы.

out1 = sim(model);

Постройте переходной процесс системы для всех трех контроллеров.

plotTitle = ['Nominal: C=' num2str(C) ', L='  num2str(L) ', T=' num2str(T)];
plotOutput(out1,plotTitle)

Figure contains an axes object. The axes object with title Nominal: C=0.5, L=0.5, T=0.5 contains 4 objects of type line. These objects represent Reference, PID, Type-1 FLC, Type-2 FLC.

Получите характеристики переходного процесса системы для каждого контроллера. Здесь, время нарастания и время урегулирования находятся в секундах, перерегулирование является процентом окончательного значения, и абсолютная погрешность интегрирована по переходному процессу.

stepResponseTable(out1)
ans=3×4 table
                  Rise Time    Overshoot    Settling Time    Absolute Error
                  _________    _________    _____________    ______________

    PID            0.62412      11.234         4.5583              1.04    
    Type-1 FLC      1.4267           0         4.1023            1.1522    
    Type-2 FLC      1.8662           0          5.129             1.282    

Для номинального процесса:

  • И тип 1 и контроллеры нечеткой логики типа 2 превосходят обычный ПИД-регулятор по характеристикам в терминах перерегулирования.

  • Обычный ПИД-регулятор, выполняет лучше относительно времени нарастания и интеграла абсолютной погрешности (IAE).

  • Тип 1 FLC выполняет лучше, чем тип 2 FLC в терминах времени нарастания, времени урегулирования и IAE.

Симулируйте модифицированный процесс

Измените модель объекта управления путем увеличения усиления, задержки и значений постоянной времени по сравнению с номинальным процессом.

C = 0.85;
L = 0.6;
T = 0.6;
G = tf(C,[T 1],'Outputdelay',L);

Симулируйте модель с помощью обновленных параметров объекта.

out2 = sim(model);

Постройте переходной процесс системы для всех трех контроллеров.

plotTitle = ['Modified 1: C=' num2str(C) ',L='  num2str(L) ',T=' num2str(T)];
plotOutput(out2,plotTitle)

Figure contains an axes object. The axes object with title Modified 1: C=0.85,L=0.6,T=0.6 contains 4 objects of type line. These objects represent Reference, PID, Type-1 FLC, Type-2 FLC.

Получите характеристики переходного процесса системы для каждого контроллера.

stepResponseTable(out2)
ans=3×4 table
                  Rise Time    Overshoot    Settling Time    Absolute Error
                  _________    _________    _____________    ______________

    PID            0.38464      80.641         29.458            4.7486    
    Type-1 FLC     0.47262      24.877         4.6788            1.1137    
    Type-2 FLC     0.47262      22.787         3.4561             1.076    

Для этого модифицированного процесса:

  • Обычный ПИД-регулятор показывает значительное перерегулирование, большее время урегулирования, и выше IAE по сравнению с контроллерами нечеткой логики

  • Для всех критериев качества работы тип 2 FLC производит то же самое или наилучшее решение по сравнению с типом 1 FLC.

Заключение

В целом, тип 1 FLC производит наилучшее решение для номинального объекта по сравнению с обычным ПИД-регулятором. Тип 2 FLC показывает больше устойчивой эффективности для модифицированного объекта.

Робастность обычного ПИД-регулятора может быть улучшена с помощью различных методов, таких как предсказание или несколько настроек ПИД-регулятора. С другой стороны, производительность типа 2 FLC может улучшаться при помощи различного:

  • Основа правила

  • Количество правил

  • FOU

Например, можно создать тип 2 FLC, который задает FOU, использующий обоих более низкий масштабный коэффициент MF и более низкая задержка MF.

Для fis2, установите более низкую шкалу MF и значения задержки к 0.7 и 0.1, соответственно для всех входных функций принадлежности.

for i = 1:length(fis2.Inputs)
    for j = 1:length(fis2.Inputs(i).MembershipFunctions)
        fis2.Inputs(i).MembershipFunctions(j).LowerScale = 0.7;
        fis2.Inputs(i).MembershipFunctions(j).LowerLag = 0.1;
    end
end

Постройте обновленные функции принадлежности.

figure
subplot(1,2,1)
plotmf(fis2,'input',1)
title('Input 1')
subplot(1,2,2)
plotmf(fis2,'input',2)
title('Input 2')

Figure contains 2 axes objects. Axes object 1 with title Input 1 contains 12 objects of type line, patch, text. These objects represent UpperMF, LowerMF, FOU. Axes object 2 with title Input 2 contains 12 objects of type line, patch, text. These objects represent UpperMF, LowerMF, FOU.

Симулируйте модель с помощью номинального объекта и постройте переходные процессы для контроллеров.

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

out4 = sim(model);
close_system(model,0)
plotTitle = ['Nominal: C=' num2str(C) ', L='  num2str(L) ', T=' num2str(T)];
plotOutput(out4,plotTitle)

Figure contains an axes object. The axes object with title Nominal: C=0.5, L=0.5, T=0.5 contains 4 objects of type line. These objects represent Reference, PID, Type-1 FLC, Type-2 FLC.

Получите характеристики переходного процесса системы для каждого контроллера.

stepResponseTable(out4)
ans=3×4 table
                  Rise Time    Overshoot    Settling Time    Absolute Error
                  _________    _________    _____________    ______________

    PID            0.62412      11.234         4.5583              1.04    
    Type-1 FLC      1.4267           0         4.1023            1.1522    
    Type-2 FLC      1.2179           0         3.8746            1.1087    

В этом случае обновленный FOU типа 2 FLC улучшает время нарастания переходного процесса.

Однако более низкие значения задержки MF также увеличивают перерегулирование в случае модифицированного объекта.

C = 0.85;
L = 0.6;
T = 0.6;
G = tf(C,[T 1],'Outputdelay',L);

out5 = sim(model);
plotTitle = ['Nominal: C=' num2str(C) ', L='  num2str(L) ', T=' num2str(T)];
plotOutput(out5,plotTitle)

Figure contains an axes object. The axes object with title Nominal: C=0.85, L=0.6, T=0.6 contains 4 objects of type line. These objects represent Reference, PID, Type-1 FLC, Type-2 FLC.

t = stepResponseTable(out5)
t=3×4 table
                  Rise Time    Overshoot    Settling Time    Absolute Error
                  _________    _________    _____________    ______________

    PID            0.38464      80.641         29.458            4.7486    
    Type-1 FLC     0.47262      24.877         4.6788            1.1137    
    Type-2 FLC     0.47262      26.699         4.6812            1.1278    

Поэтому, чтобы получить желаемые характеристики переходного процесса, можно варьироваться более низкая шкала MF и изолировать значения, чтобы найти подходящую комбинацию.

Можно далее улучшиться, контроллеры выход нечеткой логики с помощью Mamdani вводят FIS, поскольку он также обеспечивает более низкую шкалу MF и параметры задержки для выходных функций принадлежности. Однако тип 2 Mamdani FLC вводит дополнительную вычислительную задержку из-за дорогого процесса сокращения типа.

Ссылки

[1] Мендель, J. M. Неопределенные Основанные на правилах Нечеткие Системы: Введение и Новые Направления, Второй Выпуск, Спрингер, 2017, стр 229-234, 600-608.

Локальные функции

function plotOutput(out,plotTitle)
figure
plot([0 20],[1 1])
hold on
plot(out.yout{1}.Values)
plot(out.yout{2}.Values)
plot(out.yout{3}.Values)
hold off
grid minor
xlabel('Time (sec)')
ylabel('Output')
title(plotTitle)
legend(["Reference","PID","Type-1 FLC","Type-2 FLC"],'Location',"best")
end
function t = stepResponseTable(out)
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(end);

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" "Type-2 FLC"]);
t.Properties.VariableNames{1} = 'Rise Time';
t.Properties.VariableNames{2} = t.Properties.VariableNames{2};
t.Properties.VariableNames{3} = 'Settling Time';
t.Properties.VariableNames{4} = 'Absolute Error';
end

Смотрите также

|

Похожие темы