Калькулятор нечіткої логіки
Нечітка логіка (fuzzy logic) — це математичний апарат для роботи з невизначеністю та неточністю, який був розроблений Лотфі Заде у 1965 році. На відміну від класичної булевої логіки, де значення можуть бути лише 0 або 1 (істина/хибність), нечітка логіка дозволяє працювати з проміжними значеннями від 0 до 1, що відображає ступінь належності елемента до множини. Цей підхід наближає математичні моделі до людського способу мислення та дозволяє формалізувати такі поняття як "приблизно", "більш-менш", "дуже", "трохи" тощо.
Калькулятор нечіткої логіки
Теорія нечіткої логіки
Історія виникнення
Нечітка логіка була запропонована американським вченим Лотфі Аскером Заде (Lotfi A. Zadeh)
у 1965 році в статті "Fuzzy Sets" в журналі Information and Control. Заде, професор
Каліфорнійського університету в Берклі, усвідомив, що класична теорія множин не може
адекватно описати багато реальних ситуацій, де межі між категоріями розмиті.
Основна ідея
У класичній теорії множин елемент або належить множині (1), або не належить (0).
У нечіткій теорії множин елемент може належати множині частково, з певним ступенем
належності від 0 до 1.
Класична множина "Високі люди" (зріст > 180 см):
• 179 см → НЕ високий (0)
• 181 см → Високий (1)
Нечітка множина "Високі люди":
• 160 см → μ = 0.0 (точно не високий)
• 170 см → μ = 0.2 (трохи високий)
• 175 см → μ = 0.5 (середньо високий)
• 180 см → μ = 0.8 (досить високий)
• 190 см → μ = 1.0 (точно високий)
Базові визначення
Нечітка множина
Нечітка множина A в універсальній множині X визначається
функцією належності:
μ_A: X → [0, 1]
де μ_A(x) — ступінь належності елемента x до множини A
Формальний запис:
A = {(x, μ_A(x)) | x ∈ X}
Носій (Support)
supp(A) = {x ∈ X | μ_A(x) > 0}
Множина всіх елементів з ненульовим ступенем належності
Ядро (Core)
core(A) = {x ∈ X | μ_A(x) = 1}
Множина елементів з повною належністю
α-зріз (Alpha-cut)
A_α = {x ∈ X | μ_A(x) ≥ α}
Класична множина елементів з належністю не менше α
Висота (Height)
hgt(A) = sup{μ_A(x) | x ∈ X}
Максимальний ступінь належності
Нормальна нечітка множина
A є нормальною, якщо hgt(A) = 1
Тобто існує хоча б один елемент з μ = 1
Функції належності
Трикутна функція (Triangular)
⎧ 0, x ≤ a
⎪ (x-a)/(b-a), a < x ≤ b
μ(x) = ⎨ (c-x)/(c-b), b < x < c
⎪ 0, x ≥ c
⎩
Параметри: a (ліва межа), b (пік), c (права межа)
Позначення: trimf(x; a, b, c)
Застосування: Найпростіша функція, використовується для моделювання
"приблизно рівно b", наприклад "температура приблизно 25°C".
Трапецієподібна функція (Trapezoidal)
⎧ 0, x ≤ a
⎪ (x-a)/(b-a), a < x < b
μ(x) = ⎨ 1, b ≤ x ≤ c
⎪ (d-x)/(d-c), c < x < d
⎩ 0, x ≥ d
Параметри: a, b (ліва сторона), c, d (права сторона)
Позначення: trapmf(x; a, b, c, d)
Застосування: Моделювання діапазонів "від b до c",
наприклад "комфортна температура 20-24°C".
Гаусова функція (Gaussian)
μ(x) = exp(-(x-c)²/(2σ²))
Параметри: c (центр), σ (стандартне відхилення/ширина)
Позначення: gaussmf(x; σ, c)
Застосування: Гладка функція для моделювання "приблизно c"
з плавним спаданням. Широко використовується в нейро-нечітких системах.
Узагальнена дзвоноподібна функція (Generalized Bell)
μ(x) = 1 / (1 + |((x-c)/a)|^(2b))
Параметри: a (ширина), b (нахил), c (центр)
Позначення: gbellmf(x; a, b, c)
Застосування: Гнучка функція з налаштовуваним нахилом.
При b → ∞ наближається до прямокутної.
Сигмоїдна функція (Sigmoid)
μ(x) = 1 / (1 + exp(-a(x-c)))
Параметри: a (нахил), c (точка перегину)
Позначення: sigmf(x; a, c)
• a > 0: зростаюча функція (S-подібна)
• a < 0: спадаюча функція (Z-подібна)
Застосування: Моделювання понять "великий" (зростаюча)
або "малий" (спадаюча) без верхньої/нижньої межі.
Подвійна сигмоїда (Difference of Sigmoids)
μ(x) = sigmf(x; a₁, c₁) - sigmf(x; a₂, c₂)
де c₁ < c₂, a₁ > 0, a₂ > 0
Позначення: dsigmf(x; a₁, c₁, a₂, c₂)
Застосування: Асиметричні гладкі функції належності.
Pi-функція (π-function)
μ(x) = S(x; a, b) × (1 - S(x; c, d))
де S — S-подібна функція
Параметри: a, b, c, d
Операції над нечіткими множинами
Базові операції (за Заде)
Об'єднання (Нечітке АБО)
μ_{A∪B}(x) = max(μ_A(x), μ_B(x))
Приклад:
A = "молодий", B = "середнього віку"
A ∪ B = "молодий АБО середнього віку"
Перетин (Нечітке І)
μ_{A∩B}(x) = min(μ_A(x), μ_B(x))
Приклад:
A = "високий", B = "молодий"
A ∩ B = "високий І молодий"
Доповнення (Нечітке НЕ)
μ_{¬A}(x) = 1 - μ_A(x)
Приклад:
A = "холодний"
¬A = "НЕ холодний" (теплий)
T-норми та S-норми
Операції min/max — не єдиний спосіб реалізації нечітких І/АБО.
Існують узагальнені класи операцій:
T-норми (для нечіткого І)
Мінімум (Заде): T(a,b) = min(a,b)
Добуток: T(a,b) = a × b
Лукасевича: T(a,b) = max(0, a+b-1)
Драстичний добуток: T(a,b) = a, якщо b=1
= b, якщо a=1
= 0, інакше
S-норми (для нечіткого АБО)
Максимум (Заде): S(a,b) = max(a,b)
Ймовірнісна сума: S(a,b) = a + b - a×b
Лукасевича: S(a,b) = min(1, a+b)
Драстична сума: S(a,b) = a, якщо b=0
= b, якщо a=0
= 1, інакше
Лінгвістичні модифікатори (Hedges)
Модифікатори дозволяють змінювати ступінь належності,
імітуючи природну мову:
ДУЖЕ (VERY): μ' = μ²
Концентрація — звуження множини
БІЛЬШ-МЕНШ (SOMEWHAT): μ' = √μ
Розмивання — розширення множини
НАДЗВИЧАЙНО (EXTREMELY): μ' = μ³
ТРОХИ (SLIGHTLY): μ' = √μ - μ
Виділення перехідної зони
ПІДСИЛЕННЯ (INTENSIFY): μ' = 2μ², якщо μ ≤ 0.5
μ' = 1-2(1-μ)², якщо μ > 0.5
Приклад:
A = "високий", μ_A(180) = 0.8
ДУЖЕ A: μ'(180) = 0.64
БІЛЬШ-МЕНШ A: μ'(180) = 0.894
Нечітка імплікація
Імплікація "ЯКЩО A ТО B" має різні інтерпретації:
Імплікація Мамдані: μ(a→b) = min(a, b)
Імплікація Ларсена: μ(a→b) = a × b
Імплікація Клене: μ(a→b) = max(1-a, b)
Імплікація Рейхенбаха: μ(a→b) = 1 - a + a×b
Імплікація Гьоделя: μ(a→b) = 1, якщо a ≤ b
= b, інакше
Нечіткий висновок та дефаззифікація
Система нечіткого висновку
Типова нечітка система складається з етапів:
1. ФАЗЗИФІКАЦІЯ
Перетворення чітких вхідних значень на ступені належності
x = 25°C → μ_теплий(25) = 0.8, μ_гарячий(25) = 0.2
2. БАЗА ПРАВИЛ
ЯКЩО температура ТЕПЛА ТО вентилятор СЕРЕДНІЙ
ЯКЩО температура ГАРЯЧА ТО вентилятор ВИСОКИЙ
3. МЕХАНІЗМ ВИСНОВКУ
Застосування правил з урахуванням ступенів належності
4. АГРЕГАЦІЯ
Об'єднання результатів усіх правил
5. ДЕФАЗЗИФІКАЦІЯ
Перетворення нечіткого результату на чітке значення
Метод Мамдані
Найпопулярніший метод нечіткого висновку, запропонований
Ебрахімом Мамдані у 1975 році:
Для правила: ЯКЩО x є A ТО y є B
1. Обчислити ступінь активації правила:
α = μ_A(x₀)
2. Обрізати функцію належності B на рівні α:
μ_B'(y) = min(α, μ_B(y))
3. Для кількох правил — об'єднати результати:
μ_результат(y) = max(μ_B₁'(y), μ_B₂'(y), ...)
4. Дефаззифікувати результат
Метод Сугено (TSK)
Альтернативний метод з функціональним виходом:
Для правила: ЯКЩО x є A ТО y = f(x)
Вихід обчислюється як зважене середнє:
y = Σ(αᵢ × fᵢ(x)) / Σαᵢ
де αᵢ — ступінь активації i-го правила
fᵢ(x) — функція виходу (зазвичай лінійна)
Методи дефаззифікації
Центр тяжіння (Centroid, COG)
y* = ∫y × μ(y) dy / ∫μ(y) dy
Для дискретного випадку:
y* = Σyᵢ × μ(yᵢ) / Σμ(yᵢ)
Найпопулярніший метод, дає плавний вихід
Бісектор (Bisector)
Знаходимо y*, що ділить площу під кривою навпіл:
∫_{-∞}^{y*} μ(y) dy = ∫_{y*}^{+∞} μ(y) dy
Середина максимуму (MOM)
y* = (y_min + y_max) / 2
де y_min, y_max — межі області максимуму
Найменший/Найбільший максимум (SOM/LOM)
SOM: y* = min{y | μ(y) = hgt(μ)}
LOM: y* = max{y | μ(y) = hgt(μ)}
Застосування нечіткої логіки
1. Системи керування
Нечіткі контролери — одне з найуспішніших застосувань:
- Метро Сендай (Японія, 1987): Перша комерційна система — керування поїздом метро з плавним гальмуванням
- Пральні машини: Визначення кількості миючого засобу та часу прання на основі забрудненості
- Кондиціонери: Плавне регулювання температури
- Автофокус камер: Визначення різкості зображення
- ABS: Антиблокувальні системи гальм
2. Медицина
- Діагностичні експертні системи
- Аналіз медичних зображень
- Прогнозування захворювань
- Дозування ліків
3. Фінанси та економіка
- Оцінка кредитного ризику
- Прогнозування курсів валют
- Портфельний аналіз
- Оцінка нерухомості
4. Штучний інтелект
- Нейро-нечіткі системи (ANFIS): Поєднання нейронних мереж та нечіткої логіки
- Нечіткі когнітивні карти: Моделювання причинно-наслідкових зв'язків
- Нечітке кластерування (Fuzzy C-Means): М'яка кластеризація даних
5. Обробка зображень
- Сегментація зображень
- Покращення контрасту
- Виявлення країв
- Розпізнавання образів
6. Робототехніка
- Навігація мобільних роботів
- Уникнення перешкод
- Керування маніпуляторами
Порівняння з іншими підходами
Нечітка логіка vs Ймовірність
| Аспект |
Нечітка логіка |
Теорія ймовірностей |
| Природа невизначеності |
Неточність, розмитість понять |
Випадковість, стохастичність |
| Інтерпретація |
μ = 0.8 означає "значною мірою належить" |
P = 0.8 означає "з ймовірністю 80%" |
| Аксіоматика |
Не вимагає Σμ = 1 |
ΣP = 1 (обов'язково) |
| Приклад |
"Том високий на 0.8" |
"Ймовірність, що Том високий, = 0.8" |
Переваги нечіткої логіки
- Природна формалізація експертних знань
- Робастність до неточних даних
- Інтерпретованість правил
- Швидка реалізація (без навчання)
- Плавність керуючих впливів
Обмеження
- Суб'єктивність вибору функцій належності
- Труднощі з багатовимірними задачами
- Відсутність автоматичного навчання (у базовому варіанті)
- Прокляття розмірності для великої кількості правил
Практичні приклади застосування
Приклад 1: Нечіткий регулятор температури
Вхідні змінні:
• Помилка (error): {NB, NS, ZE, PS, PB} — [-10, 10]°C
• Швидкість зміни помилки (dError): {N, Z, P} — [-5, 5]°C/хв
Вихідна змінна:
• Потужність нагріву: {OFF, LOW, MED, HIGH, MAX} — [0, 100]%
Правила (25 штук, фрагмент):
IF error=NB AND dError=N THEN heating=MAX
IF error=NB AND dError=Z THEN heating=MAX
IF error=NS AND dError=P THEN heating=MED
IF error=ZE AND dError=Z THEN heating=LOW
IF error=PS AND dError=N THEN heating=MED
IF error=PB AND dError=P THEN heating=OFF
Результат:
• Плавне регулювання без осциляцій
• Усунення перерегулювання
• Робота з неточними датчиками
Приклад 2: Оцінка кредитного ризику
Вхідні змінні:
• Дохід: {низький, середній, високий}
• Кредитна історія: {погана, нормальна, відмінна}
• Сума кредиту: {мала, середня, велика}
• Застава: {відсутня, часткова, повна}
Вихід: Ризик — {дуже_низький, низький, середній, високий, дуже_високий}
Приклад правил:
IF дохід=високий AND історія=відмінна AND застава=повна
THEN ризик=дуже_низький
IF дохід=низький AND історія=погана AND сума=велика
THEN ризик=дуже_високий
IF дохід=середній AND історія=нормальна AND застава=часткова
THEN ризик=середній
Переваги:
• Пояснюваність рішень (регуляторні вимоги)
• Врахування "сірих зон"
• Легке оновлення правил експертами
Приклад 3: Автоматичне паркування
Входи:
• Відстань до правої стіни: {близько, оптимально, далеко}
• Кут автомобіля: {ліво, прямо, право}
• Відстань до заду: {небезпечно, близько, безпечно}
Виходи:
• Кут керма: {різко_ліво, ліво, прямо, право, різко_право}
• Швидкість: {назад_швидко, назад_повільно, стоп}
Приклад правил:
IF кут=ліво AND відстань_право=далеко
THEN керма=право AND швидкість=назад_повільно
IF відстань_зад=небезпечно
THEN швидкість=стоп (пріоритетне правило)
Реалізація в реальних системах:
• Toyota (1991) — перше нечітке паркування
• Сучасні системи — гібрид нечіткої логіки + навчання
Нечіткі нейронні мережі (Neuro-Fuzzy)
ANFIS (Adaptive Neuro-Fuzzy Inference System)
Поєднання інтерпретованості нечіткої логіки
з навчанням нейронних мереж.
Архітектура (5 шарів):
Шар 1: Фуззифікація (параметри функцій належності)
Шар 2: Правила (T-норми: AND)
Шар 3: Нормалізація вагів правил
Шар 4: Нечіткі наслідки (TSK-модель)
Шар 5: Агрегація (сума)
Навчання:
• Градієнтний спуск для параметрів ФН
• МНК для параметрів наслідків
• Гібридний алгоритм (поєднання обох)
Застосування:
• Прогнозування часових рядів
• Апроксимація функцій
• Класифікація патернів
Нечіткий c-means кластеризація
Замість жорсткого віднесення до кластера —
ступінь належності до кожного.
Цільова функція:
J_m = Σᵢ Σⱼ u_ij^m × ||x_i - c_j||²
де u_ij — ступінь належності точки i до кластера j
m > 1 — параметр "розмитості" (зазвичай m=2)
Оновлення:
u_ij = 1 / Σₖ (||x_i - c_j|| / ||x_i - c_k||)^(2/(m-1))
c_j = Σᵢ u_ij^m × x_i / Σᵢ u_ij^m
Переваги:
• Робастність до викидів
• Виявлення перекриттів кластерів
• М'яке присвоєння міток
Type-2 Fuzzy Logic (нечітка логіка 2-го типу)
Мотивація
Проблема Type-1: невизначеність у самих функціях належності
"Висока температура" — різні експерти дадуть різні ФН!
Type-2: функція належності сама є нечіткою множиною
μ_Ã(x) = ∫_u f_x(u)/u, u ∈ [0, 1]
де f_x(u) — вторинна ФН
Interval Type-2 (IT2)
Спрощення: f_x(u) = 1 для u ∈ [μ_lower(x), μ_upper(x)]
Footprint of Uncertainty (FOU):
Область між верхньою та нижньою межами ФН
1 | ╱───────╲ upper MF
| ╱ FOU ╲
| ╱ ╱───────╲ ╲ lower MF
0 |___╱___________╲___
a b c d
Type Reduction:
Перетворення IT2 результату в звичайний інтервал
Методи: Karnik-Mendel, Wu-Mendel, EKM
Дефуззифікація:
Центр інтервалу: y = (y_l + y_r) / 2
Застосування Type-2
- Зашумлені середовища (робастність)
- Невизначеність у лінгвістичних термах
- Обробка сигналів
- Керування в умовах високої невизначеності
Нечіткі множини вищих порядків
Intuitionistic Fuzzy Sets (IFS)
Atanassov (1983): додатковий параметр — non-membership
A = {(x, μ_A(x), ν_A(x)) : x ∈ X}
де:
μ_A(x) — ступінь належності
ν_A(x) — ступінь неналежності
π_A(x) = 1 - μ_A(x) - ν_A(x) — невизначеність
Умова: μ_A(x) + ν_A(x) ≤ 1
Приклад:
"Погода хороша":
μ = 0.6 (ступінь, в якій хороша)
ν = 0.2 (ступінь, в якій погана)
π = 0.2 (невизначеність — "ні те ні се")
Hesitant Fuzzy Sets
Torra (2010): множина можливих значень належності
h_A(x) = {γ₁, γ₂, ..., γₙ}
Приклад:
Три експерти оцінюють "висока якість":
Експерт 1: μ = 0.7
Експерт 2: μ = 0.8
Експерт 3: μ = 0.75
h_A(x) = {0.7, 0.75, 0.8}
Операції:
h_A ∪ h_B = ∪_{γ₁∈h_A, γ₂∈h_B} max(γ₁, γ₂)
Бібліотеки та інструменти
Python
- scikit-fuzzy — повнофункціональна бібліотека FIS
- simpful — простий синтаксис для нечітких систем
- fuzzylite — Python bindings до C++ бібліотеки
MATLAB
- Fuzzy Logic Toolbox — промисловий стандарт
- ANFIS — нейро-нечітке навчання
- Fuzzy Logic Designer — GUI редактор
Інші
- jFuzzyLogic (Java) — FCL стандарт
- FuzzyLite (C++) — швидка, портативна
- fuzzyr (R) — для статистичного аналізу
Приклад з scikit-fuzzy
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
# Створення змінних
temperature = ctrl.Antecedent(np.arange(0, 41, 1), 'temperature')
heating = ctrl.Consequent(np.arange(0, 101, 1), 'heating')
# Автоматичне створення ФН
temperature.automf(3, names=['cold', 'warm', 'hot'])
heating.automf(3, names=['low', 'medium', 'high'])
# Правила
rule1 = ctrl.Rule(temperature['cold'], heating['high'])
rule2 = ctrl.Rule(temperature['warm'], heating['medium'])
rule3 = ctrl.Rule(temperature['hot'], heating['low'])
# Система керування
heating_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])
sim = ctrl.ControlSystemSimulation(heating_ctrl)
# Обчислення
sim.input['temperature'] = 15
sim.compute()
print(f"Heating: {sim.output['heating']:.2f}%")
Література та ресурси
Класичні книги
- "Fuzzy Sets and Fuzzy Logic: Theory and Applications" — Klir & Yuan
- "Fuzzy Logic with Engineering Applications" — Timothy Ross
- "Introduction to Fuzzy Sets, Fuzzy Logic, and Fuzzy Control Systems" — Chen & Pham
- "Fuzzy Control Systems" — Kosko
Оригінальні статті
- Zadeh L.A. (1965) "Fuzzy Sets" — Information and Control
- Mamdani E.H. (1974) "Application of fuzzy algorithms..."
- Takagi T., Sugeno M. (1985) "Fuzzy identification..."
- Jang J.-S.R. (1993) "ANFIS..."
Практичне значення та контекст
Коротка довідка
Термін 'біофізика' виник на початку XX ст. Ходжкін і Гакслі (1952) отримали Нобелівську премію за модель нейрона.
Де застосовується
Нейрофізіологія: модель потенціалу дії Ходжкіна–Гакслі. Медична діагностика: ЕКГ, МРТ, ультразвук. Транспорт у клітині: дифузія, осмос, транспортні білки. Молекулярна біофізика: динаміка білків, фолдинг.
Часті запитання (FAQ)
Навіщо вивчати цю тему?
Ця тема є основою математичної освіти і широко застосовується в природничих науках, інженерії, економіці та комп'ютерних науках. Розуміння базових понять допомагає краще орієнтуватися у складніших розділах математики та ефективно вирішувати реальні задачі.
З чого почати вивчення теми?
Починайте з основних визначень і теорем, наведених на цій сторінці. Опрацюйте приклади розв'язання задач покроково, потім спробуйте самостійно вирішити кілька вправ. Наш калькулятор допоможе перевірити правильність відповідей.
Як користуватися цим калькулятором?
Введіть необхідні значення у відповідні поля та натисніть кнопку обчислення. Результат відобразиться одразу. Калькулятор підтримує десяткові числа та від'ємні значення — для введення від'ємного числа використовуйте знак мінус. Усі розрахунки виконуються онлайн без встановлення додаткового програмного забезпечення.
Чи можна використовувати калькулятор безкоштовно?
Так, усі калькулятори на сайті calculator.party повністю безкоштовні. Жодна реєстрація не потрібна — просто відкрийте сторінку та починайте обчислення. Калькулятори доступні 24/7 і працюють у будь-якому сучасному браузері на комп'ютері, планшеті або смартфоні.
Яка точність обчислень калькулятора?
Калькулятор використовує 64-бітну арифметику з плаваючою точкою (стандарт IEEE 754), що забезпечує точність до 15–16 значущих цифр. Для більшості практичних задач цього більш ніж достатньо. Результати округлюються до 4–6 значущих цифр для зручності читання.