Obliczenia na Liczbach Rozmytych (Fuzzy Numbers)

Projekt "odległość rozmyta granul" z przedmiotu NTwI

Program implementuje operacje na liczbach rozmytych (fuzzy numbers) reprezentowanych jako trójkątne funkcje przynależności. Liczby rozmyte są używane w logice rozmytej i teorii zbiorów rozmytych do reprezentowania nieprecyzyjnych wartości.

Reprezentacja liczby rozmytej

W tym projekcie liczba rozmyta jest reprezentowana przez trzy parametry:

  • x1 (lewy punkt) - dolna granica nośnika funkcji przynależności
  • m (środek) - wartość z maksymalną przynależnością (równą 1)
  • x2 (prawy punkt) - górna granica nośnika funkcji przynależności

📁 Struktura projektu

/NTwI-obliczenia-ziarniste/
├── app.py
├── RozmytyZbior.py
└── README.md
🧮

Operacje na liczbach rozmytych

Dodawanie Odejmowanie Mnożenie Potęgowanie

Wyświetlanie pojedynczej liczby rozmytej

Mnożenie liczby rozmytej przez liczbę rzeczywistą

Łańcuch operacji na wielu liczbach rozmytych

📋

Wymagania

Python 3.x NumPy Matplotlib

Instalacja: pip install numpy matplotlib

Uruchomienie: python app.py [argumenty]

Użycie programu

Program jest uruchamiany z linii poleceń z różnymi argumentami w zależności od operacji, którą chcemy wykonać.

Wyświetlanie pojedynczej liczby rozmytej

Aby wyświetlić pojedynczą liczbę rozmytą, należy podać trzy parametry: lewy punkt, środek i prawy punkt.

python app.py x1 m x2

Przykład:

python app.py 2 3 4
Mnożenie liczby rozmytej przez liczbę rzeczywistą lub potęgowanie

Aby pomnożyć liczbę rozmytą przez liczbę rzeczywistą lub podnieść ją do potęgi, należy podać parametry liczby rozmytej, operator ("*" dla mnożenia lub "^" dla potęgowania) oraz liczbę rzeczywistą.

python app.py x1 m x2 operator liczba

Przykłady:

python app.py 2 3 4 * 2
python app.py 2 3 4 ^ 2
Operacje na dwóch liczbach rozmytych

Aby wykonać operację na dwóch liczbach rozmytych (dodawanie, odejmowanie, mnożenie), należy podać parametry obu liczb rozmytych oraz operator ("+" dla dodawania, "-" dla odejmowania, "*" dla mnożenia).

python app.py x1_A m_A x2_A operator x1_B m_B x2_B

Przykłady:

python app.py 2 3 4 + 5 6 7
python app.py 2 3 4 - 1 2 3
python app.py 2 3 4 * 1 2 3
Łańcuch operacji na wielu liczbach rozmytych

Program obsługuje również łańcuch operacji na wielu liczbach rozmytych. Wynik poprzedniej operacji jest używany jako pierwszy argument kolejnej operacji.

python app.py x1_A m_A x2_A operator1 x1_B m_B x2_B operator2 x1_C m_C x2_C ...

Przykład:

python app.py 2 3 4 + 5 6 7 - 1 2 3

Teoria zbiorów rozmytych

Zbiór rozmyty to zbiór, w którym każdy element należy do zbioru z pewnym stopniem przynależności z przedziału [0, 1]. W przeciwieństwie do klasycznej teorii zbiorów, gdzie element albo należy do zbioru (przynależność 1), albo nie należy (przynależność 0), w zbiorach rozmytych element może należeć do zbioru częściowo.

Operacje na zbiorach rozmytych

W projekcie zaimplementowano następujące operacje:

  1. Dodawanie: Jeśli A i B są liczbami rozmytymi, to A + B jest liczbą rozmytą, której parametry są obliczane jako:
    • m = m_A + m_B
    • x1 i x2 są obliczane na podstawie odległości od środka
  2. Odejmowanie: Jeśli A i B są liczbami rozmytymi, to A - B jest liczbą rozmytą, której parametry są obliczane jako:
    • m = m_A - m_B
    • x1 i x2 są obliczane na podstawie odległości od środka
  3. Mnożenie przez liczbę rzeczywistą: Jeśli A jest liczbą rozmytą, a k jest liczbą rzeczywistą, to A * k jest liczbą rozmytą, której parametry są obliczane jako:
    • m = m_A * k
    • x1 i x2 są obliczane na podstawie odległości od środka
  4. Potęgowanie: Jeśli A jest liczbą rozmytą, a n jest liczbą rzeczywistą, to A^n jest liczbą rozmytą, której parametry są obliczane jako:
    • m = m_A^n
    • x1 i x2 są obliczane na podstawie odległości od środka
  5. Mnożenie dwóch liczb rozmytych: Jeśli A i B są liczbami rozmytymi, to A * B jest liczbą rozmytą, której parametry są obliczane jako:
    • m = m_A * m_B
    • x1 i x2 są obliczane na podstawie odległości od środka
Implementacja klasy RozmytyZbior

Klasa RozmytyZbior implementuje zbiór rozmyty z trójkątną funkcją przynależności. Poniżej przedstawiono fragment kodu implementujący dodawanie dwóch zbiorów rozmytych:

def dodaj(self, inny_zbior):
"""
Dodaje dwa zbiory rozmyte.

:param inny_zbior: Inny zbiór rozmyty do dodania.
:return: Nowy zbiór rozmyty będący wynikiem dodawania.
"""
m = self.m + inny_zbior.m
x1=(m-abs(self.m-self.x1)+(m-abs(inny_zbior.m-inny_zbior.x1)))/2
x2=(m+abs(self.m-self.x2)+(m+abs(inny_zbior.m-inny_zbior.x2)))/2
return RozmytyZbior(x1, m, x2, np.arange(x1-0.2, x2+0.2, 0.01))

Wnioski

Operacje
5
podstawowych operacji
Wizualizacja
3
wykresy dla każdej operacji
Implementacja
140+
linii kodu
Liczby rozmyte stanowią efektywne narzędzie do modelowania niepewności i nieprecyzyjności w danych, pozwalając na operowanie na wartościach, które nie są dokładnie określone.