You are on page 1of 61

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ОДЕСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ІМЕНІ І.І. МЕЧНИКОВА


ФАКУЛЬТЕТ МАТЕМАТИКИ, ФІЗИКИ ТА ІНФОРМАЦІЙНИХ
ТЕХНОЛОГІЙ
КАФЕДРА КОМП’ЮТЕРНИХ СИСТЕМ ТА ТЕХНОЛОГІЙ

Навчальний посібник
до виконання лабораторних робіт
з дисципліни «Нечітке моделювання в інформаційних технологіях»
для студентів спеціальності 123 „Комп’ютерна інженерія”

Рекомендовано
Вченою радою факультету МФІТ

Протокол № ___ від ______ 2022р.

Одеса
2022

1
УДК 004.383
ББК

Нечітке моделювання в інформаційних технологіях: Навчальний посібник


до виконання лабораторних робіт / Укладачі Михайленко В.С., Гунченко
Ю.О., Мартинович Л.Я., 2022. – 60 с.

Для студентів спеціальності 123 «Компютерна інженерія». Посібник


містить теоретичний і практичний матеріал до виконання лабораторних робіт з
дисципліни „Нечітке моделювання в інформаційних технологіях”. Розглянуто
зміст, завдання, наведено приклади розробки програм, порядок їх виконання.
Рекомендовано вимоги до оформлення протоколів, правила захисту та оцінки.
Наведено перелік завдань з темами лабораторних робіт, контрольні запитання
та список рекомендованої літератури.

Укладачі: д.т.н., доц. каф КСТ Михайленко В.С., д.т.н., проф. зав. каф.
КСТ Гунченко Ю.О., ст.викл. каф КСТ Мартинович Л.Я.

Рецензенти:
доцент кафедри комп’ютеризованих систем та програмних технологій
Національний університет «Одеська політехніка» к.т.н., доц. Ложечніков В.Ф.

декан факультету математики, фізики та інформаційних технологій ОНУ імені


Мечникова, доктор физ-мат.наук, проф. Ю.А.Ніцук

2
Зміст

ВСТУП.........................................................................................................................4
МЕТА, ЕТАПИ ПРОВЕДЕННЯ ТА ЗАХИСТ ЛАБОРАТОРНИХ РОБІТ...........5
ЛАБОРАТОРНА РОБОТА №1..................................................................................6
ЛАБОРАТОРНА РОБОТА №2................................................................................13
ЛАБОРАТОРНА РОБОТА №3................................................................................21
ЛАБОРАТОРНА РОБОТА №4................................................................................26
ЛАБОРАТОРНА РОБОТА № 5...............................................................................32
ЛАБОРАТОРНА РОБОТА № 6...............................................................................40
ЛАБОРАТОРНА РОБОТА № 7...............................................................................49
ЛАБОРАТОРНА РОБОТА № 8...............................................................................53
ПРАВИЛА ОФОРМЛЕННЯ ПОЯСНЮВАЛЬНОЇ ЗАПИСКИ...........................58
СПИСОК РЕКОМЕНДОВАНОЇ ЛІТЕРАТУРИ....................................................59
Додаток А..................................................................................................................60

3
ВСТУП

Однією з найперспективніших областей сучасних інформаційних


технологій є технології з нечітким моделюванням. Актуальність цього
напрямку обумовлена тенденцією збільшення складності математичних
моделей реальних систем та процесів управління, пов'язаною з бажанням
підвищити їх адекватність і врахувати все більше різних факторів, що
здійснюють вплив на процеси ухвалення рішень.
Традиційні класичні методи побудови математичних моделей не
призводять до задовільних результатів, коли вихідний опис проблеми, що має
бути вирішена, є явно неточним або неповним, а прагнення отримати всю
вичерпну інформацію для побудови точної математичної моделі скільки-
небудь складної реальної ситуації може призвести до втрати часу, оскільки це
може бути неможливо. Разом з тим висококваліфікований фахівець експерт,
який знає особливості роботи системи, може представити її модель у вигляді
словесних (лінгвістичних) змінних з високим ступенем точності. І для
вираження досвіду, знань та інуїції експерта зручно використовувати апарат
нечітких множин та нечіткої логіки введений Лотфі Заде.
Таким чином метою дисципліни є вивчення методів та засобів розробки
сучасних нечітких моделей та алгоритмів для створення експертних систем та
систем управління для їх ефективного використання у практиці.
Лабораторні роботи з дисципліни виконуються з метою закріплення та
поглиблення теоретичних та практичних знань та вмінь, набутих у процесі
засвоєння всього навчального матеріалу дисципліни. Виконання лабораторних
робіт є важливим етапом у підготовці до виконання дипломного проекту
(роботи) майбутнього фахівця з комп’ютерної інженерії.
Час, потрібний для виконання лабораторних робіт згідно навчального
плану – 6 годин у комп'ютерному класі, та до 32 годин самостійної роботи.
Тематика лабораторних робіт присвячена оволодінню методиками
нечіткого моделювання та розробці спеціалізованих програмних продкутів для
різних областей фінансової, консалтингової, митної, виробничої діяльності.

4
МЕТА, ЕТАПИ ПРОВЕДЕННЯ ТА ЗАХИСТ ЛАБОРАТОРНИХ РОБІТ

Лабораторні роботи з дисципліни виконуються з метою закріплення та


поглиблення теоретичних та практичних знань та вмінь, набутих у процесі
засвоєння всього навчального матеріалу дисципліни:
 закріплення, поглиблення та узагальнення теоретичних знань і розвиток
навичок їх практичного застосування в галузі розробки нечітких
експертних ситсем (НЕС)
 самостійне розв’язання задач проектування та розробки НЕС;
 уміння користуватися відповідною довідковою літературою,
програмними засобами;
Проведення лабораторних робіт містить такі етапи:
 визначення теми, завдання і повторення теоретичного матеріалу;
 безпосереднє виконання роботи;
 оформлення пояснювальної записки;
 захист.
Після виконання лабораторної роботи і вирішення всіх поставлених у ній
задач студент оформлює звіт з лабораторної роботи – протокол. Виконаний
протокол студент підписує і після дозволу керівника він допускається до
захисту. Якщо керівник не допускає студента до захисту, то це питання
обговорюється на засіданні кафедри у його присутності.
Захист лабораторной роботи – це форма перевірки якості виконання
програми та знань, отриманих під час виконання лабораторних робіт та на
лекціях.
Під час захисту студент робить доповідь по суті програми та відповідає на
запитання.
Якість протоколу та його захист оцінюється в балах (0- 5), за шкалою
ECTS (A, B, C, D, E, FX, F) та за національною шкалою «відмінно», «добре»,
«задовільно», «незадовільно».

5
ЛАБОРАТОРНА РОБОТА №1

Тема: «Зона температурного комфорту людини у системі клімат-контролю»

Постановка задачі
Написати програму, яка демонструватиме графік комфорту температури
для людини відповідно до думки експертів для нечіткого контролера у системі
клімат-контролю. Використовується нечітке моделювання (операції нечіткої
логіки).

Зміст протокола
1. Постановка задачі
2. Хід роботи (текст програми або скриншоти інтерфейсу)
3. Висновки щодо роботи

Варіанти завдань: до вихідних даних (див рис.1.1. синій графік) додати


останню цифру своєї залікової книжки та отримати значення своєї зони
комфорту. Відповідно до отриманих точок вибрати значення ступенів
істинності.

Хід роботи (приклад виконання)


Напишемо потрібну програму мовою програмування C# в середовищі
програмування Visual Studio 2019 використовуючи шаблон Додаток Windows
Forms (.NET Framework).
Наведемо код програми з коментарями нижче:
public partial class Form1 : Form
{
Public Form1()
{
InitializeComponent();
// Викликаємо обробник.
this.Load += Form1_Load;
}
#region Поля: змінні та константи.
/// <summary>
/// Ліва межа графіка функції.
/// </summary>
6
private double XMin = 0;
/// <summary>
/// Права межа графіка функції.
/// </summary>
private double XMax = 45;
/// <summary>
/// Крок графіка функції.
/// </summary>
private double Step = 1;
/// <summary>
/// Масив значень X.
/// </summary>
private double[] x;
/// <summary>
/// Масиви значень Y.
/// </summary>
private double[] y1;
private double[] y2;
/// <summary>
/// Глобальну змінну типу Chart.
/// </summary>
static Chart chart;
#endregion
#Регіон Методи.
/// <summary>
/// Розрахунок значень графіка функції.
/// </summary>
private void Calculate()
{
// Створюємо масиви відповідних розмірів.
x = new double[10];
y1 = new double[10];
y2 = new double[10];
// Розраховуємо крапки для графіків функції.
x[0] = 0;
y1[0] = 0;
x[1] = 5;
7
y1[1] = 0.25;
x[2] = 10;
y1[2] = 0.5;
x[3] = 15;
y1[3] = 0.75;
x[4] = 20;
y1[4] = 1;
x[5] = 25;
y1[5] = 1;
x[6] = 30;
y1[6] = 0.75;
x[7] = 35;
y1[7] = 0.5;
x[8] = 40;
y1[8] = 0.25;
x[9] = 45;
y1[9] = 0;
for(int i = 0; i < 10; i++)
{
y2[i] = Math.Pow(y1[i], 2);
}
}
/// <summary>
/// Створюємо елемент управління Chart та налаштовуємо його.
/// </summary>
private void CreateChart()
{
// Створюємо новий елемент керування Chart.
chart = New Chart ();
// Поміщаємо його форму.
chart.Parent = this;
// Задаємо розміри елемента.
chart.SetBounds(10, 10, ClientSize.Width - 20, ClientSize.Height - 20);
DataPointCustomProperties points = New DataPointCustomProperties();
/ / Створюємо нову область для побудови графіка.
ChartArea area = New ChartArea();
// Даємо їй ім'я (щоб потім додавати графіки).
8
area.Name = "myGraph";
// Задаємо ліву та праву межі осі X.
area.AxisX.Minimum = XMin;
area.AxisX.Maximum = XMax;
// Визначаємо крок сітки.
area.AxisX.MajorGrid.Interval = Math.Abs(Step);
// Підписи до осей.
area.AxisX.Title = "T,℃";
area.AxisY.Title = "μ(T)";
// Задаємо шрифт та стиль підписів осей графіка.
area.AxisX.TitleFont = новий Font("Times New Roman", 12,
FontStyle.Bold);
area.AxisY.TitleFont = новий Font("Times New Roman", 12,
FontStyle.Bold);
// Додаємо область у діаграму.
chart.ChartAreas.Add(area);
/ / Створюємо об'єкт для графіка.
Series series1 = new Series();
// Посилаємося область для побудови графіка.
series1.ChartArea = "myGraph";
// Задаємо тип графіка – лінії.
series1.ChartType = SeriesChartType.Line;
// Вказуємо ширину лінії графіка.
series1.BorderWidth = 4;
// Назва графіка для відображення у легенді.
series1.LegendText = "Рівень звичайного комфорту";
// Додаємо колекцію крапок.
series1.Points.Add(y1);
// Додаємо до списку графіків діаграми.
chart.Series.Add(series1);
// Завдання іміджу точок.
chart.Series[0].MarkerStyle = MarkerStyle.Circle;
// Завдання розміру точок.
chart.Series[0].MarkerSize = 10;
// Завдання кроку між точками.
chart.Series[0].MarkerStep = 1;
// Завдання кольору крапок.
9
chart.Series[0].MarkerColor = Color.Red;
// Аналогічні дії другого графіка.
Series series2 = new Series();
series2.ChartArea = "myGraph";
series2.ChartType = SeriesChartType.Line;
series2.BorderWidth = 4;
series2.LegendText = "Підвищений комфорт.";
series2.Points.Add(y2);
chart.Series.Add(series2);
chart.Series[1].MarkerStyle = MarkerStyle.Square;
chart.Series[1].MarkerSize = 10;
chart.Series[1].MarkerStep = 1;
chart.Series[1].MarkerColor = Color.Green;
// Створюємо легенду, яка показуватиме назви.
Legend legend = New Legend ();
chart.Legends.Add(legend);
// Задаємо шрифт та стиль легенди.
chart.Legends[0].Font = новий Font("Times New Roman", 12,
FontStyle.Bold);
}
/// <summary>
/// Обробник подій форми.
/// </summary>
private void Form1_Load(object sender, EventArgs e)
{
// Створюємо елемент управління.
CreateChart();
// Розраховуємо значення точок графіка функції.
Calculate();
// Додаємо обчислені значення графіки функцій.
chart.Series[0].Points.DataBindXY(x, y1);
chart.Series[1].Points.DataBindXY(x, y2);
}
#endregion
}

Продемонструємо скріншот виконаної програми:


10
Рис. 1.1. Зони комфорта (для програмування контролера)

Параметр визначає рівень комфорту споживача, де . "0" -


відповідає рівню мінімального комфорту (абсолютно неприйнятний), а "1" -
відповідає рівню максимального комфорту (абсолютно прийнятно). Другий
параметр – температура, яка задана в межах від 0 градусів за Цельсієм до
45 градусів за Цельсієм.
Ми можемо бачити, що перший графік синього кольору «Рівень
звичайного комфорту» визначає найкращу температуру 20-25 градусів за
Цельсієм і найбільш некомфортну температуру в крайніх точках 0 і 45 градусів
за Цельсієм. Інші значення приймають проміжні значення від 0 до 1, які можна
легко встановити за графіком.
Другий графік жовтого кольору «Рівень підвищеного комфорту» виділяє
більш виразно прийнятну температуру.

Висновки щодо роботи (приклад)


У цій лабораторній роботі ми познайомилися з нечіткою логікою, склали
програму мовою C#. Програма демонструє графік, де визначається найбільш
прийнятна температура для умовного експерта (користувача).
11
Програма виконує поставлені завдання. Працює без помилок у штатному
режимі.

Перелік питань на захист


1. Нечіткі множини. Функції належності
2. Лінгвістичні змінні. Терми.
3. Операції над нечіткими множинами.
4. Нечіткі висловлювання та операції з них.

12
ЛАБОРАТОРНА РОБОТА №2

Тема: «Нечітке моделювання. Композиція бінарних нечітких відносин»

Постановка задачі
Відтворити алгоритм (max-min)-композиції або максимінним згортком
двох нечітких відносин. Ситуація, яка моделюється, пов'язана з консалтингом у
сфері вибору професії для подальшого навчання та отримання відповідної
спеціальності.
Теоретичний матеріал (дів. приклад 4.8 з книги Олександра Леоненкова
«Нечітке моделювання в середовищі MATLAB та fuzzyTech»).

Завдання - до значень табл. 2.1 додати в якості сотих останню цифру


залікової книжки, наприклад цифра 3 тоді вихідне значення менеджер у
першому осередку таблиці 0.93 і т.д.

Хід роботи (приклад виконання)


Побудуємо нечітку модель, засновану на двох бінарних нечітких відносин
S і T. Перше з цих нечітких відносин будується на двох базисних множинах X і
Y, а друге – на двох базисних множинах Y і Z. Тут X описує безліч
спеціальностей, за якими проводиться набір навчання, Y - безліч
психофізіологічних характеристик, Z - безліч кандидатів на навчання. У
контексті, що нас цікавить, нечітке ставлення S змістовно описує
психофізіологічне профілювання кандидатів на навчання.
Для конкретності нехай и ..
Елементи універсумів мають наступний змістовний зміст:
x1 – "менеджер", x2 – "програміст", x3 – "водій", x4 – "секретар-референт",
x5 – "перекладач",
"швидкість і гнучкість мислення", "уміння швидко приймати рішення",
"стійкість і концентрація уваги", "зорова пам'ять", "швидкість
реакції".

Конкретні значення функцій власності аналізованих нечітких відносин


представимо у вигляді наступних таблицях:

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

Таблиця 2. Нечітке відношення T-профілювання кандидатів на навчання.


Петренко Иваненко Сидоренко Василенко Григоренко
Швидкість і 0.9 0.8 0.7 0.9 1.0
гнучкість
мислення
Вміння 0.6 0.4 0.8 0.5 0.6
швидко
приймати
рішення
Стійкість, 0.5 0.2 0.3 0.8 0.7
концентрація
уваги
Пам’ять 0.5 0.9 0.5 0.8 0.4
Швидкість 1.0 0.6 0.5 0.7 0.4
реакції

Вихідну матрицю композиції нечітких відношень двох матриць S і T


позначимо через Q.
Напишемо мовою програмування «C#» у розробці «Visual Studio». Код
програми наведено нижче:

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},

{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}};
// Х - безліч спеціальностей, якими проводиться набір.
16
/// <summary>
/// Нечітке відношення T профіль кандидатів.
/// </summary> // Z – безліч кандидатів на навчання.
double[,] T = { { 0.9, 0.8, 0.7, 0.9, 1.0},
/*Y*/{ 0.6, 0.4, 0.8, 0.5, 0.6},
{0.5, 0.2, 0.3, 0.8, 0.7},
{ 0.5, 0.9, 0.5, 0.8, 0.4},
{1.0, 0.6, 0.5, 0.7, 0.4}};
int Q_Rows_From_S = S.GetUpperBound(0) + 1;
int Q_Columns_From_T = T.Length/(T.GetUpperBound(0) + 1);
/// <summary>
/// Нечітке відношення Q рекомендацій кандидатом відповідних
спеціальностей.
/// </summary>
double[,] Q = новий double[Q_Columns_From_T, Q_Rows_From_S];
// Викликаємо метод обчислення матриці композиції.
Calculation_Q(in S, in T, ref Q);
// Викликаємо метод виведення матриці композиції.
Print_Q(ref Q);
}
}
Результати роботи програми (складену матрицю нечітких відносин Q)
виведемо у вигляді скріншота консолі (рис.2.1):

Рис.2.1 Скріншот консолі (висновки)

Таблиця 2.2. Нечітке відношення Q рекомендацій кандидатом відповідних спеціальностей


навчання.
17
Петренко Иваненко Сидоренко Василенко Григоренко
Менеджер 0.9 0.8 0.8 0.9 0.9
Програміст 0.8 0.8 0.7 0.8 0.8
Водій 0.9 0.6 0.8 0.7 0.6
Секретар 0.5 0.5 0.5 0.5 0.5
Переклада 0.7 0.7 0.8 0.8 0.7
ч

Як альтернативу для використання мови програмування можна


використовувати пакет Excel (дів. рис 2.2 – 2.5).

Рис. 2.2 Таблиця вимог

18
Нечітке відношення Т профільованих кандидатів наведено нижче

Рис. 2.3. Кандидати і їх бали

Побудуємо нечітку композицію двох вихідних відносин. Для цього


необхідно знайти мінімальні значення функції приналежності всіх пар
елементів i-го рядка та j-ого стовпця (рис. 2.4). Після цього знайти
максимальне з отриманих значень, яке і буде значенням функції
приналежності, яке шукається (рис 2. 5).

Рис. 2.4 Мінімальні значення

19
Рис. 2.5. Результат

Перелік питань на захист


Вирішити
T(A) = 0.8, T(B) = 0.5
1. Нечітке заперечення:
2. T(Ā) =

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

Тема: «Прямий та зворотний методи виведення висновків у системах


нечітких продукцій»

Постановка задачі У цій лабораторній роботі ми розглядаємо системи


нечітких продуктів. І в якості системи вивчимо таку безліч правил нечітких
продукцій, що представляє ситуацію митного огляду громадян при перетині
кордону:
1) ЯКЩО «громадянин перестав бути високопоставленим чиновником», ТО
«він піддається митному огляду» ( ).
2) ЯКЩО «громадянин є високопоставленим чиновником», ТО «він не
піддається митному огляду» ( ).
3) ЯКЩО «громадянин не піддається митному огляду», ТО «не виключається
можливість перевезення наркотиків» ( ).
4) ЯКЩО «кількість громадян, які проходять митний огляд, велика», ТО
«контролер відчуває втому» ( ).
5) ЯКЩО «контролер відчуває втому», ТО «не виключається можливість
перевезення наркотиків» ( ).
6) ЯКЩО «громадянин піддається митному огляду» І «щодо цього
громадянина є агентурна інформація», ТО «виключається можливість
перевезення наркотиків» ( ).
7) ЯКЩО «громадянин піддається митному огляду» І «контролер використовує
нові технічні засоби», ТО «виключається можливість перевезення наркотиків»
( ).
Наразі припустимо, що на митному пункті контролю склалася наступна
поточна ситуація.
Серед громадян, які в'їжджають до країни, є високопосадовці ( ) .
Кількість громадян, які піддаються митному огляду, невелика ( ).
Митний пункт контролю оснащений новітніми технічними засобами ( ).
Будь-яка попередня інформація про наявність наркотиків у громадян відсутня (
). Тут у дужках вказані міри істинності відповідних нечітких
висловлювань.

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), "Громадяни будуть піддані митному
огляду.");

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), "Не виключається можливість
перевезення наркотиків.");
22
Tuple<double, string> on_rule_4 = New Tuple<double,
string>(Math.Min(1.0 - situations[1].Item1, rules[3].Item1), "Контролер відчуває
втому.");
Tuple<double, string> on_rule_5 = New Tuple<double, string>
(Math.Min(on_rule_4.Item1, rules[4].Item1), "Не виключається можливість
перевезення наркотиків.");
Tuple<double, string> on_rule_6 = new Tuple<double, string>
наркотиків.");
Tuple<double, string> on_rule_7 = New Tuple<double,
string>(Math.Min(Math.Min(on_rule_1.Item1, situations[2].Item1), rules[6].Item1),
"Виключається можливість перевезення наркотиків. ");
result_1_value = New Tuple<double, string>(Math.Max(on_rule_6.Item1,
on_rule_7.Item1), "Виключається можливість перевезення наркотиків.");
result_2_value = New Tuple<double, string>(Math.Max(on_rule_3.Item1,
on_rule_5.Item1), "Не виключається можливість перевезення наркотиків.");
}
/// <summary>
/// Функція виведення консоль результатів обчислення.
/// </summary>
/// <param name="results">Масив результатів</param>
static void PrintResult(Tuple<double, string>[] results)
{
for(int i = 0; i < results.Length; ++i)
{
Console.WriteLine($"Значення істинності: {results[i].Item1} першого
нечіткого висловлювання: {results[i].Item2}");
}
}
static void Main(string[] args)
{
Tuple<double, string> rule_1 = new Tuple<double, string>(1.0, "ЯКЩО
громадянин не є високопоставленим чиновником, ТО він піддається митному
огляду.");
Tuple<double, string> rule_2 = new Tuple<double, string>(0.9, "ЯКЩО
громадянин є високопоставленим чиновником, ТО він не піддається митному
огляду.");

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, "ЯКЩО
громадянин піддається митному огляду І контролер використовує новітні
технічні засоби," + "ТО виключається можливість перевезення наркотиків.");

Tuple<double, string> situation_1 = new Tuple<double, string> (0.2, "Серед


громадян, які в'їжджають у країну, знаходяться високопосадовці.");
Tuple<double, string> situation_2 = new Tuple<double, string>(0.1,
"Кількість громадян, які проходять митний огляд невелика.");
Tuple<double, string> situation_3 = new Tuple<double, string>(0.8,
"Митний пункт контролю оснащений новітніми технічними засобами.");
Tuple<double, string> situation_4 = new Tuple<double, string>(0.9, "Яка-
небудь попередня інформація про наявність наркотиків в окремих громадян
відсутня.");
Tuple<double, string>[] rules = { rule_1, rule_2, rule_3, rule_4, rule_5, rule_6,
rule_7};
Tuple<double, string>[] situations = { situation_1, situation_2, situation_3,
situation_4};
Tuple<double, string> result_1;
Tuple<double, string> result_2;
// Викликаємо метод обчислення.
Calculation(out result_1, out result_2, rules, situations);
Tuple<double, string>[] results = { result_1, result_2 };
// Викликаємо метод виведення результатів на консоль.
PrintResult(results);
}
24
}
Результати роботи програми продемонструємо у вигляді скриншота
консолі на рис. 3.1. Приклад виконання завдання за допомогою програми Excel
показано на рис 3.2.

Рис .3.1. Консоль рішення НЕС

Рис .3.2. Скриншот програми

Перелік питань на захист

Вирішити
Нечітка імплікація:T(A) = 0.8, T(B) = 0.5
1) Л. Заде: =
25
2) Э. Мамдани: =
3) Я. Лукасевич: =
4) Дж. Гоген: =
2. Нечітка еквівалентність: =

26
ЛАБОРАТОРНА РОБОТА №4

Тема: «Система нечітких продукцій для діагностики несправності автомобіля»

Постановка задачі: У цій лабораторній роботі розглядаємо системи


нечітких продукцій. І як приклад, буде вивчена ситуація пошуку
несправностей в автомобілі за допомогою обліку знань експерта -
електромеханіка.
З цією метою як причини або причини несправності розглядаємо безліч
, в якому - "несправність акумулятора", - "несправність
карбюратора", - "низька якість бензину", - "несправність системи
запалення". Як другий універсум розглянемо безліч висновків або проявів
несправності, де y1 - "двигун не запускається", y2 - "двигун працює
нестійко", y3 - "двигун не розвиває повної потужності".
Причинний взаємозв'язок між безліччю передумов і безліччю наслідків
представлений у вигляді бінарного нечіткого відношення
, заданого у формі матриці цього нечіткого

відношення :
Перепишемо для наочності матрицю нечітких відносин як правил
нечітких продукций:
1) ЯКЩО « », ТО « » ( ).
2) ЯКЩО « », ТО « » ( ).
3) ЯКЩО « », ТО « » ( ).
4) ЯКЩО « », ТО « » ( ).
5) ЯКЩО « », ТО « » ( ).
6) ЯКЩО « », ТО « » ( ).
7) ЯКЩО « », ТО « » ( ).
8) ЯКЩО « », ТО « » ( ).
9) ЯКЩО « », ТО « » ( ).
10) ЯКЩО « », ТО « » ( ).
27
11) ЯКЩО« », ТО « » ( ).
12) ЯКЩО « », ТО « » ( ).
Тепер припустимо, що результати огляду конкретного автомобіля
показують, що двигун не запускається, хоча раніше працював стійко та
розвивав повну потужність. У дужках вказані міри істинності відповідних
нечітких висловлювань.
Двигун автомобіля не запускається ( ).
Двигун працює нестійко ( ).
Двигун не розвиває повну потужність ( ).

Завдання - від значень Fi відняти (або додати) в якості десятих останню


цифру залікової книжки, наприклад цифра 3 тоді вихідне значення F1 = (1,0 –
0,3) = 0,7 і т.д.

Хід роботи
Розглянемо один із можливих способів вирішення даної проблеми з
використанням прямого методу виведення, правила для оцінки однакових
висновків. З цією метою послідовно розглянемо усі правила отримання
відповідних висновків.
Напишемо мовою програмування «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);
}
}
Результати роботи програми продемонструємо у вигляді скриншота консолі:

Рис. 3.1. Висновки нечіткої експертної системи


31
Рис.3.2 Програма у Excel

Перелік питань на захист

Вирішити
Нехай U = {0,1,2, ... 120} - Можливий вік людини. Виступаючи у ролі
експерта, побудуйте графіки функцій належності наступних нечітких множин
за допомогою методу парних порівнянь: А - молодий, В - старий, С – дуже
молодий, D – не старий. Запишіть ці множини в стандартній формі.

32
ЛАБОРАТОРНА РОБОТА № 5

Тема «Створення проекту в програмі «fuzzyTECH»»

Постановка задачі: Мета лабораторної роботи - ознайомлення із


програмою розробки «fuzzyTech» систем нечіткого виведення (НЕС) та
побудова відповідної прикладної програми в даному середовищі.
Змоделювати систему керування опаленням приміщення з погляду
оператора дистанційного керування тепловим пунктом будинку. Як вхідні дані
системи виступають значення: температура повітря зовнішнього
(навколишнього) середовища та температура повітря у приміщенні. Як вихідні
параметри системи буде відсоток відкриття вентиля (клапана) приладу
обігрівача.

Завдання - за прикладом наведених нижче етапів розробити програму для


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

Хід роботи
1) Спочатку створимо вищеописані параметри (змінні) системи та задамо
діапазони вимірювань для даних змінних. А також скоригуємо функції
(графіки) власності цих змінних.
Для вхідних змінних:
a. Змінна "Air_Temperature_Inside":

Рис. 5.1 Змінна температура повітря всередині приміщення у програмі


FuzzyTECH

33
Рис. 5.2 – Налаштування параметрів змінної температури повітря всередині
приміщення

Рис. 5.3 – Функції належності змінної температури повітря усередині


приміщення
b. Змінна "Air_Temperature_Outside":

Рис. 5.4 – Змінна температура повітря зовні у програмі FuzzyTECH

34
Рис. 5.5 – Налаштування параметрів змінної температури повітря зовні

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


Для вихідних змінних:
Змінна "Heater_Valve_Position":

Рис. 5.7 – Змінна положення вентиля обігрівача у програми FuzzyTECH

35
Рис. 5.8 – Налаштування параметрів змінної положення вентиля обігрівача

Рис. 5.9 – Функції належності змінної положення вентиля обігрівача

2) Наступним кроком, коли всі змінні визначені та налаштовані, створимо


базу правил, на основі якої буде працювати наша нечітка система:
Опишемо всі експертно-створені правила у вигляді наступних виразів:
Правило 1. ЯКЩО "температура повітря в приміщенні низька" І
"температура повітря зовні низька", ТО "становище вентиля відкрито".
Правило 2. ЯКЩО "температура повітря в приміщенні низька" І
"температура повітря зовні середня", ТО "становище вентиля відкрито".
36
Правило 3. ЯКЩО "температура повітря в приміщенні низька" І
"температура повітря зовні висока", ТО "становище вентиля середнє".
Правило 4. Якщо «температура повітря в приміщенні середня» та
«температура повітря зовні низька», то «становище вентиля середнє».
Правило 5. ЯКЩО «температура повітря в приміщенні середня» та
«температура повітря зовні середня», ТО «становище вентиля середнє».
Правило 6. ЯКЩО «температура повітря в приміщенні середня» І
«температура повітря зовні висока», ТО «положення вентиля закрите».
Правило 7. Якщо «температура повітря в приміщенні висока» та
«температура повітря зовні низька», то «становище вентиля закрите».
Правило 8. Якщо «температура повітря в приміщенні висока» та
«температура повітря зовні середня», то «становище вентиля закрите».
Правило 9. ЯКЩО «температура повітря у приміщенні висока» І
«температура повітря зовні висока», ТО «положення вентиля закрито».

Рис 5.10 - Графічний елемент основи правил на принциповій схемі.

Рис. 5.11 - Безпосередньо сама база правил системи у вигляді логічних виразів

3) Третім етапом побудови продемонструємо загальний вигляд


розробленої системи та структурні зв'язки її елементів:

37
Рис. 5. 12 - Структурна схема нечіткої системи у програми FuzzyTECH. Видно
три змінні і база правил які пов'язані між собою
4) Запустимо програму і проаналізуємо отримані результати системи при
деяких довільних заданих значеннях.
Нехай поставимо змінній температури повітря зовнішнього середовища та
змінній температури повітря всередині приміщення значення: 0 і 20 відповідно.
Тоді система порекомендує орератору встановити вентиль обігрівального
пристрою на зразкове значення 50 відсотків від максимального робочого ходу:

Рис 5.13. – Результати рекомендації системи на основі перших вхідних даних

Змінимо значення вхідних даних на значення 10 та -5 (відповідно


температура повітря всередині приміщення та температура повітря зовні) та
подивимося результати нечіткої системи:

38
Рис 5.14 – Результати рекомендації системи з урахуванням других вхідних
даних

Додатково, для наочності, продемонструємо графічну інтерпретацію


залежності у вигляді тривимірного графіка:

Рис 5.15 – Графічна тривимірна інтерпретація

Висновки щодо роботи (приклад)


У цій лабораторній роботі ми побудували нечітку систему рекомендацій
опалення приміщення за двома вхідними параметрами: температура
зовнішнього середовища та температура внутрішнього середовища.

39
Як можна бачити за результатами експериментів, система працює
коректно у штатному режимі та виконує поставлені завдання. Збої та помилки
відсутні. Завдання виконані.

Перелік питань на захист

Вирішити
Нехай U – ціни автомобілів,
3000 < u < 50000 у.е.
(Ум.од.). Виступаючи у ролі експерта, побудуйте графіки функцій
належностей наступних нечітких множин:
А – ціни автомобілів для середнього класу
В – ціни автомобілів для багатих людей
С - ціни автомобілів для небагатих людей
Для кожної кривої знайдіть відповідну формулу та запишіть функції
належності аналітично.

40
ЛАБОРАТОРНА РОБОТА № 6

Тема «Створення нечіткої системи кредитування покупця у програмі


«FuzzyTECH»»

Постанова задачі: Метою роботи є розробка системи нечіткого висновку


для видачі кредиту та побудова відповідної прикладної програми у середовищі
«FuzzyTech».

Завдання - Потрібно змоделювати систему кредитування дебітора. Як


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

Хід роботи 1) Спочатку створимо вищеописані параметри (змінні)


системи та задамо діапазони вимірювань для даних змінних. А також
скоригуємо функції (графіки) власності цих змінних.
Для вхідних даних:

Рис. 6.2. – Функції належності змінної зарплати дебітора (низька, середня,


висока у доларах США)

b. Змінна "Work":

41
Рис. 6.3. - Змінна типу зайнятості дебітора у програми FuzzyTECH

Рис. 6.4. – Налаштування параметрів змінної типу зайнятості дебітора (годин за


два тижні роботи)

Рис. 6.5. – Функції належності змінної типу зайнятості дебітора

с. Змінна "Age":
42
Рис. 6.7 - Змінна віку дебітора у програми FuzzyTECH

Рис. 6.8 – Налаштування параметрів змінної віку дебітора

Ри
с. 6.9 – Функції належності змінної віку дебітора

43
Для вихідних змінних:
d. Змінна "Credit":

Рис. 6.10 – Вихідна змінна кредит, що видається дебітору

Рис. 6.11 – Налаштування характеристик вихідної змінної кредиту, що


видається

Рис. 6.12 – Функції належності змінної кредиту, що видається

2) Наступним кроком, коли всі змінні визначені та налаштовані, створимо


базу правил, на основі якої буде працювати наша нечітка система видачі
кредиту:
44
Опишемо всі експертно створені правила у вигляді наступних виразів.
Усього налічуватиметься 27 скомбінованих правил:
Правило 1. ЯКЩО "дохід дебітора низький" І "тип зайнятості дебітора є
навчання" І "дебітор молодого віку", ТО "видача кредиту низька".
Правило 2. ЯКЩО "дохід дебітора низький" І "тип зайнятості дебітора є
навчання" І "дебітор середнього віку", ТО "видача кредиту низька".
Правило 3. ЯКЩО "дохід дебітора низький" І "тип зайнятості дебітора є
навчання" І "дебітор похилого віку", ТО "видача кредиту низька".
Правило 4. ЯКЩО "дохід дебітора низький" І "тип зайнятості дебітора є
неповна зайнятість" І "дебітор молодого віку", ТО "видача кредиту низька".
Правило 5. ЯКЩО "дохід дебітора низький" І "тип зайнятості дебітора є
неповна зайнятість" І "дебітор середнього віку", ТО "видача кредиту низька".
Правило 6. ЯКЩО «Дохід дебітора низький» І «Тип зайнятості дебітора є
неповна зайнятість» І «Дебітор похилого віку», ТО «Видача кредиту низька».
Правило 7. ЯКЩО "дохід дебітора низький" І "тип зайнятості дебітора є
повна зайнятість" І "дебітор молодого віку", ТО "видача кредиту низька".
Правило 8. ЯКЩО «Дохід дебітора низький» І «Тип зайнятості дебітора є
повна зайнятість» І «Дебітор середнього віку», ТО «Видача кредиту середня».
Правило 9. ЯКЩО «Дохід дебітора низький» І «Тип зайнятості дебітора є
повна зайнятість» І «Дебітор похилого віку», ТО «Видача кредиту низька».
Правило 10. ЯКЩО «дохід дебітора середній» І «тип зайнятості дебітора є
навчання» І «дебітор молодого віку», ТО «Видача кредиту низька».
Правило 11. ЯКЩО «дохід дебітора середній» І «тип зайнятості дебітора є
навчання» І «дебітор середнього віку», ТО «Видача кредиту середня».
Правило 12. ЯКЩО «дохід дебітора середній» І «тип зайнятості дебітора є
навчання» І «дебітор похилого віку», ТО «Видача кредиту низька».
Правило 13. ЯКЩО «Дохід дебітора середній» І «Тип зайнятості дебітора
є неповна зайнятість» І «Дебітор молодого віку», ТО «Видача кредиту
середня».
Правило 14. ЯКЩО «Дохід дебітора середній» І «Тип зайнятості дебітора
є неповна зайнятість» І «Дебітор середнього віку», ТО «Видача кредиту
середня».
Правило 15. ЯКЩО «дохід дебітора середній» І «тип зайнятості дебітора є
неповна зайнятість» І «дебітор похилого віку», ТО «Видача кредиту середня».
Правило 16. ЯКЩО «Дохід дебітора середній» І «Тип зайнятості дебітора
є повна зайнятість» І «Дебітор молодого віку», ТО «Видача кредиту середня».

45
Правило 17. ЯКЩО «дохід дебітора середній» І «тип зайнятості дебітора є
повна зайнятість» І «дебітор середнього віку», ТО «Видача кредиту середня».
Правило 18. ЯКЩО «дохід дебітора середній» І «тип зайнятості дебітора є
повна зайнятість» І «дебітор похилого віку», ТО «Видача кредиту середня».
Правило 19. ЯКЩО «дохід дебітора високий» І «тип зайнятості дебітора є
навчання» І «дебітор молодого віку», ТО «Видача кредиту середня».
Правило 20. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
навчання" І "дебітор середнього віку", ТО "видача кредиту висока".
Правило 21. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
навчання" І "дебітор похилого віку", ТО "видача кредиту висока".
Правило 22. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
неповна зайнятість" І "дебітор молодого віку", ТО "видача кредиту висока".
Правило 23. ЯКЩО «дохід дебітора високий» І «тип зайнятості дебітора є
неповна зайнятість» І «дебітор середнього віку», ТО «Видача кредиту висока».
Правило 24. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
неповна зайнятість" І "дебітор похилого віку", ТО "видача кредиту висока".
Правило 25. ЯКЩО «дохід дебітора високий» І «тип зайнятості дебітора є
повною зайнятістю» І «дебітор молодого віку», ТО «видача кредиту висока».
Правило 26. ЯКЩО "дохід дебітора високий" І "тип зайнятості дебітора є
повна зайнятість" І "дебітор середнього віку", ТО "видача кредиту висока".
Правило 27. ЯКЩО «Дохід дебітора високий» І «Тип зайнятості дебітора є
повна зайнятість» І «Дебітор похилого віку», ТО «Видача кредиту висока».

Рис 6.13 - Графічний елемент основи правил на принциповій схемі

46
Рис 6.14 – База правил нечіткої експертної системи у вигляді логічних виразів
«ЯКЩО …. ТО»

3) Третім етапом побудови продемонструємо загальний вигляд


розробленої системи та структурні зв'язки її елементів:

Рис 6.15. – Структурна схема нечіткої експертної системи. Видно що чотири


змінні і база правил, пов'язані між собою

Запустимо програму і проаналізуємо отримані результати системи при


деяких довільних заданих значеннях. Нехай поставимо такі вхідні значення
нечіткої системи: вік дебітора буде 30 років, дохід дорівнює 1000 доларам на
місяць, а зайнятість на роботі визначатиметься як 100 відсотків (тобто повна

47
зайнятість). Тоді система за даними параметрами порадить нам видати кредит
у розмірі 500 доларів дебітору.

Рис 6.16. – Результати рекомендації системи на основі перших вхідних даних

Тепер змінимо вхідні дані (до кредитора прийшов інший дебітор): його
вік буде 60 років, зарплата 600 доларів, а параметр роботи буде відповідати 50
відсоткам, що можна трактувати як часткову зайнятість. Тоді отримаємо
результат рекомендації кредиту у розмірі 134,88 доларів.

Рис 6.17. – Результати рекомендації системи на основі других вхідних даних

Для наочності, продемонструємо також графічну інтерпретацію


залежності у вигляді тривимірного графіка (ріс. 6.18)

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

Тема «Розробка експертної системи для визначення розміру чайових у


ресторані».

Завдання: побудувати програму (НЕС) у пакеті FuzzyTECH для


визначення розміру балів при оцінці категорії (привласнення зірки) у
ресторані.

Виконання: для початку створимо змінну FoodQuality, яка буде


відповідати за якість їжі. Їжу оцінюватимемо за шкалою від 0 до 100 балів
(рис.7.1).

Рис .7.1 Вікно редактора програми

Редагуємо властивості функцій (назва та тип – сплайн) (рис.7.2):

50
Рис.7.2. Вікно вібору функції належності

І також підправляем графіки (функції належності) (рис.7.3):

Рис .7.3. Функції належності (ФН) «Якість їжі»

Аналогічно створимо таку саму змінну з назвою ServiceQuality, яка буде


відповідати за якість обслуговування. Для зручності можна просто зробити
дублікат першої і змінити назву.
Далі створимо вихідну змінну, яка буде відповідати за кількість балів.
Мінімальне значення 0, максимальне - 20 (рис.7.4).

51
Рис.7.4 Вікно редактору

Перейдемо до створення бази правил, позначаючи вхідні та вихідні


параметри (рис.7.5):

Рис.7.5. Редактор бази правил (БП)


Перебираємо всі можливі комбінації БП (рис.7.6)

Рис.7.6. Вікно налаштування БП


52
Протестуємо програму. Запускаємо її та вводимо дані про якість
обслуговування та якість їжі за 100-бальною шкалою (7.7):

Рис. 7.7 Вікно програми розрахунку балів

Як видно з рисунка 7.7 при обслуговуванні 40 балів і якості їжі 50 балів,


система наруховує 12 балів.
Спробуємо інші вхідні дані (рис .7.8):

Рис.7.8. Вікно програми розрахунку балів ресторану

Перелік питань на захист

Вирішити
Нехай U – безліч дисциплін, що вивчаються у поточному семестрі.
Надайте значення кожній дисципліні і, виступаючи в ролі експерта,
запишіть нечіткі множини:
А – мені подобається ця дисципліна
В – я не розумію цю дисципліну
З – мені не подобається ця дисципліна
D – Я хотів би вивчати цю дисципліну глибше
Уявіть розкладання кожної з нечітких множин за множинами рівня.

53
ЛАБОРАТОРНА РОБОТА № 8

Тема «Розробка нечіткої експертної системи оцінки рівня зарплати кандидату


на посаду»

Задача: Розробка НЕС залежно від досвіду роботи та необхідних навичок


кандидата на роботу.

Хід роботи:

1. Створити вхідну змінну «Навички роботи» (рис.8.1)

Рис. 8.1 Вікно редактора «Навички роботи»

Редагуємо ФН змінної «Навички роботи» (рис .8.2)

54
Рис. 8.2. Функції належності (ФН) ««Навички роботи»

2. Створюємо другу вхідну змінну - «Досвід Роботи»

Рис. 8.3. Вікно редактору «Досвід роботи»


Редагуємо ФН:

55
Рис. 8.4. Редактор функції належності «Досвід роботи»

3. Створюємо вихідну змінну «Зарплата»:

Рис. 8.5. Вікно редактору «Зарплата»

Редагуємо ФН змінної:

56
Рис. 8.6. Вікно редактору ФН «Заробітна плата »

4. Створюємо базу правил:

Рис. 8.7. Вікно графічного редактора НЕС


Редактор БП

Рис. 8.8. Вікно редактору БП

5. Результат роботи (рис.8.9 -8.10):


57
Рис. 8.9. Вікна НЕС «Заробітна плата»

Рис. 8.10 Тривимірна поверхня результату роботи програми

Перелік питань на захист

1. Властивості мінімаксних та максимінних операцій над нечіткими


множинами.
2. Алгоритм Мамдані: фаззифікація, активізація, імплікація, агрегування.
3. Методи дефаззифікації.
4. Алгоритм Сугено.

58
ПРАВИЛА ОФОРМЛЕННЯ ПОЯСНЮВАЛЬНОЇ ЗАПИСКИ

1. Текстовий та графічний матеріали записки друкують комп'ютерним


способом на одному боці односортних білих аркушів формату А4 (розмір 210
H 297 мм) через 1,5 міжрядковий інтервал, текст вирівнюють по ширині
аркуша. Текстовий редактор – Word з пакета Microsoft Office, Open Office
Writer, Star Office Writer та ін. Шрифт – Times New Roman Cyr, 14.
2 . Оформлення ілюстрацій
Усі ілюстрації в пояснювальній записці (креслення, схеми, фотографії,
діаграми, графіки) називають рисунками.
Кількість ілюстрацій має бути достатньою для пояснення тексту, який
викладається. Ілюстрації потрібно розміщувати як по тексту записки (якомога
ближче до відповідних частин тексту), так і в кінці його або наводити в
додатках. Ілюстрації належить виконувати у відповідності до вимог стандартів
ЄСКД і ЕСПД за допомогою різних графічних редакторів та систем
автоматизованого проектування.
Усі ілюстрації послідовно нумерують у межах розділу арабськими
цифрами. Номер ілюстрації складається з номера розділу і порядкового номера
ілюстрації, наприклад, «Рис 2.5 Граф алгоритму». Посилання на ілюстрації
подають так: «... на рис. 2.5 ...» . Повторне посилання на ілюстрацію наводять
із скороченням слова «дивись», наприклад, «... див. рис. 2.5 ...». Допускається
нумерація ілюстрацій у межах лабораторної роботи.
Ілюстрації повинні мати назву, яку розміщують під ілюстрацією в одному
рядку з її номером, наприклад, «Рис. 3.2. Схема». За потреби під назвою
ілюстрації записують пояснювальні дані
Розмір шрифту всіх без винятку надписів у рисунках має бути таким
самим, як і в тексті пояснювальної записки.
Ілюстрації розміщують так, щоб їх можна було розглядати, не повертаючи
аркуш або повертаючи його за ходом стрілки годинника.

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.

Додаткова література

1. Михайленко В.С. Порівняльний аналіз методів аналізу ієрархій та


нечіткої логіки в системі підтримки прийняття рішень [Текст]/В.С.
Михайленко// Інформаційні інтелектуальні системи: матеріали XV Міжнарод.
наук. -техн. конф. - Харків, ХПІ, 2011. - С. 297 - 298.
2. Михайленко В.С. Використання інтелектуальних систем підтримки
прийняття рішень на автоматизації процесів управління судном [Текст] / В.С.
Михайленко// Сучасні інформаційні та інноваційні технології на транспорті
MINTT-2011: матеріали III Міжнарод. наук. -Практ. конф. Том. 1. - Херсон:
ХДМА, 2011. - С. 32 - 33.
3. Михайленко В.С. Методи дефазифікації в алгоритмах нечіткого
виведення [Текст]/В.С. Михайленко // Інформатика, інформаційні системи та
технології: матеріали VIII Регіональ. конф. молоді вчені. - Одеса: ОНУ, 2011. -
С. 34 - 35.

60
Додаток А
Одеський національний університет імені І. І. Мечникова
(повне найменування вищого навчального закладу)
Факультет математики, фізики та інформаційних технологій
(повне найменування інституту/факультету)
Кафедра комп’ютерних систем та технологій
(повна назва кафедри)

Звіт з лабораторної роботи № __

з дисципліни ДС 2 «Нечітке моделювання в інформаційних технологіях»

Тема: _ «Створення проекту в програмі «fuzzyTECH»»

Виконала: студент (ка) денної форми навчання


спеціальності 123 «Комп’ютерна інженерія»
курс___гр. ___ № З.К._____

Прізвище Ім’я По-батькові_________

Керівник д.т.н., (к.т.н.) проф. (доц.) каф___


Прізвище І. Б. _______

Одеса – 2022

61

You might also like