ML: Нечітка логіка
Вступ
Невизначеність деякого твердження може виникати через нестачу інформації або невизначеність результатів майбутніх подій. У цих випадках, зазвичай, використовують імовірнісну логіку. Однак, іноді про твердження відомо все, але його не можна вважати істинним чи хибним. Зазвичай це оцінні, порівняльні судження: "Маша красива" (але все ж не мрія); "Кава гаряча" (але пити її вже можна). Оцінний характер мають також опозиційні нечіткі квантифікатори:
Нечітким може бути відношення: $\text{in}(x,y)$ - "об'єкт $x$ знаходиться всередині об'єкта $y$". Наприклад, "олівець у пеналі" може трохи виглядати з пенала, тим не менше перебуваючи всередині нього.
Нарешті, нечіткими можуть бути правила:
Логічні зв'язки
Будемо вважати, що оцінне судження $A$ характеризується ступенем істинності $T_A$, який є дійсним числом з діапазону $[0...1]$. Значення $T_A=0$ відповідає хибному судженню, а $T_A =1$ - істинному. Проміжні значення - це "проміжна істинність". При, наприклад, $T_A=0.7$ для $A:$ "Маша красива", означає, що твердження скоріше істинне, ніж хибне.
Ступінь істинності логічного заперечення "НЕ $A$" природно визначити таким чином:$$ \neg A:~~1-T_A. $$
Для логічних І, АБО найчастіше використовуються мінімум і максимум ступенів істинності суджень: $$ A\,\&\,B:~~~\min(T_A,T_B),~~~~~~~~~~~~~A\vee B:~~~\max(T_A,T_B). $$ Нагадаємо, що в теорії ймовірності нерівності $P(A\,\&\,B)\le \min(P_A,\,P_B)$ і $ \max(P_A,\,P_B)\le P(A\vee B)$ виконуються для будь-яких двох подій. Нечітка логіка не еквівалентна теорії ймовірностей чи ймовірнісній логіці і використовує верхню межу для кон'юнкції ($\,\&\,$) і нижню для диз'юнкції ($\vee $).
Нижче на малюнках наведені карти висот для ступенів істинності результатів логічних операцій:
Таким чином визначені логічні зв'язки задовольняють усі аксіоми булевої алгебри, за винятком закону виключеного третього: $$ A\vee \neg A = 1,~~~~~~~~~~~~~~~A\,\&\,\neg A = 0. $$ Варто це перевірити, наприклад, для $T_A=0.5$. Порушення цього закону типове для багатозначних логік, у яких вимога, щоб твердження було або істинним, або хибним, уже, очевидно, втрачає свій сенс.
Зауважимо, що в ймовірнісній логіці ступінь істинності $P(A\,\&\,B)$ залежить не тільки від $P(A)$ і $P(B)$, але й від ступеня скорельованості (залежності) цих тверджень (подій). У нечіткій логіці подібна кореляція ігнорується.
Надалі, якщо це не призводитиме до неоднозначності, замість $T_A$ будемо просто писати $A$. Тоді для заперечення $\neg A=1-A$, диз'юнкції $A\vee B =\max(A,B)$ і кон'юнкції $A\,\&\, B =\min(A,B)$.
Нечіткі множини
Істинність оцінних суджень зручно описувати за допомогою теорії множин. Кажучи про те, що "Маша красива", ми маємо на увазі множину красивих жінок, до якої з тим чи іншим ступенем точності належить Маша.
Таким чином, у теорії нечітких множин вводиться функція належності $\mu_A(x)$, що характеризує ступінь належності об'єкта $x$ до множини $A$: $x\in A$. Значення цієї функції лежать в інтервалі $[0...1]$, де $1$ означає точно належить, а $0$ - точно не належить.
Об'єднання $A\cup B$ нечітких множин $A$, $B$
відповідає диз'юнкції (АБО), а перетин $A\cap B$ - кон'юнкції (І).
Тому їхні функції належності рівні:
$$
\begin{array}{lll}
\mu_{A\cap B}(x) = \min\{ \mu_A(x),~\mu_B(x)\},\\
\mu_{A\cup B}(x) = \max\{ \mu_A(x),~\mu_B(x)\}.
\end{array}
$$
Праворуч на малюнку у вигляді прямої $x$
зображено множину різних чашок з кавою (ці об'єкти не впорядковані і зазвичай малюються
областями на площині). Кожній чашці відповідає те чи інше значення її належності до
множин "гарячий" і "міцний".
Пунктири - це межі чітких множин. Червона лінія є функцією належності
перетину множин ($\min$).
У цьому прикладі нечіткий перетин включає чіткий перетин,
оскільки його висота (максимальне значення) дорівнює 1.
Але в загальному випадку це може бути й не так (якщо висота менша за 1).
Множина називається нормальною, якщо її висота дорівнює 1.
Праворуч наведено приклад, у якому перетин не є нормальним.
Включення або строга підмножина $A\subset B$ за визначенням істинне, якщо $\mu_A(x) \lt \mu_B(x)$. У протилежному випадку воно хибне. Це чітке логічне поняття. Різними способами можна визначити і нечітке включення (наприклад, як нормовану суму $|\mu_A(x)-\mu_B(x)|$ по всіх елементах множини $x$).
Зрізом нечіткої множини $A$ на рівні $\alpha$ називається множина елементів для яких функція належності більша за рівень: $\{x|~ \mu_A(x) \ge \alpha\}$. Ці елементи належать $A$ з точністю не менше $\alpha$.
Логічне висловлювання "кава гаряча і міцна" означає, що існує множина різних чашок кави. Частина з них належить до множини "гарячий", а частина до множини "міцний". Дана чашка (про яку йде мова у твердженні) належить до обох множин (у нечіткому сенсі).
Нечіткі предикати
У бінарній логіці висловлювання є окремим випадком предикатів. Предикат є логічною функцією (значення $0,1$) предметних змінних: $A(x),~ B(x,y)$. Предметні змінні - це елементи деяких множин (області визначення предиката). Приклади предикатів: $P(x)$ - число $x$ додатне, $M(x,y)$ - деяка $x$ є матір'ю для $y$, $A \in \alpha$ - точка $A$ лежить на прямій $\alpha$.
У нечіткій логіці значення предикатів, природно, лежать у діапазоні $[0...1]$. Унарні предикати $A(x)$ є нечіткими функціями належності елемента $x$ множині $A$. Вище для $x\in A$ ми використовували $\mu_A(x)$, тепер для стислості будемо писати просто $A(x)$.
Окремими випадками нечітких предикатів є нечіткі змінні та відношення.
Нечіткі змінні
Нечітка змінна - це предикат, що залежить від одного чи декількох дійсних чисел.
Наприклад, говорячи про каву, можна визначити такі
нечіткі змінні, що залежать від її температури $t$:
Інші приклади: повільний, швидкий (функції швидкості); легкий, важкий (функції маси); молодий, старий (функції віку) і т.д.
До нечітких змінних можна застосовувати різні модифікатори:
$$
\text{дуже}:~~~~A^2(x),~~~~~~\text{не дуже}:~~~~\sqrt{A(x)}.
$$
Так "дуже теплий"
$W^2(t)$ підсилює функцію $W(t)$, а "не дуже теплий" $\sqrt{W(t)}$ її послаблює.
Перший модифікатор називають також концентрацією,
а другий - розведенням.
Наведемо приклад формування трапецієподібної функції належності, що залежить від однієї дійсної змінної, на Python за допомогою бібліотеки NumPy:
def tra(min_X, x1,x2,x3,x4, max_X, num=100):
X = np.linspace(min_X, max_X, num, dtype = 'float32')
Y = np.zeros_like(X)
idx = (X >= x1) & (X <= x2); Y[idx] = (X[idx]-x1)/(x2-x1)
idx = (X > x2) & (X <= x3); Y[idx] = 1
idx = (X > x3) & (X <= x4); Y[idx] = (x4-X[idx])/(x4-x3)
return X,Y
Нечіткі відношення
Нечітке відношення є предикатом, що залежить від двох предметних змінних. Функція $R(x,y)$ даній парі сутностей $x,y$ (предметних констант) ставить у відповідність дійсне число з діапазону $[0...1]$ (ступінь істинності відношення). Наприклад, для відношення "два числа майже збігаються" $x\approx y$ можна покласти $R(x,y)=e^{-(x-y)^2}.$ Тоді $R(x,x)=1$; якщо $x$ і $y$ близькі, то $R(x,x)\approx 1$; і в протилежному випадку $R(x,y)\to 0$.
У бінарній логіці відношення $R(x,y)$ є підмножиною множини пар (декартів добуток) $\mathbb{X}\times \mathbb{Y}$. Тому нечітке відношення є нечіткою множиною. Усі визначення (об'єднання, перетин, доповнення відношень тощо) на цей випадок переносяться без змін.
Розглянемо детальніше композицію $(A \circ B)(x,y)$ двох відношень $A(x,z)$ і $B(z,y)$.
Нехай є три множини $\mathbb{X},\mathbb{Z},\mathbb{Y}$ (в загальному випадку різні).
Відношення $A(x,z)$ задане на множині $\mathbb{X}\times \mathbb{Z}$,
а відношення $B(z,y)$ на множині $\mathbb{Z}\times \mathbb{Y}$.
У бінарній логіці, якщо $A(x_i,z_k)$ істинне, то елементи $x_i$ і $z_k$ пов'язані відношенням $A$.
Це можна подати у вигляді стрілки з $x_i$ в $z_k$ (див. малюнок праворуч).
Композиція відношень $(A \circ B)(x_i,y_j)$ буде істинна,
якщо з $x_i$ можна "потрапити" в $y_j$ через деякий $z_k$. Формально це записується
за допомогою квантора існування (є такий $z$, що ...):
$$
(A \circ B)(x,y) : ~~~~~~\exists_z\, A(x,z)\,\&\,B(z,y) = \bigr[A(x,z_1)\,\&\,B(z_1,y)\bigr]\vee \bigr[A(x,z_2)\,\&\,B(z_2,y)\bigr]\vee ...,
$$
де квантор існування виражений через "суму" логічних АБО по всіх елементах скінченної множини $\mathbb{Z}$.
Для нечітких відношень це визначення узагальнюється природним чином:
$$
(A \circ B)(x,y) = \max_z \bigr[\min\{A(x,z),~B(z,y)\}\bigr],
$$
де для $\max$ обчислюється по всіх елементах $z\in \mathbb{Z}$.
Часто зустрічаються такі аксіоми, що фіксують властивості відношень: $$ \begin{array}{lllll} \text{рефлексивне} & R(x,x) = 1 \\ \text{антирефлексивне} & R(x,x) = 0 \\ \text{симетричне} & R(x,y) = R(y,x) \\ \text{асиметричне} & \min\bigr\{R(x,y),\,R(y,x)\bigr\} = 0 \\ \text{антисиметричне} & x\neq y ~\Rightarrow~ \min\bigr\{R(x,y),\,R(y,x)\bigr\} = 0 \\ \text{транзитивне} & \min\bigr\{R(x,y),\,R(y,z)\bigr\} \le R(x,z) \\ \end{array} $$ Наприклад, відношення близькості $x\approx y$ рефлексивне і симетричне.
Норма і конорма *
Вибір функцій $\min$ для кон'юнкції (перетину) і $\max$ для диз'юнкції (об'єднання) не є єдино можливим (хоча часто він більш прийнятний). Позначимо логічне І у вигляді функції $T(x,y)$ (норма), а логічне $АБО$ як $S(x,y)$ (конорма). Вимагатимемо, щоб вони були симетричними і асоціативними: $$ \begin{array}{llll} \&:~ \\ \vee\,:\\ \end{array}~~~~~~~~~~~~~~~~~~~~~~~~~~~ \left\{ \begin{array}{lcl} T(x,y) &=& T(y,x) \\ S(x,y) &=& S(y,x) \end{array}\right.,~~~~~~~~~~~~~~~~~~~ \left\{ \begin{array}{lcl} T(x, T(y,z)) &=& T(T(x, y),z)\\ S(x, S(y,z)) &=& S(S(x, y),z)\\ \end{array}\right.. $$ Крім цього накладемо властивості обмеженості і монотонності (що виконуються для $\&, \vee$ і в бінарній логіці): $$ \begin{array}{llll} \&:~ \\ \vee\,:\\ \end{array}~~~~~ \left\{ \begin{array}{llll} T(0,0) = 0, & T(1,x) = x\\ S(1,1) = 1, & S(0,x) = x\\ \end{array} \right.,~~~~~~~ \left\{ \begin{array}{llll} x_1 \le x_2,~~~ y_1 \le y_2~~~\Rightarrow~~~~~T(x_1, y_1) \le T(x_2, y_2)\\ x_1 \ge x_2,~~~ y_1 \ge y_2~~~\Rightarrow~~~~~S(x_1, y_1) \ge S(x_2, y_2)\\ \end{array} \right.. $$Зауважимо, що умова монотонності виконується не тільки в булевій логіці, але й достатньо природно для нечіткої логіки. Наприклад: $0.5 \,\&\, 0.8 ~\lt~ 0.7 \,\&\, 0.9$ означає, що $0.5$ менш істинне, ніж $0.7~~~$ І $~~~0.8$ менш істинне, ніж $0.9$.
Будемо також припускати, що виконуються закони де Моргана $\neg(X\,\&\,Y) = \neg X\vee \neg Y$ і $\neg(X\vee Y) = \neg X\,\&\, \neg Y$, що пов'язують ці дві операції: $$ \begin{array}{llll} 1-T(x,y) = S(1-x,1-y), & ~~~~~ & 1-S(x,y) = T(1-x,1-y). \\ \end{array} $$ Можливі різні функції, що задовольняють цим аксіомам (зазвичай задається, наприклад, $T(x,y)$, а $S(x,y)$ отримується із закону де Моргана). Наведемо для прикладу три наступні варіанти: $$ \begin{array}{l|c|c|l|l|} & \text{1. логічні} & \text{2. алгебраїчні} & \text{3.} \\ \hline A\,\&\,B & \min(A,B) & A\,B & \max(A+B-1,~ 0) \\ A\vee B & \max(A,B) & A+B - A\,B & \min(A+B,~ 1) \\ \hline A \,\&\, A \equiv A & \mathbb{T} & (0,1) & (0, 1) \\ A \vee A \equiv A & \mathbb{T} & (0,1) & (0, 1) \\ A \,\&\, \neg A & (0.0,0.5) & (0,0.25) & \mathbb{F} \\ A \vee \neg A & (0.5,1.0) & (0.75,1) & \mathbb{T} \\ A\,\&\,(B\vee C) \equiv~... & \mathbb{T} & (0,1) & (0, 1) \\ A\vee (B\,\&\,C)\equiv~... & \mathbb{T} & (0,1) & (0, 1) \\ \end{array} $$ Під визначенням зв'язок вказані значення істинності деяких тотожностей булевої алгебри при використанні цих зв'язок. Якщо стоїть $\mathbb{T}$ - тотожність істинна, при $\mathbb{F}$ - хибна, у протилежному випадку вказані діапазони зміни істинності при всіх можливих значеннях істинності аргументів.
Зауважимо, що закони виключеного третього для варіанта (3.) виконуються, а в інших випадках $A \,\&\, \neg A$ прагне бути скоріше хибним, а $A \vee \neg A$ - скоріше істинним. Властивості ідемпотентності: $$ A\,\&\,A \equiv A,~~~~~~~~~~~~A\vee A \equiv A. $$ виконуються тільки для "логічного" варіанта ($\min,\max$). Насправді, це дуже природні властивості, як для логічних величин, так і для множин ($A\cap A=A$ і $A\cup A=A$). Тому, зазвичай, їхнє виконання бажане.
Зауважимо також, що для визначень 2,3 порушуються закони дистрибутивності: $$ \begin{array}{lcl} A\,\&\,(B\vee C) &\equiv& (A\,\&\,B)\vee (A\,\&\,B)\\ A\vee(B\,\&\,C) &\equiv& (A\vee B)\,\&\, (A\vee B). \end{array} $$ Це не так критично, але не цілком відповідає буденному розумінню сенсу логічних операцій.
Імплікація
У булевій логіці важливу роль відіграє імплікація: $A\to B$. Ця логічна зв'язка в мові відповідає фразам: "з $A$ випливає $B$", "якщо $A$, то $B$". Прийнято, що вона хибна тільки для $1\to 0$ ("з істини не можна отримати брехню"). У всіх інших випадках: $0\to 0$, $0\to 1$, $1\to 1$ вона істинна.
Зазвичай передбачається наявність деякого зв'язку між посилкою $A$ і наслідком $B$ імплікації $A\to B$.
Так, в арифметиці при будь-якому $x$ істинна формула: $(x<2) \to (x<4)$.
Коли посилка істинна ($x=1$), істинний і наслідок.
Якщо ж посилка хибна, то наслідок може бути як істинним (при $x=3$),
так і хибним ($x=5$).
"Менш правильне" твердження $(x > 2) \to (x < 4)$ хибне при $x=5$.
У нечіткій логіці немає єдиної думки, який вираз слід використовувати для імплікації. Нижче наведені деякі варіанти, що пропонувалися різними авторами:
$$ A\to B:~~~~~~~~~~~~~~~~~~~ \begin{array}{lll} \text{Кліні} & \neg A \vee B & ~~~~~ & \max(1-A,~B) \\ \text{Заде} & \neg A \vee (A\,\&\,B)& & \max(1-A,~\min(A,B)) \\ \text{Ваді} & & & \max(1-A, ~A\,B)\\ \\ \text{Шарп} & & & \text{if}(A \le B)~ \{1,~0\} \\ \text{Брауер} & & & \text{if}(A \le B)~ \{1,~B\} \\ \text{Лукасевич} & & & \text{if}(A \le B)~ \{1,~B+1-A\} \\ \text{Гоген} & & & \text{if}(A \le B)~ \{1,~B/A\}, \\ \end{array} $$де конструкція $\text{if}(C)\{A, B\}$ дорівнює $A$, якщо $C$ істинне і $B$ у протилежному випадку. Усі ці визначення відтворюють булеву імплікацію для значень $0,1$.
Перші три визначення "крутяться" навколо вираження імплікації через диз'юнкцію в бінарній логіці. У визначенні Кліні це записано у явному вигляді. У Заде, при виконанні дистрибутивності (для $\&=\min,$ $\vee=\max$), можна записати $(\neg A \vee A)\,\&\,(\neg A \vee B)$. Перша дужка в бінарній логіці дорівнює $1$. У нечіткій (з $\min$, $\max$) вона більша за $0.5$ і тим ближча до $1$, чим істинніше $A$. Числові значення цих імплікацій відрізняються, якщо один з аргументів зв'язки знаходиться в околі невизначеного значення $0.5$.
Останні чотири визначення виходять з того, що імплікація повинна бути строго істинною, якщо з менш істинного твердження "випливає" не менш істинне ($A \le B$). Відмінності виникають коли $A$ істинніше за $B$.
Логічний вивід
У бінарній логіці з $P$ логічно випливає $Q$,
якщо завжди, коли формула $P$ істинна, то істинна і формула $Q$.
Це позначається так: $P\Rightarrow Q$.
Логічний вивід - це спосіб отримання одних істинних формул з інших, також істинних.
Не варто плутати вивід та імплікацію $P\to Q$, яка є логічною зв'язкою,
що приймає значення $0$ або $1$.
Розглянемо найпростіший приклад логічного виводу: якщо істинна кон'юнкція тверджень, то істинне (виводиме) кожне з тверджень. У нечіткій логіці це правило узагальнюється очевидним чином, приводячи до інтервальних оцінок для виводимої формули: $$ A\,\&\,B~~~~~ \Rightarrow~~~~~~ A,~~~~~~~~~~~~~~~~~~~~~~\min(A,~B) ~~~\le~~~ A ~~~\le~~~ 1, $$ де $\min(A,~B)$, з одного боку є значенням кон'юнкції $A\,\&\,B$, а з іншого, нижньою межею для $A$. Природно, в даному виводі передбачається, що ступінь істинності $A\,\&\,B$ задана і в результаті логічного виводу, вона обмежує знизу значення істинності $A$. Аналогічно інтерпретуються нерівності для наступного виводу: $$ A~~~~~ \Rightarrow~~~~~~ A\vee B,~~~~~~~~~~~~~~~~~~~~~~0 ~~~\le~~~ A ~~~\le~~~ \max(A,~B). $$
Таким чином, у нечіткій логіці, крім вказівки виводимої формули, необхідно вміти обчислювати ступінь її істинності. Визначення такого логічного виводу не цілком однозначне, що відображено в різноманітті запропонованих варіантів для імплікації двох висловлювань.
Одна з можливостей, як і в ймовірнісній логіці
вважати, що $A~\Rightarrow~B$, якщо $A \le B$.
Приклади висновків, наведені вище, задовольняють цю умову.
У випадку предикатів, заданих на одній множині
$\mathbb{X}$, такий вивід $A(x)~\Rightarrow~B(x)$ означає, що $A\subset B$ і множини $A,B$
є нормальними, тобто мають одиничну висоту (див. малюнок праворуч).
Тоді на зрізі $\alpha=1$, $A$ буде звичайною підмножиною $B$.
Часто знання (буденні чи математичні) формулюють як правила "ЯКЩО ... TO ..."
(імплікація).
Тоді в бінарній логіці
важливими методами виводу є modus ponens і modus tollens
(запис посилок виводу через кому передбачає
зв'язування їх логічним І):
$$
\begin{array}{cccccc}
A, & A\to B&~~~~~~~~&\Rightarrow&~~~~~~~~&B\\
\neg B,& A\to B&~~~~~~~~&\Rightarrow&~~~~~~~~&\neg A\\
\end{array}
$$
Вважаючи ці висновки справедливими в нечіткій логіці,
знайдемо значення істинності отримуваних формул.
Для modus ponens маємо $\min(A,~A\to B) ~\le~ B~\le~ 1$. У випадку коли "аксіома" $A \to B$ завжди істинна, то $A \le B$. Якщо $A=1$, то $B=1$ (бінарний випадок), а при $A=0$ маємо $0 \le B\le 1$, тобто значення $B$ повністю не визначене (що також узгоджується з бінарною логікою). Для modus tollens для істинного правила $A \to B$ також отримуємо $$ A ~\le~ B ~\le~ 1. $$ Нагадаємо, що отримання значення істинності виводимих формул у вигляді нерівності типове й для ймовірнісної логіки.
Коли істинність правила $A\to B$ відмінна від $1$, необхідний вибір тієї чи іншої формули для імплікації. Зауважимо також, що з усіх визначень імплікації з нерівністю $\min(A,~A\to B) \le B$ у загальному випадку узгоджуються тільки імплікації Шарпа і Брауера.
Розглянемо простий приклад із двох правил: $$ A\to B,~~~~~~~\neg A\to \neg B. $$ Наприклад, вони справедливі для $A$: "сильно вдарити по склу", $B$: "скло розіб'ється". З першого правила випливає, що $A \le B$, а з другого $1-A \le 1-B$ або $B\le A$. Тому $B = A$ (точне значення при заданому $A$). Це природний результат: якщо по склу вдарити несильно ($A = 0.2$), то, вочевидь, воно не розіб'ється ($B = 0.2$).
✒ У бінарній логіці існує дуже потужний метод виводу за резолюцією, що застосовується в машинному виводі: $$ A\vee C,~\neg A\vee B~~~~~~~~~~\Rightarrow~~~~~~~~~~C\vee B. $$ У нечіткій логіці він не працює, оскільки нерівність $\min\bigr(\max(A,C),~\max(1-A, B)\,\bigr)~\le \max(C,B)$ не є вірною (наприклад, для $A=1/2,~B=C=0$). Це пов'язано з порушенням закону виключеного третього. У бінарній логіці резолюція означає, якщо посилки істинні, то або $A=0$ і тоді $C=1$, $B$ - будь-яке, або $A=1$ і тоді $B=1$, $C$ - будь-яке. Тому в будь-якому випадку $B \vee C$ істинне.
Вивід Заде для предикатів
Вивід Заде узагальнює правило modus ponens на випадок нечітких предикатів. Нехай є правило $A(x)\to B(y)$ і заданий предикат $A'(x)$ "схожий" на $A(x)$. Тоді: $$ A'(x),~~A(x)\to B(y)~~~~~~~~~\Rightarrow~~~~~~~B'(x) = A'\circ (A\to B) = \max_x\bigr[ \min\bigr[ A'(x),~ A(x)\to B(y)\bigr]\bigr]. $$ Нечітке правило $A(x)\to B(y)$ може бути задане у вигляді відношення (матриця $\mathbb{X}\times\mathbb{Y}$) або обчислене за допомогою заданих предикатів $A(x), B(y)$ і одного з визначень імплікації (що простіше).
В окремому випадку висловлювань $A'=A$ і імплікації Брауера $A\to B:~R=\text{ if }(A \le B): \{~1;~ B\}$, отримуємо: $$ B' = \left\{ \begin{array}{llll} \min(A,~1)=A, & ~~~& A \le B \\ \min(A,~B)=B, & ~~~& A \gt B \end{array} \right. ~~~~~=~~~~ \min(A,B) $$ Якщо $A=1$, то $B'= B = R$ (ступінь істинності правила), якщо $A=0$, то $B'=0$ (?), хоча в бінарній логіці істинність $B$ не визначена. При $A=0.5$ маємо $B'=0.5$.
Вивід Мамдані
Логічний вивід Мамдані - це евристичний спосіб нечітких міркувань, який використовується за наявності набору правил, що містять нечіткі змінні. Нехай, наприклад, є два правила, що залежать від 6 нечітких змінних $A_i,B_i,C_i$, визначуваних трьома параметрами $x,y,z$: $$ \begin{array}{llll} A_1(x) \,\&\,B_1(y) \to C_1(z),\\ A_2(x) \,\&\,B_2(y) \to C_2(z).\\ \end{array} $$ Припустимо, що значення дійсних параметрів $x,y$ відомі і дорівнюють $x_0,y_0$.Задача полягає у визначенні найбільш підходящого значення параметра $z$, що задовольняє цим правилам.
На першому етапі пошуку $z$ проводиться фаззифікація (отримання значень
нечітких змінних $A_1(x_0)$ і т.д.)
і обчислення значень посилок на основі формул нечіткої логіки ($\min$ для $\&$ і $\max$ для $\vee$):
$$
\left\{
\begin{array}{llll}
\alpha_1 = \min\bigr(A_1(x_0),~B_1(y_0)\bigr) \\
\alpha_2 = \min\bigr(A_2(x_0),~B_2(y_0)\bigr)
\end{array}\right.,
~~~~~~~~~~~~~~
\left\{
\begin{array}{llll}
\alpha_1 \to C_1(z)\\
\alpha_2 \to C_2(z)\\
\end{array}\right..
$$
Потім "активізуються" наслідки правил, у припущенні,
що їхня істинність не повинна перевищувати істинності посилок (праворуч на малюнку рівні $\alpha_i$
відсікають вищі значення істинності наслідків):
$$
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~C'_i(z) = \min (\alpha_i, C(z)).
$$
Ці модифіковані наслідки об'єднуються
по всіх правилах (логічне АБО), в результаті чого
отримується функція розподілу $\mu(z)\in[0...1]$ для змінної $z$:
$$
\mu(z) = \max_i C'_i(z).~~~~~~
$$
На останньому етапі проводиться дефазифікація, в результаті якої
обирається конкретне значення для $z$.
Наприклад, можна взяти
точку центра тяжіння функції $\mu(z)$:
$$
z_0 =\int z\,\mu(z)\,dz ~\Bigr/~ \int \mu(z)\,dz.
$$
Зауважимо, що, як на етапі активізації, так і при дефазифікації
посилки з низькою істинністю дають слабкий внесок у результат
(зовсім хибні посилки взагалі на нього не впливають).
Тому при активізації замість функції $\min$ можна також
використовувати добуток: $C'_i(z)=\alpha_i\,C_i(z)$ (алгоритм Ларсена).
Існує модифікація цього методу - вивід Цукамото. На етапі активізації наслідків розв'язуються рівняння: $C_i(z) = \alpha_i$, що дають єдині розв'язки $z_i$. Такий підхід можливий тільки, коли нечіткі змінні $C_i(z)$ у правилах є монотонними функціями $z$ (зростаючими або спадними), інакше розв'язків буде декілька. На етапі дефазифікації також обчислюється центр тяжіння за отриманими розв'язками $z_1,z_2,...$: $$ z= \sum_i \alpha_i z_i~\Bigr/~\sum_i\alpha_i. $$
Існує також підхід Сугено, в якому в правилах наслідки записуються у вигляді інструкцій для значень $z=F(x,y)$, де $F$ - деякі функції (зазвичай лінійні). Після фаззифікації ми одразу отримуємо значення $z_i$, за якими, як і вище, за допомогою істинностей посилок $\alpha_i$ обчислюється центр тяжіння.
Нечіткі числа
Нечітке число $X$ - це функція належності $\mu_X(x)$ від дійсного числа $x$,
що має єдиний одиничний максимум при $x=X$. На малюнку праворуч $\mu_0(x)$ -
це "приблизно нуль", а $\mu_3(x)$ - приблизно три.
Нехай є дійсна функція двох (звичайних) чисел $z=f(x,y)$ і два нечітких числа $A(x), B(y)$. Нас цікавить функція належності $\mu_{f(A,B)}(z)$, що дорівнює ступеню впевненості в тому, що конкретне число $z$ є результатом операції (функції) $f$.
Переберемо всі можливі значення $x,y$ для яких $z=f(x,y)$ і з'ясуємо ступені впевненості того, що це нечіткі числа $A(x), B(y)$. Тоді за принципом розширення Заде функція належності операції, за визначенням, дорівнюватиме: $$ \mu_{f(A,B)}(z) = \sup_{x,y: f(x,y)=z}\min\bigr\{\mu_A(x),\,\mu_B(y)\bigr\}. $$ Таким чином, з усіх можливих "чітких" способів отримати $z$ обираємо той, який дає найбільше ($\sup$) значення мінімуму функцій належності нечітких чисел аргументів функції.
Часто для нечітких чисел використовують функції належності $L-R$ типу
$$
\mu_A(x) =
\left\{
\begin{array}{lll}
L(a-x) & x \ge a \\
R(x-a) & x \ge a \\
\end{array}
\right.
~~~~~~~
\begin{array}{lll}
L(0)=R(0) = 1 \\
L,R \text{ - не зростають} \\
\end{array}
$$
Найпростішим прикладом є трикутна функція належності $\langle a;\, \alpha, \beta \rangle$, наведена на малюнку.
За допомогою принципу розширення для трикутних чисел
можна отримати такі результати для стандартних арифметичних операцій:
$$
\begin{array}{lll}
\langle a_1;\, \alpha_1,\beta_1 \rangle \pm \langle a_2;\, \alpha_2,\beta_2 \rangle
= \langle a_1\pm a_2;\, \alpha_1+\alpha_2,\beta_1+\beta_2 \rangle\\
\langle a_1;\, \alpha_1,\beta_1 \rangle \cdot \langle a_2;\, \alpha_2,\beta_2 \rangle
= \langle a_1\cdot a_2;\, \alpha_1 a_2+\alpha_2 a_1,\beta_1 b_2+\beta_2 b_1\rangle\\
\langle a;\, \alpha,\beta \rangle^{-1} = \langle 1/a;\, \beta/a^2,\alpha/a^2 \rangle \\
\end{array}
$$
Зауважимо, що для положення максимуму виконуються звичайні арифметичні операції,
а величина нечіткості (ширина трикутника) збільшується.
Інший спосіб задання функцій належності $\langle a,b; \alpha, \beta \rangle$ - це трапеція з максимумом на інтервалі $[a,b]$ і граничними точками $\alpha,\beta$.
Нечітка логіка на Python
Визначимо клас з перевантаженими логічними операторами для нечіткої логіки:
class Fuzzy:
def __init__(self, val=0):
val = np.array(val) if isinstance(val,(list, np.ndarray)) else np.array([val])
self.val = val.astype('float32')
def __invert__(self): # ~x NOT
return Fuzzy(1-self.val)
def __and__(self, other): # x & y AND
return Fuzzy( np.minimum(self.val, other.val) )
def __or__(self, other): # x | y OR
return Fuzzy( np.maximum(self.val, other.val) )
def __eq__(self, other):
return Fuzzy(self.val == other.val)
def __str__(self):
return f"{self.val[0]}" if len(self.val)==1 else f"{self.val}"
def minmax(self):
return (self.val.min(), self.val.max())
def __gt__(self, other):
return Fuzzy( np.minimum( np.ones_like(self.val), 1-self.val+other.val) )
Приклад його використання:
x = Fuzzy( [0, 0, 0, 0.5,0.5,0.5,1, 1, 1] ) y = Fuzzy( [0, 0.5,1, 0, 0.5,1, 0, 0.5,1] ) print(x & y ) # [0. 0. 0. 0. 0.5 0.5 0. 0.5 1. ] print(x | y ) # [0. 0.5 1. 0.5 0.5 1. 1. 1. 1. ]Перевірка тотожностей булевої алгебри:
vals = np.linspace(0,1,101, dtype='float32') x = Fuzzy(vals) print ( (x & x).minmax() ) # (0.0, 1.0) print ( (x & ~x).minmax() ) # (0.0, 0.5) print ( (x | ~x).minmax() ) # (0.5, 1.0) x, y, z = np.meshgrid(vals, vals, vals) x, y, z = Fuzzy(x), Fuzzy(y), Fuzzy(z) print ( ((x & (y | z)) == ((x & y) | (x & z))).minmax() ) # (1.0, 1.0)