Материал: LR_HM14_2018

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

2. Моделювання нечіткої системи засобами інструментарію нечіткої логіки в середовищі MatLab

Fuzzy Logic Toolbox – це пакет прикладних програм, що входять до складу середовища MatLab. Він дозволяє створювати системи нечіткого логічного виведення і нечіткої класифікації в рамках середовища MatLab, з можливістю їх інтеграції в Simulink.

Побудова нечітких систем в діалоговому режимі за допомогою модуля Fuzzy

Модуль Fuzzy дозволяє будувати нечіткі системи двох типів – Мамдані і Сугено. У системах типу Мамдані база знань складається з правил вигляду “Якщо x1=низкий і x2=средний, то y=высокий”. У системах типу Сугено база знань складається з правил вигляду “Якщо x1=низкий і x2=средний, то y=a0+a1x1+a2x2". Таким чином, основна відмінність між системами Мамдані і Сугено полягає в різних способах завдання значень вихідний змінної в правилах, що складають базу знань. У системах типу Мамдані значення вихідний змінної задаються нечіткими термами, а в системах типу Сугено – як лінійна комбінація вхідних змінних.

Проектування систем типу Мамдані

Розглянемо основні етапи проектування систем типу Мамдані на прикладі створення системи нечіткого логічного виведення, що моделює залежність , , . Проектування системи нечіткого логічного виведення проводитимемо на основі графічного зображення вказаної залежності.

Для побудови тривимірного зображення функції в області , складемо наступну програму:

%Побудова графіка функції y=x1^2*sin(x2-1)

%в області x1є[-7,3] і x2є[-4.4,1.7].

n=15;

x1=-7:10/(n-1):3;

x2=-4.4:6.1/(n-1) :1.7;

y=zeros(n,n);

for j=1:n

у(j:)=x1.^2*sin(x2(j)-1);

end

surf(x1,x2,y);

xlabel('x1');

ylabel('x2');

zlabel('y');

title('Target');

В результаті виконання програми отримаємо графічне зображення, приведене на рис. 9. Проектування системи нечіткого логічного виведення, що відповідає приведеному графіку, полягає у виконанні наступної послідовності кроків.

Рис. 9. Еталонна поверхня.

Крок 1. Для завантаження основного fis-редактора надрукуємо слово fuzzy в командному рядку. Після цього відкриється нове графічне вікно, яке показане на рис. 10.

Рис. 10. Вікно редактора FIS-Editor.

Крок 2. Додамо другу вхідну змінну. Для цього в меню Edit вибираємо команду Add input.

Крок 3. Перейменуємо першу вхідну змінну. Для цього зробимо одне клацання лівою кнопкою миші на блоці input1, введемо нове позначення x1 в полі редагування імені поточної змінної і натиснемо <Enter>.

Крок 4. Перейменуємо другу вхідну змінну. Для цього зробимо одне клацання лівою кнопкою миші на блоці input2, введемо нове позначення x2 в полі редагування імені поточної змінної і натиснемо <Enter>.

Крок 5. Перейменуємо вихідну змінну. Для цього зробимо одне клацання лівою кнопкою миші на блоці output1, введемо нове позначення у в полі редагування імені поточної змінної і натиснемо <Enter>.

Крок 6. Задамо ім'я системи. Для цього в меню File вибираємо в підміню Export команду To disk і вводимо ім'я файлу, наприклад, first.

Крок 7. Перейдемо до редактору функцій приналежності. Для цього зробимо подвійне клацання лівою кнопкою миші на блоці x1.

Крок 8. Задамо діапазон зміни перемінній x1. Для цього надрукуємо -7 3 в полі Range (див. рис. 11) і натиснемо <Enter>.

Крок 9. Задамо функції приналежності змінної x1. Для лінгвістичної оцінки цієї змінної використаємо 3 терми з трикутними функціями приналежності. Для цього в меню Edit виберемо команду Add MFs... В результаті з'явитися діалогове вікно вибору типу і кількості функцій приналежності. За умовчанням це 3 терми з трикутними функціями приналежності. Тому просто натискаємо <Enter>.

Крок 10. Задамо найменування термів змінної x1. Для цього робимо одне клацання лівою кнопкою миші по графіку першої функції приналежності (див. рис. 11). Потім вводимо найменування терма, наприклад, Низький, в полі Name і натиснемо <Enter>. Потім робимо одне клацання лівою кнопкою миші по графіку другої функції приналежності і вводимо найменування терма, наприклад, Середній, в полі Name і натиснемо <Enter>. Ще раз робимо одне клацання лівою кнопкою миші по графіку третьої функції приналежності і вводимо найменування терму, наприклад, Високий, в полі Name і натиснемо <Enter>. В результаті отримаємо графічне вікно, зображене на рис. 11.

Рис. 11. Функції приналежності змінної x1.

Крок 11. Задамо функції приналежності змінної x2. Для лінгвістичної оцінки цієї змінної використаємо 5 термів з гаусовими функціями приналежності. Для цього активізуємо змінну x2 за допомогою клацання лівої кнопки миші на блоці x2. Задамо діапазон зміни змінній x2. Для цього надрукуємо -4.4 1.7 в полі Range (див. рис. 12) і натиснемо <Enter>. Потім в меню Edit виберемо команду Add MFs.... В діалоговому вікні, що з'явилося вибираємо тип функції приналежності gaussmf в полі MF type і 5 термів в полі Number of MFs. Після цього натискаємо <Enter>.

Рис 12. Функції приналежності змінної x2.

Крок 12. По аналогії з кроком 10 задамо наступні найменування термів змінної x2: Низький, Нижче середнього, Середній, Вище середнього, Високий. В результаті отримаємо графічне вікно, зображене на рис. 12.

Крок 13. Задамо функції приналежності для змінної у. Для лінгвістичної оцінки цієї змінної використовуватимемо 5 термів з трикутними функціями приналежності. Для цього активізуємо змінну у за допомогою клацання лівої кнопки миші на блоці у. Задамо діапазон зміни для перемінної у. Для цього надрукуємо -50 50 в полі Range (див. рис. 13) і натиснемо <Enter>. Потім у меню Edit виберемо команду Add MFs.... У діалоговому вікні, що з'явилося вибираємо 5 термів в полі Number of MFs. Після цього натискаємо <Enter>.

Крок 14. По аналогії з кроком 10 задамо наступні найменування термів змінної у: Низький, Нижче середнього, Середній, Вище середнього, Високий. В результаті отримаємо графічне вікно, зображене на Рис. 13.

Крок 15. Перейдемо в редактор бази знань RuleEditor. Для цього в меню Edit виберемо команду Edit rules....

Рис 13. Функції приналежності змінної у.

Крок 16. На основі візуального спостереження за графіком, зображеним на рис. 9, – сформулюємо наступні дев'ять правил:

  1. ЯКЩО x1=Средний, ТО y=Средний;

  2. ЯКЩО x1=Низкий і x2=Низкий, ТО y=Высокий;

  3. ЯКЩО x1=Низкий і x2=Высокий, ТО y=Высокий;

  4. ЯКЩО x1=Высокий і x2=Высокий, ТО y=Выше Середнього;

  5. ЯКЩО x1=Высокий і x2=Низкий, ТО y=Выше Середнього;

  6. ЯКЩО x1=Высокий і x2=Средний, ТО y=Средний;

  7. ЯКЩО x1=Низкий і x2=Средний, ТО y=Низкий;

  8. ЯКЩО x1=Высокий і x2=Выше  Середнього, ТО y=Средний;

  9. ЯКЩО x1=Высокий і x2=Ниже  Середнього, ТО y=Средний.

Для введення правила необхідно вибрати в меню відповідну комбінацію термів і натиснути кнопку Add rule. На рис. 14 зображено вікно редактора бази знань після введення всіх дев'яти правил. Число, приведене в дужках в кінці кожного правила є ваговим коефіцієнтом відповідного правила.

Рис 14. База знань в RuleEditor.

Крок 17. Збережемо створену систему. Для цього в меню File вибираємо в підміню Export команду To disk.

На рис. 15 приведено вікно візуалізації нечіткого логічного виведення. Це вікно активізується командою View rules... у меню View. В полі Input вказуються значення вхідних змінних, для яких виконується логічне виведення.

Рис 15. Візуалізація нечіткого логічного виведення в RuleViewer.

На рис. 16 наведено поверхню “входи-вихід” у відповідності з синтезованою нечіткою системою. Для виведення цього вікна необхідно використовувати команду View surface... меню View. Порівнюючи поверхні на рис. 9 і рис. 16 можна зробити висновок, що нечіткі правила досить добре описують складну нелінійну залежність.

Рис 16. Поверхня “входи-вихід” у вікні SurfaceViwer.

Проектування систем типу Сугено

Розглянемо основні етапи проектування систем типу Сугено на прикладі створення системи нечіткого логічного виводу, що моделює залежність , , (рис. 9). Моделювання цієї залежності здійснюватимемо за допомогою наступної бази знань:

  1. ЯКЩО x1=Средний, ТО y=0;

  2. ЯКЩО x1=Высокий і x2=Высокий, ТО y=2x1+2x2+1;

  3. ЯКЩО x1=Высокий і x2=Низкий, ТО y=4x1-x2;

  4. ЯКЩО x1=Низкий і x2=Средний, ТО y=8x1+2x2+8;

  5. ЯКЩО x1=Низкий і x2=Низкий, ТО y=50;

  6. ЯКЩО x1=Низкий і x2=Высокий, ТО y=50.

Проектування системи нечіткого логічного виведення типу Сугено полягає у виконанні наступної послідовності кроків.

Крок 1. Для завантаження основного fis-редактора надрукуємо слово fuzzy в командному рядку. Після цього відкриється нове графічне вікно, показане на рис. 10.

Крок 2. Виберемо тип системи. Для цього в меню File вибираємо в підміню New fis. команду Sugeno.

Крок 3. Додамо другу вхідну змінну. Для цього в меню Edit вибираємо команду Add input.

Крок 4. Перейменуємо першу вхідну змінну. Для цього зробимо одне клацання лівою кнопкою миші на блоці input1, введемо нове позначення x1 в полі редагування імені поточної змінної і натиснемо <Enter>.

Крок 5. Перейменуємо другу вхідну змінну. Для цього зробимо одне клацання лівою кнопкою миші на блоці input2, введемо нове позначення x2 в полі редагування імені поточної змінної і натиснемо <Enter>.

Крок 6. Перейменуємо вихідну змінну. Для цього зробимо одне клацання лівою кнопкою миші на блоці output1, введемо нове позначення у в полі редагування імені поточної змінної і натиснемо <Enter>.

Крок 7. Задамо ім'я системи. Для цього в меню File вибираємо в підміню Export команду To disk і вводимо ім'я файлу, наприклад, FirstSugeno.

Крок 8. Перейдемо в редактор функцій приналежності. Для цього зробимо подвійне клацання лівою кнопкою миші на блоці x1.

Крок 9. Задамо діапазон зміни перемінної x1. Для цього надрукуємо -7 3 в полі Range (див. рис. 17) і натиснемо <Enter>.

Рис 17. Функції приналежності змінної x1.

Крок 10. Задамо функції приналежності змінної x1. Для лінгвістичної оцінки цієї змінної використаємо, 3 терми з трикутними функціями приналежності, що встановлене за умовчанням. Задамо найменування термів змінної x1. Для цього робимо одне клацання лівою кнопкою миші по графіку першої функції приналежності (див. рис. 17). Потім надрукуємо найменування терму Низький в полі Name. Потім робимо одне клацання лівою кнопкою миші по графіку другої функції приналежності і вводимо найменування терму Середній в полі Name. Ще раз робимо одне клацання лівою кнопкою миші по графіку третьої функції приналежності і вводимо найменування терму Високий в полі Name і натиснемо <Enter>. В результаті отримаємо графічне вікно, що зображене на рис. 17.

Крок 11. Задамо функції приналежності змінної x2. Для лінгвістичної оцінки цієї змінної використовуватимемо 3 терми з трикутними функціями приналежності, що встановлене за умовчанням. Для цього активізуємо змінну x2 за допомогою клацання лівої кнопки миші на блоці x2. Задамо діапазон зміни перемінної x2. Для цього надрукуємо -4.4 1.7 в полі Range (див. рис. 18) і натиснемо <Enter>. По аналогії з попереднім кроком задамо наступні найменування термів змінної x2: Низький, Середній, Високий. В результаті отримаємо графічне вікно, зображене на рис. 18.

Рис 18. Функції приналежності змінної x2.

Крок 12. Задамо лінійні залежності між входами і виходом, що наведені в базі знань. Для цього активізуємо змінну у за допомогою клацання лівої кнопки миші на блоці у. У правому верхньому куті з'явиться позначення трьох функцій приналежності, кожна з яких відповідає одній лінійній залежності між входами і виходом. У базі знань, приведеній вище вказано п'ять різних залежностей: y=50; y=4x1-x2; y=2x1+2x2+1; y=8x1+2x2+8; y=0. Тому додамо ще дві залежності шляхом вибору команди Add Mfs меню Edit. У діалоговому вікні, що з'явилося, в полі Number of MFs вибираємо 2 і натискаємо кнопку OK.

Крок 13. Задамо найменування і параметри лінійних залежностей. Для цього робимо одне клацання лівою кнопкою миші по найменуванню першої залежності mf1. Потім друкуємо найменування залежності, наприклад 50, в полі Name, і встановлюємо тип залежності – константа шляхом вибору опції Сonstant в меню Type. Після цього вводимо значення параметра – 50 в полі Params.

Аналогічно для другої залежності mf2 введемо найменування залежності, наприклад 8+8x1+2x2. Потім вкажемо лінійний тип залежності шляхом вибору опції Linear в меню Type і введемо параметри залежності 8 2 8 в полі Params. Для лінійної залежності порядок параметрів наступний: перший параметр – коефіцієнт при першій змінній, другій, – при другій і так далі, і останній параметр – вільний член залежності.

Аналогічно для третьої залежності mf3 введемо найменування залежності, наприклад 1+2x1+2x2, вкажемо лінійний тип залежності і введемо параметри залежності 2 2 1.

Для четвертої залежності mf4 введемо найменування залежності, наприклад 4x1-x2, вкажемо лінійний тип залежності і введемо параметри залежності 4 -1 0.

Для п'ятої залежності mf5 введемо найменування залежності, наприклад 0, вкажемо тип залежності – константа і введемо параметр залежності 0.

В результаті отримаємо графічне вікно, зображене на рис. 19.

Рис 19. Вікно лінійних залежностей “входи-вихід”.

Крок 14. Перейдемо в редактор бази знань RuleEditor. Для цього виберемо в меню Edit команду Edit rules... і введемо правила бази знань. Для введення правила необхідно вибрати відповідну комбінацію термів і залежностей і натиснути кнопку Add rule. На рис. 20 зображено вікно редактора бази знань після введення всіх шести правил.

Рис. 20. Нечітка база знань для системи типу Сугено.

На рис. 21 приведено вікно візуалізації нечіткого логічного виведення. Це вікно активізується командою View rules... меню View. У полі Input указуються значення вхідних змінних, для яких виконується логічне виведення. Як видно з цього рисунка значення вихідної змінної розраховується як середнє зважене значення результатів виводу за кожним правилом.

Рис. 21. Візуалізація нечіткого логічного виведення для системи типу Сугено.