Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #% matplotlib notebook
- import numpy as np
- import matplotlib.pyplot as plt
- from mpl_toolkits.mplot3d import Axes3D
- from fuzzython.fsets.triangular import Triangular
- from fuzzython.variable import Variable
- from fuzzython.adjective import Adjective
- from fuzzython.ruleblock import RuleBlock
- from fuzzython.norms import norms
- n_p_tanio=Triangular((0.99,1),(1,0),(10,1))
- p_tanio=n_p_tanio.complement(cnorm=norms.zadeh_complement)
- p_srednio1=Triangular((5,0),(8.25,1),(12.5,0))
- p_srednio2=Triangular((7.5,0),(12.25,1),(15,0))
- p_srednio=p_moderate1.union(p_srednio2,snorm=norms.algebraic_sum)
- p_drogo=Triangular((10,0),(20,1),(20.1,0))
- a_p_tanio = Adjective('p_tanio', p_tanio)
- a_p_srednio = Adjective('p_srednio', p_srednio)
- a_p_drogo = Adjective('p_drogo', p_drogo)
- a_p_tanio2 = Adjective('p_tanio', p_tanio)
- a_p_srednio2 = Adjective('p_srednio', p_srednio2)
- a_p_drogo2 = Adjective('p_drogo', p_drogo)
- cena_dzis = Variable('cena_dzis', 'zł', a_p_tanio, a_p_srednio, a_p_drogo)
- cena_wczoraj = Variable('cena_wczoraj', 'zł', a_p_tanio2, a_p_srednio2, a_p_drogo2)
- cena_dzis2 = Variable('cena_dzis2', 'zł', a_p_tanio, a_p_srednio, a_p_drogo, defuzzification='COA')
- cena_wczoraj2 = Variable('cena_wczoraj2', 'zł', a_p_tanio2, a_p_srednio2, a_p_drogo2, defuzzification='MM',default=0)
- scope = locals()
- 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'
- 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'
- 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'
- 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'
- 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'
- 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'
- 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'
- 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'
- 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'
- block1 = RuleBlock('rb_takagi1', operators=('MIN', 'MAX', 'ZADEH'), activation='MIN', accumulation='MAX')
- block1.add_rules(rule4a,rule4b,rule4c,rule5a,rule5b,rule5c,rule6a,rule6b,rule6c, scope=scope)
- block2 = RuleBlock('rb_takagi2', operators=('PROD', 'ASUM', 'SUGENO'), activation='PROD', accumulation='ASUM')
- block2.add_rules(rule4a,rule4b,rule4c,rule5a,rule5b,rule5c,rule6a,rule6b,rule6c, scope=scope)
- block3 = RuleBlock('rb_takagi3', operators=('BDIF', 'MAX', 'SUGENO'), activation='BDIF', accumulation='MAX')
- block3.add_rules(rule4a,rule4b,rule4c,rule5a,rule5b,rule5c,rule6a,rule6b,rule6c, scope=scope)
- 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'
- 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'
- 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'
- 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'
- 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'
- 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'
- 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'
- 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'
- 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'
- block4 = RuleBlock('rb_takagi4', operators=('EPROD', 'ESUM', 'ZADEH'), activation='EPROD', accumulation='ESUM')
- block4.add_rules(rule1a,rule1b,rule1c,rule2a,rule2b,rule2c,rule3a,rule3b,rule3c, scope=scope)
- from fuzzython.systems.sugeno import SugenoSystem
- sugeno1 = SugenoSystem('model_takagi1', block1)
- sugeno2 = SugenoSystem('model_takagi2', block2)
- sugeno3 = SugenoSystem('model_takagi3', block3)
- sugeno4 = SugenoSystem('model_takagi4', block4)
- # dane wejściowe
- inputs = {'cena_dzis': 6, 'cena_wczoraj': 14}
- # obliczenie odpowiedzi
- res1 = sugeno1.compute(inputs)
- res2 = sugeno2.compute(inputs)
- res3 = sugeno3.compute(inputs)
- inputs2 = {'cena_dzis2': 6, 'cena_wczoraj2': 14}
- res4 = sugeno4.compute(inputs2)
- # zwraca słownik, trochę inaczej niż w mamdani
- print(res1,res2,res3,res4)
- # przygotowanie siatki
- sampled = np.linspace(1, 20, 50)
- x, y = np.meshgrid(sampled, sampled)
- z1 = np.zeros((len(sampled),len(sampled)))
- z2 = np.zeros((len(sampled),len(sampled)))
- z3 = np.zeros((len(sampled),len(sampled)))
- z4 = np.zeros((len(sampled),len(sampled)))
- for i in range(len(sampled)):
- for j in range(len(sampled)):
- inputs = {'cena_dzis': x[i, j], 'cena_wczoraj': y[i, j]}
- inputs2 = {'cena_dzis2': x[i, j], 'cena_wczoraj2': y[i, j]}
- res1 = sugeno1.compute(inputs)
- res2 = sugeno2.compute(inputs)
- res3 = sugeno3.compute(inputs)
- res4 = sugeno4.compute(inputs2)
- z1[i, j] = res1['rb_takagi1']
- z2[i, j] = res2['rb_takagi2']
- z3[i, j] = res3['rb_takagi3']
- z4[i, j] = res4['rb_takagi4']
- fig1 = plt.figure()
- ax1 = fig1.add_subplot(111, projection='3d')
- surf = ax1.plot_surface(x, y, z1, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
- cset = ax1.contourf(x, y, z1, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
- cset = ax1.contourf(x, y, z1, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
- cset = ax1.contourf(x, y, z1, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
- ax1.set_xlabel('cena_dzis')
- ax1.set_ylabel('cena_wczoraj')
- ax1.set_zlabel('cena_jutro')
- ax1.view_init(30, 200)
- fig2 = plt.figure()
- ax2 = fig2.add_subplot(111, projection='3d')
- surf = ax2.plot_surface(x, y, z2, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
- cset = ax2.contourf(x, y, z2, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
- cset = ax2.contourf(x, y, z2, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
- cset = ax2.contourf(x, y, z2, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
- ax2.set_xlabel('cena_dzis')
- ax2.set_ylabel('cena_wczoraj')
- ax2.set_zlabel('cena_jutro')
- ax2.view_init(30, 200)
- fig3 = plt.figure()
- ax3 = fig3.add_subplot(111, projection='3d')
- surf = ax3.plot_surface(x, y, z3, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
- cset = ax3.contourf(x, y, z3, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
- cset = ax3.contourf(x, y, z3, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
- cset = ax3.contourf(x, y, z3, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
- ax3.set_xlabel('cena_dzis')
- ax3.set_ylabel('cena_wczoraj')
- ax3.set_zlabel('cena_jutro')
- ax3.view_init(30, 200)
- fig4 = plt.figure()
- ax4 = fig4.add_subplot(111, projection='3d')
- surf = ax4.plot_surface(x, y, z4, rstride=1, cstride=1, cmap='viridis', linewidth=0.4, antialiased=True)
- cset = ax4.contourf(x, y, z4, zdir='z', offset= -1, cmap='viridis', alpha=0.5)
- cset = ax4.contourf(x, y, z4, zdir='x', offset= 11, cmap='viridis', alpha=0.5)
- cset = ax4.contourf(x, y, z4, zdir='y', offset= 11, cmap='viridis', alpha=0.5)
- ax4.set_xlabel('cena_dzis')
- ax4.set_ylabel('cena_wczoraj')
- ax4.set_zlabel('cena_jutro')
- ax4.view_init(30, 200)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement