Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.55 KB | None | 0 0
  1. #% matplotlib notebook
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from mpl_toolkits.mplot3d import Axes3D
  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.norms import norms
  10.  
  11. n_p_tanio=Triangular((0.99,1),(1,0),(10,1))
  12. p_tanio=n_p_tanio.complement(cnorm=norms.zadeh_complement)
  13. p_srednio1=Triangular((5,0),(8.25,1),(12.5,0))
  14. p_srednio2=Triangular((7.5,0),(12.25,1),(15,0))
  15. p_srednio=p_moderate1.union(p_srednio2,snorm=norms.algebraic_sum)
  16. p_drogo=Triangular((10,0),(20,1),(20.1,0))
  17.  
  18. a_p_tanio = Adjective('p_tanio', p_tanio)
  19. a_p_srednio = Adjective('p_srednio', p_srednio)
  20. a_p_drogo = Adjective('p_drogo', p_drogo)
  21.  
  22. a_p_tanio2 = Adjective('p_tanio', p_tanio)
  23. a_p_srednio2 = Adjective('p_srednio', p_srednio2)
  24. a_p_drogo2 = Adjective('p_drogo', p_drogo)
  25.  
  26.  
  27. cena_dzis = Variable('cena_dzis', 'zł', a_p_tanio, a_p_srednio, a_p_drogo)
  28. cena_wczoraj = Variable('cena_wczoraj', 'zł', a_p_tanio2, a_p_srednio2, a_p_drogo2)
  29.  
  30. cena_dzis2 = Variable('cena_dzis2', 'zł', a_p_tanio, a_p_srednio, a_p_drogo, defuzzification='COA')
  31. cena_wczoraj2 = Variable('cena_wczoraj2', 'zł', a_p_tanio2, a_p_srednio2, a_p_drogo2, defuzzification='MM',default=0)
  32.  
  33. scope = locals()
  34.  
  35. rule4a = 'if cena_wczoraj is a_p_tanio2 and cena_dzis is a_p_tanio then z=cena_dzis*0.5+cena_wczoraj*0.5+1'
  36. rule4b = 'if cena_wczoraj is a_p_tanio2 and cena_dzis is a_p_srednio then z=cena_dzis*0.6+cena_wczoraj*0.4+1'
  37. rule4c = 'if cena_wczoraj is a_p_tanio2 and cena_dzis is a_p_drogo then z=cena_dzis*0.8+cena_wczoraj*0.2+1'
  38.  
  39. rule5a = 'if cena_wczoraj is a_p_srednio2 and cena_dzis is a_p_tanio then z=0.6*cena_dzis+0.4*cena_wczoraj+1'
  40. rule5b = 'if cena_wczoraj is a_p_srednio2 and cena_dzis is a_p_srednio then z=cena_dzis*0.5+cena_wczoraj*0.5+1'
  41. rule5c = 'if cena_wczoraj is a_p_srednio2 and cena_dzis is a_p_drogo then z=0.6*cena_dzis+0.4*cena_wczoraj+1'
  42.  
  43. rule6a = 'if cena_wczoraj is a_p_drogo2 and cena_dzis is a_p_tanio then z=0.8*cena_dzis+0.2*cena_wczoraj+1'
  44. rule6b = 'if cena_wczoraj is a_p_drogo2 and cena_dzis is a_p_srednio then z=0.6*cena_dzis+0.4*cena_wczoraj+1'
  45. rule6c = 'if cena_wczoraj is a_p_drogo2 and cena_dzis is a_p_drogo then z=cena_dzis*0.5+cena_wczoraj*0.5+1'
  46.  
  47. block1 = RuleBlock('rb_takagi1', operators=('MIN', 'MAX', 'ZADEH'), activation='MIN', accumulation='MAX')
  48. block1.add_rules(rule4a,rule4b,rule4c,rule5a,rule5b,rule5c,rule6a,rule6b,rule6c, scope=scope)
  49.  
  50. block2 = RuleBlock('rb_takagi2', operators=('PROD', 'ASUM', 'SUGENO'), activation='PROD', accumulation='ASUM')
  51. block2.add_rules(rule4a,rule4b,rule4c,rule5a,rule5b,rule5c,rule6a,rule6b,rule6c, scope=scope)
  52.  
  53. block3 = RuleBlock('rb_takagi3', operators=('BDIF', 'MAX', 'SUGENO'), activation='BDIF', accumulation='MAX')
  54. block3.add_rules(rule4a,rule4b,rule4c,rule5a,rule5b,rule5c,rule6a,rule6b,rule6c, scope=scope)
  55.  
  56. rule1a = 'if cena_wczoraj2 is a_p_tanio2 and cena_dzis2 is a_p_tanio then z=cena_dzis2*0.5+cena_wczoraj2*0.5+1'
  57. rule1b = 'if cena_wczoraj2 is a_p_tanio2 and cena_dzis2 is a_p_srednio then z=cena_dzis2*0.6+cena_wczoraj2*0.4+1'
  58. rule1c = 'if cena_wczoraj2 is a_p_tanio2 and cena_dzis2 is a_p_drogo then z=cena_dzis2*0.8+cena_wczoraj2*0.2+1'
  59.  
  60. rule2a = 'if cena_wczoraj2 is a_p_srednio2 and cena_dzis2 is a_p_tanio then z=0.6*cena_dzis2+0.4*cena_wczoraj2+1'
  61. rule2b = 'if cena_wczoraj2 is a_p_srednio2 and cena_dzis2 is a_p_srednio then z=cena_dzis2*0.5+cena_wczoraj2*0.5+1'
  62. rule2c = 'if cena_wczoraj2 is a_p_srednio2 and cena_dzis2 is a_p_drogo then z=0.6*cena_dzis2+0.4*cena_wczoraj2+1'
  63.  
  64. rule3a = 'if cena_wczoraj2 is a_p_drogo2 and cena_dzis2 is a_p_tanio then z=0.8*cena_dzis2+0.2*cena_wczoraj2+1'
  65. rule3b = 'if cena_wczoraj2 is a_p_drogo2 and cena_dzis2 is a_p_srednio then z=0.6*cena_dzis2+0.4*cena_wczoraj2+1'
  66. rule3c = 'if cena_wczoraj2 is a_p_drogo2 and cena_dzis2 is a_p_drogo then z=cena_dzis2*0.5+cena_wczoraj2*0.5+1'
  67.  
  68. block4 = RuleBlock('rb_takagi4', operators=('EPROD', 'ESUM', 'ZADEH'), activation='EPROD', accumulation='ESUM')
  69. block4.add_rules(rule1a,rule1b,rule1c,rule2a,rule2b,rule2c,rule3a,rule3b,rule3c, scope=scope)
  70.  
  71. from fuzzython.systems.sugeno import SugenoSystem
  72.  
  73. sugeno1 = SugenoSystem('model_takagi1', block1)
  74. sugeno2 = SugenoSystem('model_takagi2', block2)
  75. sugeno3 = SugenoSystem('model_takagi3', block3)
  76. sugeno4 = SugenoSystem('model_takagi4', block4)
  77.  
  78. # dane wejściowe
  79. inputs = {'cena_dzis': 6, 'cena_wczoraj': 14}
  80. # obliczenie odpowiedzi
  81. res1 = sugeno1.compute(inputs)
  82. res2 = sugeno2.compute(inputs)
  83. res3 = sugeno3.compute(inputs)
  84.  
  85. inputs2 = {'cena_dzis2': 6, 'cena_wczoraj2': 14}
  86. res4 = sugeno4.compute(inputs2)
  87. # zwraca słownik, trochę inaczej niż w mamdani
  88. print(res1,res2,res3,res4)
  89.  
  90. # przygotowanie siatki
  91. sampled = np.linspace(1, 20, 50)
  92. x, y = np.meshgrid(sampled, sampled)
  93. z1 = np.zeros((len(sampled),len(sampled)))
  94. z2 = np.zeros((len(sampled),len(sampled)))
  95. z3 = np.zeros((len(sampled),len(sampled)))
  96. z4 = np.zeros((len(sampled),len(sampled)))
  97.  
  98. for i in range(len(sampled)):
  99. for j in range(len(sampled)):
  100. inputs = {'cena_dzis': x[i, j], 'cena_wczoraj': y[i, j]}
  101. inputs2 = {'cena_dzis2': x[i, j], 'cena_wczoraj2': y[i, j]}
  102. res1 = sugeno1.compute(inputs)
  103. res2 = sugeno2.compute(inputs)
  104. res3 = sugeno3.compute(inputs)
  105. res4 = sugeno4.compute(inputs2)
  106. z1[i, j] = res1['rb_takagi1']
  107. z2[i, j] = res2['rb_takagi2']
  108. z3[i, j] = res3['rb_takagi3']
  109. z4[i, j] = res4['rb_takagi4']
  110.  
  111. fig1 = plt.figure()
  112. ax1 = fig1.add_subplot(111, projection='3d')
  113. surf = ax1.plot_surface(x, y, z1, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
  114. cset = ax1.contourf(x, y, z1, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
  115. cset = ax1.contourf(x, y, z1, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
  116. cset = ax1.contourf(x, y, z1, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
  117. ax1.set_xlabel('cena_dzis')
  118. ax1.set_ylabel('cena_wczoraj')
  119. ax1.set_zlabel('cena_jutro')
  120. ax1.view_init(30, 200)
  121.  
  122. fig2 = plt.figure()
  123. ax2 = fig2.add_subplot(111, projection='3d')
  124. surf = ax2.plot_surface(x, y, z2, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
  125. cset = ax2.contourf(x, y, z2, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
  126. cset = ax2.contourf(x, y, z2, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
  127. cset = ax2.contourf(x, y, z2, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
  128. ax2.set_xlabel('cena_dzis')
  129. ax2.set_ylabel('cena_wczoraj')
  130. ax2.set_zlabel('cena_jutro')
  131. ax2.view_init(30, 200)
  132.  
  133. fig3 = plt.figure()
  134. ax3 = fig3.add_subplot(111, projection='3d')
  135. surf = ax3.plot_surface(x, y, z3, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
  136. cset = ax3.contourf(x, y, z3, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
  137. cset = ax3.contourf(x, y, z3, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
  138. cset = ax3.contourf(x, y, z3, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
  139. ax3.set_xlabel('cena_dzis')
  140. ax3.set_ylabel('cena_wczoraj')
  141. ax3.set_zlabel('cena_jutro')
  142. ax3.view_init(30, 200)
  143.  
  144. fig4 = plt.figure()
  145. ax4 = fig4.add_subplot(111, projection='3d')
  146. surf = ax4.plot_surface(x, y, z4, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
  147. cset = ax4.contourf(x, y, z4, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
  148. cset = ax4.contourf(x, y, z4, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
  149. cset = ax4.contourf(x, y, z4, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
  150. ax4.set_xlabel('cena_dzis')
  151. ax4.set_ylabel('cena_wczoraj')
  152. ax4.set_zlabel('cena_jutro')
  153. ax4.view_init(30, 200)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement