Professional Documents
Culture Documents
Навчальний посібник
до виконання лабораторних робіт
з дисципліни «Нечітке моделювання в інформаційних технологіях»
для студентів спеціальності 123 „Комп’ютерна інженерія”
Рекомендовано
Вченою радою факультету МФІТ
Одеса
2022
1
УДК 004.383
ББК
Укладачі: д.т.н., доц. каф КСТ Михайленко В.С., д.т.н., проф. зав. каф.
КСТ Гунченко Ю.О., ст.викл. каф КСТ Мартинович Л.Я.
Рецензенти:
доцент кафедри комп’ютеризованих систем та програмних технологій
Національний університет «Одеська політехніка» к.т.н., доц. Ложечніков В.Ф.
2
Зміст
ВСТУП.........................................................................................................................4
МЕТА, ЕТАПИ ПРОВЕДЕННЯ ТА ЗАХИСТ ЛАБОРАТОРНИХ РОБІТ...........5
ЛАБОРАТОРНА РОБОТА №1..................................................................................6
ЛАБОРАТОРНА РОБОТА №2................................................................................13
ЛАБОРАТОРНА РОБОТА №3................................................................................21
ЛАБОРАТОРНА РОБОТА №4................................................................................26
ЛАБОРАТОРНА РОБОТА № 5...............................................................................32
ЛАБОРАТОРНА РОБОТА № 6...............................................................................40
ЛАБОРАТОРНА РОБОТА № 7...............................................................................49
ЛАБОРАТОРНА РОБОТА № 8...............................................................................53
ПРАВИЛА ОФОРМЛЕННЯ ПОЯСНЮВАЛЬНОЇ ЗАПИСКИ...........................58
СПИСОК РЕКОМЕНДОВАНОЇ ЛІТЕРАТУРИ....................................................59
Додаток А..................................................................................................................60
3
ВСТУП
4
МЕТА, ЕТАПИ ПРОВЕДЕННЯ ТА ЗАХИСТ ЛАБОРАТОРНИХ РОБІТ
5
ЛАБОРАТОРНА РОБОТА №1
Постановка задачі
Написати програму, яка демонструватиме графік комфорту температури
для людини відповідно до думки експертів для нечіткого контролера у системі
клімат-контролю. Використовується нечітке моделювання (операції нечіткої
логіки).
Зміст протокола
1. Постановка задачі
2. Хід роботи (текст програми або скриншоти інтерфейсу)
3. Висновки щодо роботи
12
ЛАБОРАТОРНА РОБОТА №2
Постановка задачі
Відтворити алгоритм (max-min)-композиції або максимінним згортком
двох нечітких відносин. Ситуація, яка моделюється, пов'язана з консалтингом у
сфері вибору професії для подальшого навчання та отримання відповідної
спеціальності.
Теоретичний матеріал (дів. приклад 4.8 з книги Олександра Леоненкова
«Нечітке моделювання в середовищі MATLAB та fuzzyTech»).
13
Таблиця 2. 1. Нечітке відношення S профілювання спеціальностей навчання.
Швидкість і Вміння Стійкість, Пам’ять Швидкість
гнучкість швидко концентрація реакції
мислення приймати уваги
рішення
Менеджер 0.9 0.9 0.8 0.4 0.5
Програміст 0.8 0.5 0.9 0.3 0.1
Водій 0.3 0.9 0.6 0.5 0.9
Секретар 0.5 0.4 0.5 0.5 0.2
Перекладач 0.7 0.8 0.8 0.2 0.6
14
class Program
{
/// <summary>
/// Виведення матриці композиції на консоль.
/// </summary>
/// <param name="Q">Матриця, що виводиться</param>
static void Print_Q(ref double[,] Q)
{
string[] professions = { "Менеджер", "Програміст", "Водій", "Секретар",
"Перекладач"};
Console.WriteLine("Матриця Q - це бінарна композиція матриць S і T.
Висновок матриці Q:");
Console.WriteLine("Петренко Іваненко Сидоренко Василенко
Григоренко");
for(int i = 0; i < 5; i++)
{
Console.Write($"{professions[i]}\t");
for(int j = 0; j < 5; j++)
{
Console.Write($"{Q[i, j]} ");
}
Console.WriteLine();
}
}
/// <summary>
/// Обчислюємо матрицю композиції.
/// </summary>
/// <param name="S">Перша матриця нечітких відносин.</param>
/// <param name="T">Друга матриця нечітких відносин.</param>
/// <param name="Q">Результуюча матриця процесу максимінної
згортки.</param>
static void Calculation_Q(in double[,] S, in double[,] T, ref double[,] Q)
{
// T_Rows = S_Columns, S_Rows = T_Columns.
int T_Rows = T. GetUpperBound(0) + 1;
int T_Columns = T.Length/T_Rows;
int S_Rows = S. GetUpperBound(0) + 1;
15
int S_Columns = S.Length/S_Rows;
// Проміжна змінна, яка зберігає число-претендент у результуючий
масив.
double tmp;
for(int i = 0; i < T_Columns; i++)
{
for (int j = 0; j < S_Rows; j++)
{
// Максимальний елемент масиву tmp.
double MaxElem = 0;
// Цикл, у якому відбувається (max-min)-композиція або ще так
звана максимінна згортка.
for (int k = 0; k < S_Columns; k++)
{
tmp = Math.Min (T [k, i], S [j, k]);
if (tmp > MaxElem)
{
MaxElem = tmp;
}
}
// Запис отриманого значення результуючу матрицю.
Q[j, i] = MaxElem;
}
}
}
static void Main(string[] args)
{
/// <summary>
/// Нечітке відношення S профіль спеціальностей.
/// </summary> // Y - безліч психофізіологічних характеристик.
double[,] S = { { 0.9, 0.9, 0.8, 0.4, 0.5},
/*X*/{ 0.8, 0.5, 0.9, 0.3, 0.1},
18
Нечітке відношення Т профільованих кандидатів наведено нижче
19
Рис. 2.5. Результат
2. Нечітка кон'юнкція:
1) Основна:
T(A/\B) =
2) Алгеброїчна:
T(A/\B) =
3) Гранична:
T(A/\B) =
3. Нечітка диз'юнкція:
1) Основна:
A\/B =
2) Алгеброїчна:
A\/B = 0
3) Гранична:
A\/B =
20
ЛАБОРАТОРНА РОБОТА №3
21
Завдання - від значень Fi віднять в якості десятих останню цифру
залікової книжки, наприклад цифра 3 тоді вихідне значення F1 = (1,0 – 0,3) =
0,7 і т.д.
Хід роботи
Розглянемо один із можливих способів вирішення даної проблеми з
використанням прямого методу виведення, правила max-min-композиції та
нечіткої операції max-диз’юнкції для оцінки однакових висновків. З цією
метою послідовно розглянемо усі правила отримання відповідних висновків.
Напишемо мовою програмування «C#» код програми, яка реалізує
вирішення поставленого завдання у середовищі розробки «Visual Studio». Код
програми з коментарями наведено нижче:
class Program
{
/// <summary>
/// Метод обчислення значень істинності нечітких висловлювань.
/// </summary>
/// <param name="result_1">Шукане значення істинності аналізованого
першого нечіткого висловлювання.</param>
/// <param name="result_2">Шукане значення істинності другого нечіткого
висловлювання, що розглядається.</param>
/// <param name="rules">Масив наявних правил на митниці.</param>
/// <param name="situations">Масив ситуацій, що склалися на
митниці.</param>
static void Calculation(out Tuple<double, string> result_1_value, out
Tuple<double, string> result_2_value, Tuple<double, string>[] rules, Tuple<double,
string>[] situations )
{
Tuple<double, string> on_rule_1 = new Tuple<double, string>(Math.Min(1.0
- situations[0].Item1, rules[0].Item1), "Громадяни будуть піддані митному
огляду.");
23
Tuple<double, string> rule_3 = new Tuple<double, string>(0.8, "ЯКЩО
громадянин не піддається митному огляду, ТО не виключається можливість
перевезення наркотиків.");
Tuple<double, string> rule_4 = new Tuple<double, string>(0.6, "ЯКЩО
кількість громадян, що проходять митний огляд, велика, ТО контролер
відчуває втому.");
Tuple<double, string> rule_5 = new Tuple<double, string>(0.7, "ЯКЩО
контролер відчуває втому, ТО не виключається можливість провезення
наркотиків.");
Tuple<double, string> rule_6 = new Tuple<double, string>(0.95, "ЯКЩО
громадянин піддається митному огляду І щодо цього громадянина є агентурна
інформація," + "ТО виключається можливість перевезення наркотиків.");
Tuple<double, string> rule_7 = new Tuple<double, string>(0.95, "ЯКЩО
громадянин піддається митному огляду І контролер використовує новітні
технічні засоби," + "ТО виключається можливість перевезення наркотиків.");
Вирішити
Нечітка імплікація:T(A) = 0.8, T(B) = 0.5
1) Л. Заде: =
25
2) Э. Мамдани: =
3) Я. Лукасевич: =
4) Дж. Гоген: =
2. Нечітка еквівалентність: =
26
ЛАБОРАТОРНА РОБОТА №4
відношення :
Перепишемо для наочності матрицю нечітких відносин як правил
нечітких продукций:
1) ЯКЩО « », ТО « » ( ).
2) ЯКЩО « », ТО « » ( ).
3) ЯКЩО « », ТО « » ( ).
4) ЯКЩО « », ТО « » ( ).
5) ЯКЩО « », ТО « » ( ).
6) ЯКЩО « », ТО « » ( ).
7) ЯКЩО « », ТО « » ( ).
8) ЯКЩО « », ТО « » ( ).
9) ЯКЩО « », ТО « » ( ).
10) ЯКЩО « », ТО « » ( ).
27
11) ЯКЩО« », ТО « » ( ).
12) ЯКЩО « », ТО « » ( ).
Тепер припустимо, що результати огляду конкретного автомобіля
показують, що двигун не запускається, хоча раніше працював стійко та
розвивав повну потужність. У дужках вказані міри істинності відповідних
нечітких висловлювань.
Двигун автомобіля не запускається ( ).
Двигун працює нестійко ( ).
Двигун не розвиває повну потужність ( ).
Хід роботи
Розглянемо один із можливих способів вирішення даної проблеми з
використанням прямого методу виведення, правила для оцінки однакових
висновків. З цією метою послідовно розглянемо усі правила отримання
відповідних висновків.
Напишемо мовою програмування «C#» програму, яка реалізує вирішення
поставленого завдання у середовищі розробки «Visual Studio». Код програми з
коментарями наведено нижче:
class Program
{
/// <summary>
/// Метод обчислення значень істинності нечітких висловлювань.
/// </summary>
/// <param name="result_value">Шукане значення істинності аналізованого
заданого нечіткого висловлювання.</param>
/// <param name="rules">Масив причинних взаємозв'язків між безліччю
передумов та безліччю наслідків.</param>
/// <param name="situations">Масив ситуацій огляду автомобіля, що
склалися.</param>
static void Calculation( out Tuple<double, string> result_value, Tuple<double,
string>[] rules, Tuple<double, string>[] situations )
{
28
Tuple<double, string> on_rule_1 = New Tuple<double,
string>(Math.Min(situations[0].Item1, rules[0].Item1), "Двигун не запускається
через проблеми з акумулятором.");
Tuple<double, string> on_rule_2 = New Tuple<double,
string>(Math.Min(situations[0].Item1, rules[1].Item1), "Двигун не запускається
через проблеми з карбюратором.");
Tuple<double, string> on_rule_3 = New Tuple<double,
string>(Math.Min(situations[0].Item1, rules[2].Item1), "Двигун не запускається
через проблеми з бензином.");
Tuple<double, string> on_rule_4 = New Tuple<double,
string>(Math.Min(situations[0].Item1, rules[3].Item1), "Двигун не запускається
через проблеми із системою запалювання.");
Tuple<double, string> on_rule_5 = New Tuple<double, string>
(Math.Min(situations[1].Item1, rules[4].Item1), "Двигун працює нестійко через
проблеми з акумулятором.");
Tuple<double, string> on_rule_6 = New Tuple<double,
string>(Math.Min(situations[1].Item1, rules[5].Item1), "Двигун працює нестійко
через проблеми з карбюратором.");
Tuple<double, string> on_rule_7 = New Tuple<double,
string>(Math.Min(situations[1].Item1, rules[6].Item1), "Двигун працює нестійко
через проблеми з бензином.");
Tuple<double, string> on_rule_8 = New Tuple<double,
string>(Math.Min(situations[1].Item1, rules[7].Item1), "Двигун працює нестійко
через проблеми із системою запалювання.");
Tuple<double, string> on_rule_9 = New Tuple<double,
string>(Math.Min(situations[2].Item1, rules[8].Item1), "Двигун не розвиває повної
потужності через проблеми з акумулятором.") ;
Tuple<double, string> on_rule_10 = New Tuple<double,
string>(Math.Min(situations[2].Item1, rules[9].Item1), "Двигун не розвиває повної
потужності через проблеми з карбюратором.") ;
Tuple<double, string> on_rule_11 = New Tuple<double,
string>(Math.Min(situations[2].Item1, rules[10].Item1), "Двигун не розвиває
повної потужності через проблеми з бензином.") ;
Tuple<double, string> on_rule_12 = New Tuple<double,
string>(Math.Min(situations[2].Item1, rules[11].Item1)), "Двигун не розвиває
повної потужності через проблеми із системою запалювання." );
29
result_value = New Tuple<double,
string>(Math.Max(Math.Max(on_rule_1.Item1, on_rule_2.Item1),
Math.Max(on_rule_3.Item1, on_rule_4.Item1))),"Проблема полягає або в
несправності несправності системи запалення.");
}
/// <summary>
/// Функція виведення консоль результатів обчислення.
/// </summary>
/// <param name="result">Результат</param>
static void PrintResult(Tuple<double, string> result)
{
Console.WriteLine($"Значення істинності: {result.Item1}\nРезультат:
{result.Item2}");
}
static void Main(string[] args)
{
const string y_1 = "двигун не запускається";
const string y_2 = "двигун працює нестійко";
const string y_3 = "двигун не розвиває повної потужності";
const string x_1 = "несправність акумулятора";
const string x_2 = "несправність карбюратора";
const string x_3 = "низька якість бензину";
const string x_4 = "несправність системи запалення";
Tuple<double, string> rule_1 = New Tuple<double, string>(1.0, $"ЯКІ
{y_1}, ТО {x_1}.");
Tuple<double, string> rule_2 = New Tuple<double, string>(0.8, $"ЯКЩО
{y_1}, ТО {x_2}.");
Tuple<double, string> rule_3 = New Tuple<double, string>(0.7, $"ЯКІ
{y_1}, ТО {x_3}.");
Tuple<double, string> rule_4 = New Tuple<double, string>(1.0, $"ЯКЩО
{y_1} ТО {x_4}.");
Tuple<double, string> rule_5 = New Tuple<double, string>(0.1, $"ЯКІ
{y_2}, ТО {x_1}.");
Tuple<double, string> rule_6 = new Tuple<double, string>(0.9, $"ЯКІ
{y_2}, ТО {x_2}.");
Tuple<double, string> rule_7 = New Tuple<double, string>(0.8, $"ЯКІ
{y_2}, ТО {x_3}.");
30
Tuple<double, string> rule_8 = New Tuple<double, string>(0.5, $"ЯКІ
{y_2}, ТО {x_4}.");
Tuple<double, string> rule_9 = New Tuple<double, string>(0.2, $"ЯКІ
{y_3}, ТО {x_1}.");
Tuple<double, string> rule_10 = New Tuple<double, string>(1.0, $"ЯКІ {y_3}, ТО
{x_2}.");
Tuple<double, string> rule_11 = new Tuple<double, string>(0.5, $"ЯКІ
{y_3}, ТО {x_3}.");
Tuple<double, string> rule_12 = New Tuple<double, string>(0.2, $"ЯКІ
{y_3}, ТО {x_4}.");
Tuple<double, string> situation_1 = New Tuple<double, string>(0.9,
$"{y_1}.");
Tuple<double, string> situation_2 = New Tuple<double, string>(0.1,
$"{y_2}.");
Tuple<double, string> situation_3 = New Tuple<double, string>(0.2,
$"{y_3}.");
Tuple<double, string>[] rules = { rule_1, rule_2, rule_3, rule_4, rule_5,
rule_6, rule_7, rule_8, rule_9, rule_10, rule_11, rule_12 };
Tuple<double, string>[] situations = { situation_1, situation_2, situation_3 };
Tuple<double, string> result;
// Викликаємо метод обчислення.
Calculation(out result, rules, situations);
// Викликаємо метод виведення результатів на консоль.
PrintResult(result);
}
}
Результати роботи програми продемонструємо у вигляді скриншота консолі:
Вирішити
Нехай U = {0,1,2, ... 120} - Можливий вік людини. Виступаючи у ролі
експерта, побудуйте графіки функцій належності наступних нечітких множин
за допомогою методу парних порівнянь: А - молодий, В - старий, С – дуже
молодий, D – не старий. Запишіть ці множини в стандартній формі.
32
ЛАБОРАТОРНА РОБОТА № 5
Хід роботи
1) Спочатку створимо вищеописані параметри (змінні) системи та задамо
діапазони вимірювань для даних змінних. А також скоригуємо функції
(графіки) власності цих змінних.
Для вхідних змінних:
a. Змінна "Air_Temperature_Inside":
33
Рис. 5.2 – Налаштування параметрів змінної температури повітря всередині
приміщення
34
Рис. 5.5 – Налаштування параметрів змінної температури повітря зовні
35
Рис. 5.8 – Налаштування параметрів змінної положення вентиля обігрівача
Рис. 5.11 - Безпосередньо сама база правил системи у вигляді логічних виразів
37
Рис. 5. 12 - Структурна схема нечіткої системи у програми FuzzyTECH. Видно
три змінні і база правил які пов'язані між собою
4) Запустимо програму і проаналізуємо отримані результати системи при
деяких довільних заданих значеннях.
Нехай поставимо змінній температури повітря зовнішнього середовища та
змінній температури повітря всередині приміщення значення: 0 і 20 відповідно.
Тоді система порекомендує орератору встановити вентиль обігрівального
пристрою на зразкове значення 50 відсотків від максимального робочого ходу:
38
Рис 5.14 – Результати рекомендації системи з урахуванням других вхідних
даних
39
Як можна бачити за результатами експериментів, система працює
коректно у штатному режимі та виконує поставлені завдання. Збої та помилки
відсутні. Завдання виконані.
Вирішити
Нехай U – ціни автомобілів,
3000 < u < 50000 у.е.
(Ум.од.). Виступаючи у ролі експерта, побудуйте графіки функцій
належностей наступних нечітких множин:
А – ціни автомобілів для середнього класу
В – ціни автомобілів для багатих людей
С - ціни автомобілів для небагатих людей
Для кожної кривої знайдіть відповідну формулу та запишіть функції
належності аналітично.
40
ЛАБОРАТОРНА РОБОТА № 6
b. Змінна "Work":
41
Рис. 6.3. - Змінна типу зайнятості дебітора у програми FuzzyTECH
с. Змінна "Age":
42
Рис. 6.7 - Змінна віку дебітора у програми FuzzyTECH
Ри
с. 6.9 – Функції належності змінної віку дебітора
43
Для вихідних змінних:
d. Змінна "Credit":
45
Правило 17. ЯКЩО «дохід дебітора середній» І «тип зайнятості дебітора є
повна зайнятість» І «дебітор середнього віку», ТО «Видача кредиту середня».
Правило 18. ЯКЩО «дохід дебітора середній» І «тип зайнятості дебітора є
повна зайнятість» І «дебітор похилого віку», ТО «Видача кредиту середня».
Правило 19. ЯКЩО «дохід дебітора високий» І «тип зайнятості дебітора є
навчання» І «дебітор молодого віку», ТО «Видача кредиту середня».
Правило 20. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
навчання" І "дебітор середнього віку", ТО "видача кредиту висока".
Правило 21. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
навчання" І "дебітор похилого віку", ТО "видача кредиту висока".
Правило 22. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
неповна зайнятість" І "дебітор молодого віку", ТО "видача кредиту висока".
Правило 23. ЯКЩО «дохід дебітора високий» І «тип зайнятості дебітора є
неповна зайнятість» І «дебітор середнього віку», ТО «Видача кредиту висока».
Правило 24. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
неповна зайнятість" І "дебітор похилого віку", ТО "видача кредиту висока".
Правило 25. ЯКЩО «дохід дебітора високий» І «тип зайнятості дебітора є
повною зайнятістю» І «дебітор молодого віку», ТО «видача кредиту висока».
Правило 26. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
повна зайнятість" І "дебітор середнього віку", ТО "видача кредиту висока".
Правило 27. ЯКЩО «Дохід дебітора високий» І «Тип зайнятості дебітора є
повна зайнятість» І «Дебітор похилого віку», ТО «Видача кредиту висока».
46
Рис 6.14 – База правил нечіткої експертної системи у вигляді логічних виразів
«ЯКЩО …. ТО»
47
зайнятість). Тоді система за даними параметрами порадить нам видати кредит
у розмірі 500 доларів дебітору.
Тепер змінимо вхідні дані (до кредитора прийшов інший дебітор): його
вік буде 60 років, зарплата 600 доларів, а параметр роботи буде відповідати 50
відсоткам, що можна трактувати як часткову зайнятість. Тоді отримаємо
результат рекомендації кредиту у розмірі 134,88 доларів.
48
Рис 6.18. – Графічна тривимірна інтерпретація даних
Вирішити
На універсальній множині U {a,b,c,d,e, f , g} задані нечіткі множини:
A 0.3/ b 0.7/ c 1/ d 0.2/ f 0.6/ g
B 0.3/ a 1/ b 0.5/ c 0.8/ d 1/ e 0.5/ f 0.6/ g
C 1/ a 0.5/ b 0.2/ d 0.2/ f 0.9/ g
Знайти множини A B, (A B)C , та дати геометричну інтерпретацію
виконаних операцій.
49
ЛАБОРАТОРНА РОБОТА № 7
50
Рис.7.2. Вікно вібору функції належності
51
Рис.7.4 Вікно редактору
Вирішити
Нехай U – безліч дисциплін, що вивчаються у поточному семестрі.
Надайте значення кожній дисципліні і, виступаючи в ролі експерта,
запишіть нечіткі множини:
А – мені подобається ця дисципліна
В – я не розумію цю дисципліну
З – мені не подобається ця дисципліна
D – Я хотів би вивчати цю дисципліну глибше
Уявіть розкладання кожної з нечітких множин за множинами рівня.
53
ЛАБОРАТОРНА РОБОТА № 8
Хід роботи:
54
Рис. 8.2. Функції належності (ФН) ««Навички роботи»
55
Рис. 8.4. Редактор функції належності «Досвід роботи»
Редагуємо ФН змінної:
56
Рис. 8.6. Вікно редактору ФН «Заробітна плата »
58
ПРАВИЛА ОФОРМЛЕННЯ ПОЯСНЮВАЛЬНОЇ ЗАПИСКИ
59
СПИСОК РЕКОМЕНДОВАНОЇ ЛІТЕРАТУРИ
Основна література
1. Zadeh L. A. Fuzzy sets / L. A. Zadeh // Information and Control. –
1965, №8. – P. 338-353
2. Леоненков А.В. Нечітке моделювання у середе MATLAB і
fuzzyTECH.: БХВ, 2003. – 736 с.
3. Sugeno M. On stability of fuzzy systems expressed by fuzzy rules with
singleton consequents / M. Sugeno // IEEE Trans. Fuzzy Systems. – 1997. – № 7. –
P. 201-224.
4. Mamdani E. H. Application of fuzzy algorithms for control of simple
dynamic plant / E. H. Mamdani // Proc. Inst. Elect. Eng. Contr. Sci., vol. 121, 1974.
– P. 1585-1588.
5. Mikhailenko V.S. Analysis of Traditional and Neuro Fuzzy Adaptive
System of Controlling the Primary Steam Temperature in the Direct Flow Steam
Generators in Thermal Power Stations / V.S. Mikhailenko, R.Yu. Kharchenko. //
Automatic Control and Computer Sciences. – 2018. – Vol. 48, № 6. – Р. 334 – 344.
Додаткова література
60
Додаток А
Одеський національний університет імені І. І. Мечникова
(повне найменування вищого навчального закладу)
Факультет математики, фізики та інформаційних технологій
(повне найменування інституту/факультету)
Кафедра комп’ютерних систем та технологій
(повна назва кафедри)
Одеса – 2022
61