Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import ipdb # ipdb.set_trace()
- import numpy as np
- def trimf(x, abc):
- a, b, c = abc
- y = np.zeros(len(x))
- left_side_eq = (1/(b-a))*(x-a)
- right_side_eq = (1/(c-b))*(-x+c)
- y = np.minimum(left_side_eq,right_side_eq)
- y = np.maximum(y,0)
- return y
- def inference_mamdani_nm(P,ux,uy):
- """
- onde:
- - P é a premissa
- - ux é a função de pertinência do antencedente
- - uy é a função de pertinência do consequente
- - retornará Q
- """
- antecedente_max = np.max(np.minimum(P[:],ux[:]))
- #ipdb.set_trace()
- Q = np.minimum(antecedente_max,uy[:])
- return Q
- def inference_mamdani_2_premises_and(P1,ux1,P2,ux2,uy):
- """
- onde:
- - P1 é o antecedente 1
- - P2 é o antecedente 2
- - ux1 é a função de pertinência do antencedente 1
- - ux2 é a função de pertinência do antencedente 2
- - uy é a função de pertinência do consequente
- - retornará Q
- """
- antecedente1_max = np.max(np.minimum(P1[:],ux1[:]))
- antecedente2_max = np.max(np.minimum(P2[:],ux2[:]))
- antecedente_max = min(antecedente1_max,antecedente2_max)
- Q = np.minimum(antecedente_max,uy[:])
- return Q
- # conjunto Universo das variáveis base
- #X = [0, 10 ... 80]
- X = np.arange(0,81,10)
- #Y = [-10, -8, ..., 10]
- Y = np.arange(-10, 10.1, 2)
- # Funções de Pertinência
- u_x_medio = trimf(X,[0,40,80]) # funcao de pertinencia para variável linguística x1 com valor medio
- u_x_alto = trimf(X,[40,80,110]) # funcao de pertinencia para variável linguística x com valor baixo
- u_y_medio = trimf(Y,[-10,0,10]) # funcao de pertinencia para variável linguística y com valor medio
- u_y_alto = trimf(Y,[0,10,20]) # funcao de pertinencia para variável linguística y com valor alto
- #ipdb.set_trace()
- # Inferência Fuzzy
- #Assuma que x = 50
- A_l = np.zeros(X.shape[0]) # inicializa A_l
- A_l[np.where(X==50)] = 1 # faz que no índice onde o conjunto universo = 50, este conjunto tenha valor 1
- Y_l1 = inference_mamdani_nm(A_l,u_x_medio,u_y_alto)
- Y_l2 = inference_mamdani_nm(A_l,u_x_alto,u_y_medio)
- Y_l = np.maximum(Y_l1,Y_l2)
- print(Y_l)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement