exponenta event banner

Нечеткий контроль за PID с Типом 2 FIS

В этом примере сравнивается контроллер нечеткого PID типа 2 с контроллером нечеткого PID типа 1 и обычным контроллером PID. Этот пример адаптирован из [1].

Нечеткий контроль PID

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

В этом примере в качестве модели завода используется отложенная система G первого порядка.

G (s) = Ce-LsTs + 1

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

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

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

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

Ce≡1r (tr) -y (tr)

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

В этом примере сравниваются характеристики систем нечеткого вывода Sugeno (FIS) типа 1 и типа 2 с использованием блока Simulink ® контроллера нечеткой логики.

Строительство Type-1 FIS

Создание FIS типа 1 с помощью sugfis.

fis1 = sugfis;

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

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

Добавьте три равномерно распределенные перекрывающиеся треугольные функции членства (MF) к каждому входу. Названия 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. Axes 1 with title Input 1 contains 6 objects of type line, text. Axes 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. The axes with title Control surface of type-1 FIS contains an object of type surface.

Строительство Type-2 FIS

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

fis2 = convertToType2(fis1);

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

Определите степень неопределенности (FOU) для входных MF, как определено в [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. Axes 1 with title Input 1 contains 12 objects of type line, patch, text. These objects represent UpperMF, LowerMF, FOU. Axes 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. The axes with title Control surface of type-2 FIS contains an object of type surface.

Обычный PID-контроллер

Этот пример сравнивает производительность контроллера нечеткой логики с производительностью следующего обычного PID-контроллера.

PID (ы) = Kp + Kis + Kds + 1

Здесь Kp - пропорциональный коэффициент усиления, Ki - интеграторный коэффициент усиления, Kd - коэффициент усиления производной,

Настройка моделирования

Определите номинальную модель завода.

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

Формирование обычных параметров PID-контроллера с использованием 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);

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

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

Figure contains an axes. The axes 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 (sec)    Overshoot (%)    Settling Time (sec)    Integral of Absolute Error
                  _______________    _____________    ___________________    __________________________

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

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

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

  • Обычный PID-контроллер работает лучше в отношении времени нарастания и интеграла абсолютной ошибки (IAE).

  • FLC типа 1 работает лучше, чем FLC типа 2, с точки зрения времени подъема, времени отстоя и IAE.

Моделирование измененного процесса

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

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

Моделирование модели с использованием обновленных параметров завода.

out2 = sim(model);

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

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

Figure contains an axes. The axes 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 (sec)    Overshoot (%)    Settling Time (sec)    Integral of Absolute Error
                  _______________    _____________    ___________________    __________________________

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

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

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

  • Для всех показателей эффективности FLC типа 2 обеспечивает одинаковую или превосходную производительность по сравнению с FLC типа 1.

Заключение

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

Надежность обычного PID-контроллера может быть улучшена с использованием различных способов, таких как предсказание или множество конфигураций PID-контроллера. С другой стороны, производительность FLC типа 2 может быть улучшена путем использования другого:

  • База правил

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

  • FOU

Например, можно создать FLC типа 2, который определяет 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. Axes 1 with title Input 1 contains 12 objects of type line, patch, text. These objects represent UpperMF, LowerMF, FOU. Axes 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)
plotOutput(out4,['Nominal: C=' num2str(C) ', L='  num2str(L) ', T=' num2str(T)])

Figure contains an axes. The axes 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 (sec)    Overshoot (%)    Settling Time (sec)    Integral of Absolute Error
                  _______________    _____________    ___________________    __________________________

    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          

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

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

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

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

Figure contains an axes. The axes 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.

stepResponseTable(out5)
ans=3×4 table
                  Rise Time (sec)    Overshoot (%)    Settling Time (sec)    Integral of Absolute Error
                  _______________    _____________    ___________________    __________________________

    PID               0.38464           80.641              29.452                     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 и значения запаздывания, чтобы найти подходящую комбинацию.

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

Ссылки

[1] Мендель, Дж. М., Неопределенные основанные на правилах нечеткие системы: введение и новые направления, второе издание, Springer, 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 (sec)';
t.Properties.VariableNames{2} = [t.Properties.VariableNames{2} ' (%)'];
t.Properties.VariableNames{3} = 'Settling Time (sec)';
t.Properties.VariableNames{4} = 'Integral of Absolute Error';
end

См. также

|

Связанные темы