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



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

 

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

Розглянемо основні етапи проектування систем типу Сугено на прикладі створення системи нечіткого логічного виведення, що моделює залежність y=x21sin(x2-1), x1Î[-7; 3], x2Î[-4,4; 1,7]. Моделювання цієї залежності будемо здійснювати за допомогою наступної бази знань:

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 у командному рядку. Після цього відкриється нове графічне вікно.

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

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

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

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

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

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

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

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

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

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

Крок 12. Задамо лінійні залежності між входами і виходом, приведені в базі знань. Для цього активізуємо змінну y за допомогою щиглика лівої кнопки миші на блоці y. У правому верхньому куті з'явилося позначення трьох функцій приналежності, кожна з яких відповідає одній лінійній залежності між входами і виходом. У базі знань зазначені 5 різних залежностей: 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.

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

Вікно візуалізації нечіткого логічного виведення активізується командою View rules... меню View. У поле Input указуються значення вхідних змінних, для яких виконується логічне виведення. Значення вихідної змінної розраховується як середнє зважене значення результатів виведення за кожним правилом. Для виведення цього вікна поверхні «вхід-вихід», що відповідає синтезованій нечіткій системі, необхідно використовувати команду View surface... меню View.

 

Приклад 18. Нехай ми вирішуємо задачу визначення діагнозу пацієнта за значеннями симптомів, що характеризують його стан. Вхідними параметрами є симптоми пацієнта: температура тіла (нормальна - близько 36,6 ˚С, підвищена - більше 37˚С), місце болю (у спині, у попереку), вид болю (сильний, слабкий). Вихідним параметром є діагноз пацієнта (хронічний апендицит, гострий апендицит, хронічний пієлонефрит, гострий пієлонефрит). Ми маємо визначені експертами правила (ми будемо вважати, що якщо апендицит або пієлонефрит не є гострими, то вони є хронічними):

 

ЯКЩО

ТО

температура місце болю вид болю апендицит пієлонефрит гострий
підвищена у спині сильний немає є є
підвищена у животі сильний є немає є
нормальна у спині слабкий немає є немає
нормальна у животі слабкий є немає немає

 

Необхідно побудувати систему нечіткого виведення.

1. Завантажимо пакет MATLAB та запустимо редактор FIS: fuzzy.

2. Створимо три змінні (одна вже є за замовчанням, тому додамо ще дві змінні): у головному меню редактора у підменю Edit оберемо опцію Add variables: Input. Це потрібно зробити 2 рази. Після чого створимо три вихідні змінні (подібним чином, але обираючи Add variables: Output).

3. Переміщуючи курсор миші по областях змінних можна обрати потрібну змінну та задати її назву в області Current Variable: Name. Назвемо наші змінні: temperature - температура, painlocation - місце болю, paintype - вид болю. Також задамо назви вихідних змінних: apendicite - апендицит, pielonefrit - пієлонефрит, acute - гострий.

4. Подвійним щигликом на області якої-небудь змінної можна активізувати редактор функцій приналежності. За його допомогою визначимо діапазон кожної змінної та необхідні функції приналежності.

5. У головному меню редактора FIS оберемо в підменю Edit пункт Rules. Тепер ми маємо можливість задавати наші правила.

6. У головному меню редактора FIS оберемо в підменю View пункт Rules. Переміщуючи курсором миші лінії, що регулюють значення змінних, будемо отримувати значення вихідних змінних при відповідному наборі значень вхідних змінних.

Завантаживши файл Sample.fis із наведеним нижче текстом до редактора FIS можна переглянути описане у прикладі вирішення задачі.

 

Вміст файлу Sample.fis:

[System]

Name='Sample'

Type='mamdani'

Version=2.0

NumInputs=3

NumOutputs=4

NumRules=4

AndMethod='min'

OrMethod='max'

ImpMethod='min'

AggMethod='max'

DefuzzMethod='centroid'

[Input1]

Name='temperature'

Range=[35 42]

NumMFs=2

MF1='normal':'trimf',[35.9 36.6 37]

MF2='high':'smf',[36.8 37.1944444444444]

[Input2]

Name='painlocation'

Range=[0 1]

NumMFs=2

MF1='stiomach':'trimf',[0 0 0.5]

MF2='spine':'trimf',[0.5 1 1]

[Input3]

Name='paintype'

Range=[0 1]

NumMFs=2

MF1='acute':'trimf',[0.5 1 1]

MF2='weak':'trimf',[0 0 0.5]

[Output1]

Name='appendicite'

Range=[0 1]

NumMFs=1

MF1='is':'trimf',[0.5 1 1]

[Output2]

Name='pielonefrit'

Range=[0 1]

NumMFs=1

MF1='is':'trimf',[0.5 1 1.4]

[Output3]

Name='acute'

Range=[0 1]

NumMFs=1

MF1='is':'trimf',[0 0 0.5]

[Output4]

Name='chronic'

Range=[0 1]

NumMFs=1

MF1='is':'trimf',[0.5 1 1.4]

[Rules]

1 1 2, 1 0 0 1 (1) : 1

1 2 2, 0 1 0 1 (1) : 1

2 1 1, 1 0 1 0 (1) : 1

2 2 1, 0 1 1 0 (1) : 1

 


Дата добавления: 2018-04-15; просмотров: 422; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!