2021-11-04 16:01:21 +00:00
|
|
|
|
"""
|
|
|
|
|
README, Author - Jigyasa Gandhi(mailto:jigsgandhi97@gmail.com)
|
2019-10-18 18:26:48 +00:00
|
|
|
|
Requirements:
|
|
|
|
|
- scikit-fuzzy
|
|
|
|
|
- numpy
|
|
|
|
|
- matplotlib
|
|
|
|
|
Python:
|
|
|
|
|
- 3.5
|
|
|
|
|
"""
|
|
|
|
|
import numpy as np
|
2021-11-04 16:01:21 +00:00
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
import skfuzzy as fuzz
|
|
|
|
|
except ImportError:
|
|
|
|
|
fuzz = None
|
2019-10-22 17:13:48 +00:00
|
|
|
|
|
2019-11-17 18:38:48 +00:00
|
|
|
|
if __name__ == "__main__":
|
2020-03-04 12:40:28 +00:00
|
|
|
|
# Create universe of discourse in Python using linspace ()
|
2019-11-17 18:38:48 +00:00
|
|
|
|
X = np.linspace(start=0, stop=75, num=75, endpoint=True, retstep=False)
|
|
|
|
|
|
2020-06-16 08:09:19 +00:00
|
|
|
|
# Create two fuzzy sets by defining any membership function
|
|
|
|
|
# (trapmf(), gbellmf(), gaussmf(), etc).
|
2019-11-17 18:38:48 +00:00
|
|
|
|
abc1 = [0, 25, 50]
|
|
|
|
|
abc2 = [25, 50, 75]
|
|
|
|
|
young = fuzz.membership.trimf(X, abc1)
|
|
|
|
|
middle_aged = fuzz.membership.trimf(X, abc2)
|
|
|
|
|
|
|
|
|
|
# Compute the different operations using inbuilt functions.
|
|
|
|
|
one = np.ones(75)
|
|
|
|
|
zero = np.zeros((75,))
|
|
|
|
|
# 1. Union = max(µA(x), µB(x))
|
|
|
|
|
union = fuzz.fuzzy_or(X, young, X, middle_aged)[1]
|
|
|
|
|
# 2. Intersection = min(µA(x), µB(x))
|
|
|
|
|
intersection = fuzz.fuzzy_and(X, young, X, middle_aged)[1]
|
|
|
|
|
# 3. Complement (A) = (1- min(µA(x))
|
|
|
|
|
complement_a = fuzz.fuzzy_not(young)
|
|
|
|
|
# 4. Difference (A/B) = min(µA(x),(1- µB(x)))
|
|
|
|
|
difference = fuzz.fuzzy_and(X, young, X, fuzz.fuzzy_not(middle_aged)[1])[1]
|
|
|
|
|
# 5. Algebraic Sum = [µA(x) + µB(x) – (µA(x) * µB(x))]
|
|
|
|
|
alg_sum = young + middle_aged - (young * middle_aged)
|
|
|
|
|
# 6. Algebraic Product = (µA(x) * µB(x))
|
|
|
|
|
alg_product = young * middle_aged
|
|
|
|
|
# 7. Bounded Sum = min[1,(µA(x), µB(x))]
|
|
|
|
|
bdd_sum = fuzz.fuzzy_and(X, one, X, young + middle_aged)[1]
|
|
|
|
|
# 8. Bounded difference = min[0,(µA(x), µB(x))]
|
|
|
|
|
bdd_difference = fuzz.fuzzy_or(X, zero, X, young - middle_aged)[1]
|
|
|
|
|
|
|
|
|
|
# max-min composition
|
|
|
|
|
# max-product composition
|
|
|
|
|
|
|
|
|
|
# Plot each set A, set B and each operation result using plot() and subplot().
|
2020-07-06 07:44:19 +00:00
|
|
|
|
from matplotlib import pyplot as plt
|
2019-11-17 18:38:48 +00:00
|
|
|
|
|
|
|
|
|
plt.figure()
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 1)
|
|
|
|
|
plt.plot(X, young)
|
|
|
|
|
plt.title("Young")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 2)
|
|
|
|
|
plt.plot(X, middle_aged)
|
|
|
|
|
plt.title("Middle aged")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 3)
|
|
|
|
|
plt.plot(X, union)
|
|
|
|
|
plt.title("union")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 4)
|
|
|
|
|
plt.plot(X, intersection)
|
|
|
|
|
plt.title("intersection")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 5)
|
|
|
|
|
plt.plot(X, complement_a)
|
|
|
|
|
plt.title("complement_a")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 6)
|
|
|
|
|
plt.plot(X, difference)
|
|
|
|
|
plt.title("difference a/b")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 7)
|
|
|
|
|
plt.plot(X, alg_sum)
|
|
|
|
|
plt.title("alg_sum")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 8)
|
|
|
|
|
plt.plot(X, alg_product)
|
|
|
|
|
plt.title("alg_product")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 9)
|
|
|
|
|
plt.plot(X, bdd_sum)
|
|
|
|
|
plt.title("bdd_sum")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplot(4, 3, 10)
|
|
|
|
|
plt.plot(X, bdd_difference)
|
|
|
|
|
plt.title("bdd_difference")
|
|
|
|
|
plt.grid(True)
|
|
|
|
|
|
|
|
|
|
plt.subplots_adjust(hspace=0.5)
|
|
|
|
|
plt.show()
|