andrelievable

Untitled

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