Ім'я файлу: МУ_ЛР_СТА_Fuzzy_2_ua.docx
Розширення: docx
Розмір: 306кб.
Дата: 22.11.2023
скачати

6. СТВОРЕННЯ СИСТЕМИ УПРАВЛІННЯ З FUZZY-РЕГУЛЯТОРОМ
6.1 Нечітка логіка в регуляторах

Нечітке управління (управління на основі методів теорії нечітких множин) [4 – 6] використовується при недостатньому знанні об'єкта управління, але наявності досвіду управління ним, у нелінійних системах, ідентифікація яких занадто трудомістка, а також у випадках, коли за умовою завдання необхідно використовувати знання експерта. Прикладом може бути доменна піч або колона ректифікації, для яких вперше був створений нечіткий регулятор, математична модель яких містить багато емпіричних коефіцієнтів, що змінюються в широкому діапазоні і викликають великі труднощі при ідентифікації [4]. У той же час кваліфікований оператор досить добре керує такими об'єктами, користуючись показаннями приладів та накопиченим досвідом.

ПІД-регулятори з нечіткою логікою в даний час використовуються в комерційних системах для наведення телекамер під час трансляції спортивних подій, в системах кондиціювання повітря, при керуванні автомобільними двигунами. Як приклад застосування нечіткої логіки в управлінні авіаційними двигунами можна навести двигуни JetCat, в яких останнім часом застосовуються блоки керування, засновані на нечіткій логіці.

Оскільки інформація, отримана від оператора, виражена словесно, для її використання в ПІД-регуляторах застосовують лінгвістичні змінні та апарат теорії нечітких множин, розроблений Л. Заде в 1965 році [7]. Основна ідея цієї теорії полягає у наступному. Якщо в теорії чітких множин певний елемент (наприклад, температура 50 град.) може належати множині (наприклад, множині "температура гарячої води Тгор " або не належати йому, то в теорії нечітких множин вводиться поняття функції приналежності, яка характеризує ступінь приналежності елемента При цьому говорять, наприклад, температура 50 градусів належить безлічі Тгор зі ступенем приналежності 0,264. не є математично суворою, оскільки існуюча теорія нечітких множин не оперує поняттям ймовірності.

В 1974 Мамдані [9] показав можливість застосування ідей нечіткої логіки для побудови системи управління динамічним об'єктом, а роком пізніше вийшла публікація [10], в якій описувався нечіткий ПІ-регулятор і його застосування для управління парогенератором. З того часу сфера застосування нечітких регуляторів постійно розширюється, збільшується різноманітність їх структур та виконуваних функцій.

Нечітка логіка в ПІД-регуляторах використовується переважно двома шляхами: для побудови самого регулятора та для організації підстроювання коефіцієнтів ПІД-регулятора (рисунки 16, 17). Обидва шляхи можуть використовуватися в ПІД-контролері одночасно. Далі ми будемо використовувати регулятор на основі лише нечіткої логіки.



Рисунок 16 – Структура нечіткого регулятора
Принципи побудови нечіткого регулятора

Для застосування методів нечіткої логіки насамперед необхідно перетворити звичайні чіткі змінні на нечіткі. Процес такого перетворення називається фазифікацією (від англійської "fuzzy" - "нечіткий"). Він ілюструється на рисунку 17.



Рисунок 17 – Розподіл області зміни змінної e на множини NL, NM, NS тощо. з функціями приналежності μ(e) трикутної форми
Діапазон зміни змінної e розбивається на множини (підмножини) NL, NM, NS, Z, PS, PM, PL, у межах кожного з яких будується функція належності змінної e кожному з множин. На рисунку 17 функції приналежності мають трикутну (найпоширенішу) форму, хоча у випадку можуть бути будь-якими, з сенсу розв'язуваного завдання [6]. Кількість множин може бути довільним.

Для нечітких множин існує загальноприйнята система позначень: N - негативний ( Negative ); Z - нульовий ( Zero ); P - позитивний ( Positive ); до цих позначень додають літери S (малий, Small ), М (середній, Medium ), L (великий, Large ). Наприклад, NL - негативний великий; NM - негативний середній ( NegativeMedium ); PL - позитивний великий. Кількість таких змінних (термів) може бути будь-яким, проте зі збільшенням їх кількості суттєво зростають вимоги до досвіду експерта, який має сформулювати правила для всіх комбінацій вхідних змінних.

Якщо величина помилки e на вході нечіткого регулятора (рисунок 16) дорівнює e1 (рисунок 17), то відповідне значення нечіткої змінної дорівнюватиме PS зі ступенем приналежності підмножині PS , що дорівнює μ (e1) = 0,82, або дорівнює PM зі ступенем приналежності (e1) = 0,18. Ступінь належності помилки e1 іншим множинам ( Z, PL, NS та ін) дорівнює нулю. Таким чином, величина помилки e1 виявилася перетвореною на нечіткі змінні.

Для виконання функції регулювання над нечіткими змінними повинні бути виконані операції, побудовані на підставі висловлювань оператора, сформульованих у вигляді нечітких правил. Сукупність нечітких правил і нечітких змінних використовується здійснення нечіткого логічного висновку, результатом якого є вплив на об'єкт управління (рисунок 16).

Нечіткий висновок виконується в такий спосіб. Припустимо, що область зміни помилки e розділена на множини N, Z, P , область зміни керуючого впливу – на множини NL, NM, Z, PM, PL і що за допомогою експерта вдалося сформулювати наступні правила роботи регулятора [11]:

Правило 1: якщо e = N та de/dt = P , то u = Z

Правило 2: якщо e = N та de/dt = Z , то u = NM

Правило 3: якщо e = N та de/dt = N , то u = NL

Правило 4: якщо e = Z та de/dt = P , то u = PM

Правило 5: якщо e = Z та de/dt = Z , то u = Z e

Правило 6: якщо e = Z та de/dt = N , то u = NM

Правило 7: якщо e = P та de/dt = P , то u = PL =

Правило 8: якщо e = P та de/dt = Z , то u = PM Z

Правило 9: якщо e = P та de/dt = N , то u = Z .

Для обчислення результатів дії правил необхідно використовувати логічні операції перетину (І), що показує виконання правил одночасно, та об'єднання (АБО), що показує виконання хоча б одного з правил. Таким чином, обчислюючи результат кожного з правил, а потім їхній сукупний результат, ми отримуємо результат нечіткого висновку за всіма правилами.

Для знаходження результату перетину множин застосовується функція приналежності, наприклад, N і P (див. Правило 1) знаходиться як [6]:

,

тобто. кожне значення функції приналежності перетину множин дорівнює найменшому значенню з двох, що стоять у круглих дужках. Функція приналежності для об'єднання (логічна операція АБО) тієї ж множини має вигляд [6]:



Функції приналежності, отримані при перетині або об'єднанні множин, можуть бути визначені різними способами, залежно від сенсу завдання, що розв'язується. У [6] наводиться 10 різних визначень функції приналежності для перетину множин, але не сказано, яке їх потрібно вибрати для вирішення конкретної задачі. Використовують, зокрема, більш зрозумілу операцію знаходження функцій приналежності у разі перетину та об'єднання множин, що має аналогію з правилами множення та складання ймовірностей :





Однак застосування перших двох способів знаходження функції приналежності зазвичай краще, т.к. при цьому зберігається більшість правил, розроблених для звичайних множин [5].

Функції приналежності кожного з множин NL, NM, Z, PM, PL, які входять у нечітку змінну в правилах, виходять у вигляді [6]:

,

,





Тут кожне з 9 рівнянь відповідає одному з правил. Результуюча функція приналежності керуючого впливу, отримана після застосування всіх 9-ти правил, знаходиться як поєднання функцій належності всіх правил:

.

Тепер, коли отримана результуюча функція приналежності керуючого впливу u виникає питання, яке конкретно значення керуючого впливу потрібно вибрати. Якщо використовувати ймовірну інтерпретацію теорії нечітких множин, то стає зрозуміло, що таке значення можна отримати за аналогією з математичним очікуванням керуючого впливу у вигляді:



Такий спосіб дефазифікації є найпоширенішим, але не єдиним.

Для побудови нечітких регуляторів зазвичай використовують П , І, ПІ та ПД ПД+І, ПІ+Д та ПІД-закони регулювання [12]. Як вхідні сигнали для системи нечіткого виведення використовують сигнал помилки, збільшення помилки, квадрат помилки та інтеграл від помилки [12]. Реалізація нечіткого ПІД регулятора викликає проблеми, оскільки він повинен мати тривимірну таблицю правил відповідно до трьох доданків у рівнянні ПІД-регулятора, яку надзвичайно складно заповнити, користуючись відповідями експерта. Багато структур ПІД-подібних нечітких контролерів можна знайти у статті [12].
6.2. Структура регулятора з нечітким логічним висновком
Досить часто, особливо в нейромережевих та фазі-регуляторах, використовують рівняння ПІД-регулятора у вигляді залежності збільшення керуючої величини від помилки регулювання та її похідних (без інтегрального члена). Таке уявлення зручне, коли роль інтегратора виконує зовнішній пристрій, наприклад звичайний або кроковий двигун. Кут повороту його осі пропорційний значенню керуючого сигналу та часу. У фазі-регуляторах при формулюванні нечітких правил експерт може сформулювати залежність керуючої величини від величини похідної, але не може від величини інтеграла, оскільки інтеграл "запам'ятовує" всю передісторію зміни помилки, яку людина пам'ятати не може (рисунок 18).



Рисунок 18 – Інкрементна форма ПІД-регулятора [3]
Інкрементна форма регулятора зручна для застосування в мікроконтролерах, оскільки в ній основна частина обчислень виконується зі збільшенням, для представлення яких можна використовувати слово з малою кількістю двійкових розрядів.
Інкрементний нечіткий регулятор

Нечіткий регулятор (рисунок 19), як і розглянутий раніше ПІД-регулятор, працює у дискретної формі. Однак істотною відмінністю є вибір діапазону змін неузгодженості необхідної і фактичної частоти обертання, а також похідної цієї неузгодженості, величини яких підбиралися виходячи з перехідного процесу, керованого ПІД-регулятором. У нашому випадку діапазон неузгодженості E був прийнятий [-500; 500], а його похідний dE/dt - [-1000; 1000]. Діапазони задано в обмежувальних блоках Saturation. Введення обмежень за величинами помилки неузгодженості та її похідної необхідне роботи регулятора у сфері коректних значень.


Рисунок 19 – Нечіткий регулятор
Як видно з рисунка 19, на виході з нечіткого логічного контролера виходить сигнал похідної керуючого впливу, який інтегрується потім в дискретному інтеграторі з тим же часом дискретизації, що і в блоках Zero-OrderHold. Діапазон вихідних значень dU/dt приймемо рівним [-2000; 2000]. Усі наведені вище обмеження будуть використовуватися під час створення нечіткого регулятора, описаного далі. Для роботи з блоком Fuzzy Logic Controller (рисунок 20 зверху) необхідно у вікні імені моделі вказати посилання на файл, у якому було згенеровано нечіткий регулятор. На рисунку 21 наведено параметри блоку дискретного інтегратора.


Рисунок 20 – Налаштування блоку Fuzzy Logic Controller


Рисунок 21 – Налаштування блоку дискретного інтегратора
Створення бази правил для інкрементного нечіткого регулятора

Основні засади побудови бази правил цього регулятора:

1. Чим більше величина помилки і величина її похідної, тим вища швидкість наростання керуючого впливу.

2. Чим нижче величина помилки та її похідної, тим вище швидкість зменшення керуючого впливу.

Реалізація цих принципів наведено у таблиці 1.
Таблиця 1 - База правил нечіткого логічного висновку

dU/dt

Величина помилки, E




+

0

-

LP

MP

SP

Z

SN

MN

LN

Похідна помилки, dE

+

LP

LP

LP

LP

LP

MP

SP

Z

MP

LP

LP

MP

MP

Z

Z

SN

SP

LP

MP

MP

MP

Z

SN

MN

0

Z

LP

MP

SP

Z

SN

MN

LN

-

SN

MP

SP

Z

MN

MN

MN

LN

MN

SP

Z

Z

MN

MN

LN

LN

LN

Z

SN

MN

LN

LN

LN

LN



Реалізація нечіткого логічного висновку в MatLab/Simulink

Для використання функцій нечіткої логіки в MatLab необхідно встановити пакет FuzzyLogicToolbox. Для новачка в нечіткій логіці набагато зручніше буде користуватися графічним інтерфейсом, але, все ж таки, після короткого знайомства з ним краще вчитися писати безпосередньо в скриптових файлах MatLab, так як це заощадить багато часу в процесі налаштування регулятора. Наведені в попередньому пункті правила вже пройшли деяке відпрацювання, тому покажемо готовий код скрипта (додаток 2). Розберемо цей скрипт.

Знаком % у MatLab позначаються коментарі, тобто. ділянки коду, що ігноруються компілятором . Якщо рядок починається з %, то він весь ігнорується. Якщо ділянка тексту знаходиться % { між %} цими символами, вона так само ігнорується.

У додатку 2 перед кожною функцією є ділянка з коментарем, що відображає синтаксис цієї функції. Нечіткі змінні E , dE/dt, dU розділені на 7 термів і вказані в порядку від найбільшого негативного до позитивного [LN; MN; SN; Z; SP; MP; LP]. Нумерація термів усередині нечіткої змінної здійснюється зверху вниз у неявному вигляді за умовчанням.

Правила задаються як матриці, де рядкам відповідають номери правил. По стовпцях нумерація здійснюється в наступному порядку: спочатку вказуються вхідні змінні ( E, dE ), потім вихідні ( dU ), потім стовпець з ваговими коефіцієнтами для кожного правила (у нашому випадку скрізь 1) і в останньому стовпці вказується логічна дія між термами (для операції "І" ставиться 1, для операції "АБО" - 0).

Для спрощення складання набору правил можна складати їх в Excel або іншому аналогічному редакторі у вигляді таблиці, такої, наприклад, як таблиця 1, а потім, за допомогою невеликої функції перетворити рядкові значення відповідні їм чисельні. Приклад такого перетворення в одному з осередків Excel:

=ЯКІ(D19="LP";7;ЯКІ(D19="MP";6;ЯКІ(D19="SP";5;ЯКІ(D19="Z";4;ЯКІ(D19="SN";3) ;ЯКІ(D19="MN";2;ЯКІ(D19="LN";1;"помилка")))))))

Після цього просто створити посилання на комірки у таблиці, виконаній у вигляді матриці правил MatLab. Таким чином, при зміні правил у вихідній таблиці залишиться лише скопіювати їх чисельні еквіваленти як бази правил файл скрипта. Перетворена база правил у числовому еквіваленті представлена таблиці 2.
Таблиця 2 - База правил у числовому еквіваленті


dU/dt

Величіга помилки, E




+

0

-

LP

MP

SP

Z

SN

MN

LN

Похідна помилки, dE

+

LP

7

7

7

7

6

5

4

MP

7

7

6

6

4

4

3

SP

7

6

6

6

4

3

2

0

Z

7

6

5

4

3

2

1

-

SN

6

5

4

2

2

2

1

MN

5

4

4

2

2

1

1

LN

4

3

2

1

1

1

1


Зауважимо так само, що в Excel можна автоматично розфарбовувати комірки. Це доступно наступним шляхом (Office 2007): Головна ->Стилі ->Умовне форматування. Це дозволяє наочно уявити деяку поверхню правил.
Робота нечіткого регулятора та його покращення
Перехідний процес при ступінчастій зміні сигналу уставки, наведено рисунку 20.



Рисунок 20 – Перехідний процес із нечітким регулятором
Можна трохи покращити його роботу, якщо зробити так, щоб на значеннях помилки та її похідної біля нуля змінна dU змінювалася менше, ніж на високих. Для цього можна зробити вихідні терми змінної dU не симетричними, а сам діапазон збільшити, наприклад до [-10000; 10000], однак, такий спосіб призводить до коливання процесу. Як інший спосіб можна запропонувати додати додаткову нечітку змінну K, яка буде домножуватися на вихідну величину (рисунок 21).


Рисунок 21 – Модифікований нечіткий регулятор
При цьому змінимо діапазон першої вихідної змінної dU [-1000; 1000], а вихідний діапазон змінної К - [1; 10]. Правила для dU залишимо незмінними, а для Kбудемо виходити з того, що чим більше Е або dE/dt за модулем, тим вона більша. Нечітка змінна має 4 терма [ON; TW; TH; FO], які названі виходячи з перших двох букв назв англійських цифр від 1 до 4 (додаток 3). Правила для K наведені у таблиці 3.
Таблиця 3 - Правила виведення K


K

Величина помилки, E




+

0

-

LP

MP

SP

Z

SN

MN

LN

Похідна помилки, dE

+

LP

FO

FO

FO

FO

FO

FO

FO

MP

FO

TH

TH

TH

TH

TH

FO

SP

FO

TH

TW

TW

TW

TH

FO

0

Z

FO

TH

TW

ON

TW

TH

FO

-

SN

FO

TH

TW

TW

TW

TH

FO

MN

FO

TH

TH

TH

TH

TH

FO

LN

FO

FO

FO

FO

FO

FO

FO


За аналогією із зазначеними раніше правилами зробимо переведення з рядків у числа (таблиця 4):

=ЯКЩО(E6 = "ON"; 1; ЯКЩО(E6 = "TW";2;ЯКІ(E6 = "TH"; 3; ЯКЩО(E6 = "FO"; 4; "помилка")))))
Таблиця 4 – Числові відображення правил К

K

Величіна помилки, E




+

0

-

LP

MP

SP

Z

SN

MN

LN

Похідна помилки, dE

+

LP

4

4

4

4

4

4

4

MP

4

3

3

3

3

3

4

SP

4

3

2

2

2

3

4

0

Z

4

4

2

1

2

3

4

-

SN

4

3

2

2

2

3

4

MN

4

3

3

3

3

3

4

LN

4

4

4

4

4

4

4


Код скрипта наведено у додатку 3. Перехідний процес при цьому представлений на рисунку 22.


Рисунок 22 – Перехідний процес модифікованого нечіткого регулятора
ДОДАТОК 2

%% Створення нечіткої системи

%{

Syntax: a = newfis(fisName,fisType,andMethod,orMethod,impMethod,aggMethod,defuzzMethod)

a = newfis('tipper');

a = addvar(a, 'input', 'service', [010]);

a = addmf(a,'input',1,'poor','gaussmf',[1.5 0]);

a = addmf(a,'input',1,'good','gaussmf',[1.5 5]);

a = addmf(a,'input',1,'excellent','gaussmf',[1.5 10]);

writefis(a,'my_file')

%}

fMGTE = newfis('fuzzy_MGTE');

%% Створення нечітких логічних змінних

%{

Syntax: a = addvar(a,'varType','varName',varBounds)

a = addmf(a,'varType',varIndex,'mfName','mfType',mfParams)

%}

E = 500;

% Нечітка логічна змінна E

fMGTE = addvar(fMGTE, 'input', 'E', [-EE]);

fMGTE = addmf (fMGTE, 'input', 1, 'LN', 'trimf', [-E -E -E * 0.66]);

fMGTE = addmf (fMGTE, 'input', 1, 'MN', 'trimf', [-E -E * 0.66 -E * 0.33]);

fMGTE = addmf (fMGTE, 'input', 1, 'SN', 'trimf', [-E * 0.66 -E * 0.33 0]);

fMGTE = addmf (fMGTE, 'input', 1, 'Z', 'trimf', [-E * 0.33 0 E * 0.33]);

fMGTE = addmf (fMGTE, 'input', 1, 'SP', 'trimf', [0 E * 0.33 E * 0.66]);

fMGTE = addmf (fMGTE, 'input', 1, 'MP', 'trimf', [E * 0.33 E * 0.66 E]);

fMGTE = addmf (fMGTE, "input", 1, "LP", "trimf", [E * 0.66 EE]);

dE = 1000;

% Нечітка логічна змінна dE/dt

fMGTE = addvar(fMGTE,'input', 'dE/dt', [-dEdE]);

fMGTE = addmf(fMGTE,'input',2, 'LN', 'trimf', [-dE -dE -dE*0.66]);

fMGTE = addmf(fMGTE,'input',2, 'MN', 'trimf', [-dE -dE*0.66 -dE*0.33]);

fMGTE = addmf (fMGTE,'input',2, 'SN', 'trimf', [-dE*0.66 -dE*0.33 0]);

fMGTE = addmf (fMGTE,'input',2, 'Z', 'trimf', [-dE*0.33 0 dE*0.33]);

fMGTE = addmf (fMGTE,'input',2, 'SP', 'trimf', [0 dE*0.33 dE*0.66]);

fMGTE = addmf (fMGTE,'input',2, 'MP', 'trimf', [dE*0.33 dE*0.66 dE]);

fMGTE = addmf (fMGTE,'input',2, 'LP', 'trimf', [dE*0.66 dEdE]);

dU = 1000; %од/с

% Нечітка логічна змінна dU

fMGTE = addvar(fMGTE,'output', 'dU', [-dUdU]);

fMGTE = addmf(fMGTE,'output', 1, 'LN', 'trimf', [-dU -dU -dU*0.66]); % 1

fMGTE = addmf(fMGTE,'output', 1, 'MN', 'trimf', [-dU -dU*0.66 -dU*0.33]); %2

fMGTE = addmf(fMGTE,'output', 1, 'SN', 'trimf', [-dU*0.66 -dU*0.33 0]); % 3

fMGTE = addmf(fMGTE,'output', 1, 'Z', 'trimf', [-dU*0.33 0 dU*0.33]); % 4

fMGTE = addmf(fMGTE,'output',1,'SP','trimf', [0 dU*0.33 dU*0.66]); % 5

fMGTE = addmf(fMGTE,'output', 1, 'MP', 'trimf', [dU*0.33 dU*0.66 dU]); % 6

fMGTE = addmf(fMGTE, 'output', 1, 'LP', 'trimf', [dU*0.66 dUdU]); % 7

%% Створення бази правил

%{

Syntax: a = addrule(a,ruleList)

Створіть fuzzy inference system. Для цього прикладу, натисніть на tipper FIS і чіткі існуючі правила для FIS.

a = readfis('tipper');

a.rule=[];

Create the rule list.

rule1 = [1 1 1 1 1];

rule2 = [1 2 2 1 1];

ruleList = [rule1; rule2];

Add the rules list to the FIS.

a = addrule (a, ruleList);

Verify that the rules були added.

showrule(a)

ans =

1. If (service is poor) and (food is rancid) then (tip is cheap) (1)

2. If (service is poor) and (food is delicious) then (tip is average) (1)

%}

% E dEdU w and №

ruleList = [7 7 7 1 1; % 1

7 6 7 1 1; %2

7 5 7 1 1; % 3

7 4 7 1 1; % 4

7 3 6 1 1; % 5

7 2 5 1 1; % 6

7 1 4 1 1; % 7

6 7 7 1 1; % 8

6 6 7 1 1; % 9

6 5 6 1 1; % 10

6 4 6 1 1; % 11

6 3 5 1 1; % 12

6 2 4 1 1; % 13

6 1 3 1 1; % 14

5 7 7 1 1; % 15

5 6 6 1 1; % 16

5 5 6 1 1; % 17

5 4 5 1 1; % 18

5 3 4 1 1; % 19

5 2 4 1 1; % 20

5 1 2 1 1; % 21

4 7 7 1 1; % 22

4 6 6 1 1; % 23

4 5 6 1 1; % 24

4 4 4 1 1; % 25

4 3 2 1 1; % 26

4 2 2 1 1; % 27

4 1 1 1 1; % 28

3 7 6 1 1; % 29

3 6 4 1 1; % 30

3 5 4 1 1; % 31

3 4 3 1 1; % 32

3 3 2 1 1; % 33

3 2 2 1 1; % 34

3 1 1 1 1; % 35

2 7 5 1 1; % 36

2 6 4 1 1; % 37

2 5 3 1 1; % 38

2 4 2 1 1; % 39

2 3 2 1 1; % 40

2 2 1 1 1; % 41

2 1 1 1 1; % 42

1 7 4 1 1; % 43

1 6 3 1 1; % 44

1 5 2 1 1; % 45

1 4 1 1 1; % 46

1 3 1 1 1; % 47

1 2 1 1 1; % 48

1 1 1 1 1]; % 49

fMGTE = addrule(fMGTE, ruleList);

%% Запис нечіткою системи в файл

%{

Syntax:

writefis(fismat)

writefis(fismat, 'filename')

writefis(fismat, 'filename', 'dialog')

%}

writefis(fMGTE,'fuzzy_MGTE')

ДОДАТОК3

%% Створення нечіткої системи

%{

Syntax: a = newfis(fisName,fisType,andMethod,orMethod,impMethod,aggMethod,defuzzMethod)

a = newfis('tipper');

a = addvar(a, 'input', 'service', [010]);

a = addmf(a,'input',1,'poor','gaussmf',[1.5 0]);

a = addmf(a,'input',1,'good','gaussmf',[1.5 5]);

a = addmf(a,'input',1,'excellent','gaussmf',[1.5 10]);

writefis(a,'my_file')

%}

fMGTE = newfis('fuzzy_MGTE');

%% Створення нечітких логічних змінних

%{

Syntax: a = addvar(a,'varType','varName',varBounds)

a = addmf(a,'varType',varIndex,'mfName','mfType',mfParams)

%}

E = 500;

% Нечітка логічна змінна E

fMGTE = addvar(fMGTE, 'input', 'E', [-EE]);

fMGTE = addmf (fMGTE, 'input', 1, 'LN', 'trimf', [-E -E -E * 0.66]);

fMGTE = addmf (fMGTE, 'input', 1, 'MN', 'trimf', [-E -E * 0.66 -E * 0.33]);

fMGTE = addmf (fMGTE, 'input', 1, 'SN', 'trimf', [-E * 0.66 -E * 0.33 0]);

fMGTE = addmf (fMGTE, 'input', 1, 'Z', 'trimf', [-E * 0.33 0 E * 0.33]);

fMGTE = addmf (fMGTE, 'input', 1, 'SP', 'trimf', [0 E * 0.33 E * 0.66]);

fMGTE = addmf (fMGTE, 'input', 1, 'MP', 'trimf', [E * 0.33 E * 0.66 E]);

fMGTE = addmf (fMGTE, "input", 1, "LP", "trimf", [E * 0.66 EE]);

dE = 1000;

% Нечітка логічна змінна dE/dt

fMGTE = addvar(fMGTE, 'input', 'dE/dt', [-dEdE]);

fMGTE = addmf(fMGTE, 'input', 2, 'LN', 'trimf', [-dE -dE -dE*0.66]);

fMGTE = addmf(fMGTE, 'input', 2, 'MN', 'trimf', [-dE -dE*0.66 -dE*0.33]);

fMGTE = addmf (fMGTE, 'input', 2, 'SN', 'trimf', [-dE*0.66 -dE*0.33 0]);

fMGTE = addmf (fMGTE, 'input', 2, 'Z', 'trimf', [-dE*0.33 0 dE*0.33]);

fMGTE = addmf (fMGTE, 'input', 2, 'SP', 'trimf', [0 dE*0.33 dE*0.66]);

fMGTE = addmf (fMGTE, 'input', 2, 'MP', 'trimf', [dE*0.33 dE*0.66 dE]);

fMGTE = addmf (fMGTE, 'input', 2, 'LP', 'trimf', [dE*0.66 dEdE]);

dU = 1000; %од/с

% Нечітка логічна змінна dU

fMGTE = addvar(fMGTE, 'output', 'dU', [-dUdU]);

fMGTE = addmf(fMGTE, 'output', 1, 'LN', 'trimf', [-dU -dU -dU*0.66]); % 1

fMGTE = addmf(fMGTE, 'output', 1, 'MN', 'trimf', [-dU -dU*0.66 -dU*0.33]); %2

fMGTE = addmf(fMGTE, 'output', 1, 'SN', 'trimf', [-dU*0.66 -dU*0.33 0]); % 3

fMGTE = addmf(fMGTE, 'output', 1, 'Z', 'trimf', [-dU*0.33 0 dU*0.33]); % 4

fMGTE = addmf(fMGTE, 'output',1,'SP','trimf', [0 dU*0.33 dU*0.66]); % 5

fMGTE = addmf(fMGTE, 'output', 1, 'MP', 'trimf', [dU*0.33 dU*0.66 dU]); % 6

fMGTE = addmf(fMGTE, 'output', 1, 'LP', 'trimf', [dU*0.66 dUdU]); % 7

K = 10;

% Нечітка логічна змінна K

fMGTE = addvar(fMGTE,'output','K', [1 K]);

fMGTE = addmf(fMGTE,'output',2,'ON','trimf',[1 1 1*(K-1)/4]); % 1

fMGTE = addmf(fMGTE,'output',2,'TW','trimf',[1 1*(K-1)/4 2*(K-1)/4]); %2

fMGTE = addmf(fMGTE,'output',2,'TH','trimf',[1*(K-1)/4 2*(K-1)/4 3*(K-1)/4]); % 3

fMGTE = addmf (fMGTE, 'output',2,'FO','trimf',[2*(K-1)/4 3*(K-1)/4 4*(K-1)/4]) ; % 4

%% Створення бази правил

%{

Syntax: a = addrule(a,ruleList)

Створіть fuzzy inference system. Для цього прикладу, натисніть на tipper FIS і чіткі існуючі правила для FIS.

a = readfis('tipper');

a.rule=[];

Create the rule list.

rule1 = [1 1 1 1 1];

rule2 = [1 2 2 1 1];

ruleList = [rule1; rule2];

Add the rules list to the FIS.

a = addrule (a, ruleList);

Verify that the rules були added.

showrule(a)

ans =

1. If (service is poor) and (food is rancid) then (tip is cheap) (1)

2. If (service is poor) and (food is delicious) then (tip is average) (1)

%}

% E dEdUК w and №

ruleList = [7 7 7 4 1 1; % 1

7 6 7 4 1 1; %2

7 5 7 4 1 1; % 3

7 4 7 4 1 1; % 4

7 3 6 4 1 1; % 5

7 2 5 4 1 1; % 6

7 1 4 4 1 1; % 7

6 7 7 4 1 1; % 8

6 6 7 3 1 1; % 9

6 5 6 3 1 1; % 10

6 4 6 3 1 1; % 11

6 3 5 3 1 1; % 12

6 2 4 3 1 1; % 13

6 1 3 4 1 1; % 14

5 7 7 4 1 1; % 15

5 6 6 3 1 1; % 16

5 5 6 2 1 1; % 17

5 4 5 2 1 1; % 18

5 3 4 2 1 1; % 19

5 2 4 3 1 1; % 20

5 1 2 4 1 1; % 21

4 7 7 4 1 1; % 22

4 6 6 3 1 1; % 23

4 5 6 2 1 1; % 24

4 4 4 1 1 1; % 25

4 3 2 2 1 1; % 26

4 2 2 3 1 1; % 27

4 1 1 4 1 1; % 28

3 7 6 4 1 1; % 29

3 6 4 3 1 1; % 30

3 5 4 2 1 1; % 31

3 4 3 2 1 1; % 32

3 3 2 2 1 1; % 33

3 2 2 3 1 1; % 34

3 1 1 4 1 1; % 35

2 7 5 4 1 1; % 36

2 6 4 3 1 1; % 37

2 5 3 3 1 1; % 38

2 4 2 3 1 1; % 39

2 3 2 3 1 1; % 40

2 2 1 3 1 1; % 41

2 1 1 4 1 1; % 42

1 7 4 4 1 1; % 43

1 6 3 4 1 1; % 44

1 5 2 4 1 1; % 45

1 4 1 4 1 1; % 46

1 3 1 4 1 1; % 47

1 2 1 4 1 1; % 48

1 1 1 4 1 1]; % 49

fMGTE = addrule(fMGTE, ruleList);

%% Запис нечіткої системи до файлу

%{

Syntax:

writefis(fismat)

writefis(fismat, 'filename')

writefis(fismat, 'filename', 'dialog')

%}

writefis(fMGTE,'fuzzy_MGTE')
скачати

© Усі права захищені
написати до нас