andrelievable

Untitled

Apr 27th, 2021
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.30 KB | None | 0 0
  1. #YOUR CODE HERE
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4.  
  5. from fuzzython.fsets.trapezoid import Trapezoid
  6. from fuzzython.fsets.triangular import Triangular
  7. from fuzzython.variable import Variable
  8. from fuzzython.adjective import Adjective
  9. from fuzzython.ruleblock import RuleBlock
  10. from fuzzython.systems.mamdani import MamdaniSystem
  11. from fuzzython.fsets.fuzzy_set import FuzzySet
  12.  
  13. from mpl_toolkits.mplot3d import Axes3D
  14.  
  15. def plot_fuzzyset(ax, fuzzy_set, x, *args, **kwargs):
  16.     y = np.array([fuzzy_set(e) for e in x])
  17.     ax.plot(x, y,  *args, **kwargs)
  18.     ax.set_ylim(-0.1, 1.1)
  19.     ax.legend()
  20.  
  21. #PRĘDKOŚĆ
  22. predkosc_mala = Trapezoid((9.9,0),(10,1),(45,1),(50,0))
  23. predkosc_srednia = Trapezoid((40,0),(50,1),(80,1),(95,0))
  24. predkosc_szybka = Trapezoid((85,0),(90,1),(140,1),(145,0))
  25. predkosc_bardzo_szybka = Trapezoid((135,0),(140,1),(200,1),(200.1,0))
  26.  
  27. A_predkosc_mala = Adjective('predkosc_mala', predkosc_mala)
  28. A_predkosc_srednia = Adjective('predkosc_srednia', predkosc_srednia)
  29. A_predkosc_szybka = Adjective('predkosc_szybka', predkosc_szybka)
  30. A_predkosc_bardzo_szybka = Adjective('predkosc_bardzo_szybka', predkosc_bardzo_szybka)
  31.  
  32. predkosc = Variable('predkosc', 'km/h', predkosc_mala, predkosc_srednia, predkosc_szybka, predkosc_bardzo_szybka)
  33.  
  34.  
  35. #WIDOCZNOŚĆ
  36. widocznosc_bardzo_slaba = Triangular((0.04,0),(0.05,1),(2,0))
  37. widocznosc_srednia = Triangular((0.05,0),(2,1),(4,0))
  38. widocznosc_dobra = Triangular((2,0),(4,1),(4.1,0))
  39.  
  40. A_widocznosc_bardzo_slaba = Adjective('widocznosc_bardzo_slaba', widocznosc_bardzo_slaba)
  41. A_widocznosc_srednia = Adjective('widocznosc_srednia', widocznosc_srednia)
  42. A_widocznosc_dobra = Adjective('widocznosc_dobra', widocznosc_dobra)
  43.  
  44. widocznosc = Variable('widocznosc', 'km', widocznosc_bardzo_slaba, widocznosc_srednia, widocznosc_dobra)
  45.  
  46. #MOŻLIWOŚĆ SPOWODOWANIA WYPADKU
  47. wypadek_bardzo_male = Trapezoid((-0.01,0),(0,1),(0.25,1),(0.3,0))
  48. wypadek_male = Trapezoid((0.2,0),(0.25,1),(0.4,1),(0.45,0))
  49. wypadek_srednie = Trapezoid((0.4,0),(0.45,1),(0.6,1),(0.7,0))
  50. wypadek_duze = Trapezoid((0.65,0),(0.7,1),(1,1),(1.01,0))
  51.  
  52. A_wypadek_bardzo_male = Adjective('wypadek_bardzo_male', wypadek_bardzo_male)
  53. A_wypadek_male = Adjective('wypadek_male', wypadek_male)
  54. A_wypadek_srednie = Adjective('wypadek_srednie', wypadek_srednie)
  55. A_wypadek_duze = Adjective('wypadek_duze', wypadek_duze)
  56.  
  57. wypadek = Variable('wypadek', '0-1', wypadek_bardzo_male, wypadek_male, wypadek_srednie, wypadek_duze, defuzzification='COG', default=0)
  58.  
  59. #GRAF
  60. x = np.linspace(10,200,10000)
  61. x1 = np.linspace(0.05,4,1000)
  62. x2 = np.linspace(0,1,1000)
  63. fig, axs = plt.subplots(nrows=3, ncols=1, figsize=(12,8))
  64. ((ax1), (ax2), (ax3)) = axs
  65.  
  66. #WYKRES PRĘDKOŚCI
  67. plot_fuzzyset(ax1, predkosc_mala, x, 'g', label='predkosc_mala')
  68. plot_fuzzyset(ax1, predkosc_srednia, x, 'b', label='predkosc_srednia')
  69. plot_fuzzyset(ax1, predkosc_szybka, x, 'y', label='predkosc_szybka')
  70. plot_fuzzyset(ax1, predkosc_bardzo_szybka, x, 'r', label='predkosc_bardzo_szybka')
  71.  
  72. #WYKRES WIDOCZNOŚCI
  73. plot_fuzzyset(ax2, widocznosc_bardzo_slaba, x1, 'r', label='widocznosc_bardzo_slaba')
  74. plot_fuzzyset(ax2, widocznosc_srednia, x1, 'b', label='widocznosc_srednia')
  75. plot_fuzzyset(ax2, widocznosc_dobra, x1, 'g', label='widocznosc_dobra')
  76.  
  77. #WYKRES MOŻLIWOŚCI SPOWODOWANIA WYPADKU
  78. plot_fuzzyset(ax3, wypadek_bardzo_male, x2, 'g', label='wypadek_bardzo_male')
  79. plot_fuzzyset(ax3, wypadek_male, x2, 'b', label='wypadek_male')
  80. plot_fuzzyset(ax3, wypadek_srednie, x2, 'y', label='wypadek_srednie')
  81. plot_fuzzyset(ax3, wypadek_duze, x2, 'r', label='wypadek_duze')
  82.  
  83. #RYSOWANIE WYKRESY
  84. plt.show()
  85.  
  86. #ZASADY
  87. scope = locals()
  88.  
  89. rule1 = 'if predkosc is A_predkosc_mala and widocznosc is A_widocznosc_bardzo_slaba then wypadek is A_wypadek_male'
  90. rule2 = 'if predkosc is A_predkosc_mala and widocznosc is A_widocznosc_srednia  then wypadek is A_wypadek_male'
  91. rule3 = 'if predkosc is A_predkosc_mala and widocznosc is A_widocznosc_dobra  then wypadek is A_wypadek_bardzo_male'
  92. rule4 = 'if predkosc is A_predkosc_srednia and widocznosc is A_widocznosc_bardzo_slaba then wypadek is A_wypadek_srednie'
  93. rule5 = 'if predkosc is A_predkosc_srednia and widocznosc is A_widocznosc_srednia  then wypadek is A_wypadek_srednie'
  94. rule6 = 'if predkosc is A_predkosc_srednia and widocznosc is A_widocznosc_dobra  then wypadek is A_wypadek_male'
  95. rule7 = 'if predkosc is A_predkosc_szybka and widocznosc is A_widocznosc_bardzo_slaba then wypadek is A_wypadek_duze'
  96. rule8 = 'if predkosc is A_predkosc_szybka and widocznosc is A_widocznosc_srednia  then wypadek is A_wypadek_srednie'
  97. rule9 = 'if predkosc is A_predkosc_szybka and widocznosc is A_widocznosc_dobra  then wypadek is A_wypadek_srednie'
  98. rule10 = 'if predkosc is A_predkosc_bardzo_szybka and widocznosc is A_widocznosc_bardzo_slaba then wypadek is A_wypadek_duze'
  99. rule11 = 'if predkosc is A_predkosc_bardzo_szybka and widocznosc is A_widocznosc_srednia  then wypadek is A_wypadek_duze'
  100. rule12 = 'if predkosc is A_predkosc_bardzo_szybka and widocznosc is A_widocznosc_dobra  then wypadek is A_wypadek_srednie'
  101.  
  102.  
  103. block = RuleBlock('rb_mamdani', operators=('MIN', 'MAX', 'ZADEH'), activation='MIN', accumulation='MAX')
  104. block.add_rules(rule1,rule2,rule3,rule4,rule5,rule6,rule7,rule8,rule9,rule10,rule11,rule12,scope=scope)
  105.  
  106. #TWORZENIE MODELU MAMDANI
  107. mamdani = MamdaniSystem('mamdani model', block)
  108.  
  109. #DANE WEJŚCIOWE
  110. inputs = {'predkosc':190, 'widocznosc': 0.1}
  111. res = mamdani.compute(inputs)
  112. print(res)
  113.  
  114. #PRZYGOTOWANIE SIATKI
  115. sampled_one = np.linspace(10, 200, 20)
  116. sampled_two = np.linspace(0.05,4, 20)
  117. x, y = np.meshgrid(sampled_one, sampled_two)
  118. z = np.zeros((len(sampled_one), len(sampled_two)))
  119.  
  120.  
  121. for i in range(len(sampled_one)):
  122.     for j in range(len(sampled_two)):
  123.         inputs = {'predkosc': x[i, j], 'widocznosc': y[i, j]}
  124.         res = mamdani.compute(inputs)
  125.         z[i, j] = res['rb_mamdani']['wypadek']
  126.  
  127. fig = plt.figure()
  128. ax = fig.add_subplot(111, projection='3d')
  129. surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
  130. cset = ax.contourf(x, y, z, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
  131. cset = ax.contourf(x, y, z, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
  132. cset = ax.contourf(x, y, z, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
  133. ax.set_xlabel('predkosc')
  134. ax.set_ylabel('widocznosc')
  135. ax.set_zlabel('wypadek')
  136. ax.view_init(30, 200)
Advertisement
Add Comment
Please, Sign In to add comment