Advertisement
toweber

fuzzy_inference_multiple_rules

Sep 9th, 2021
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.15 KB | None | 0 0
  1. import os
  2. import ipdb # ipdb.set_trace()
  3. import numpy as np
  4.  
  5. def trimf(x, abc):
  6.     a, b, c = abc
  7.     y = np.zeros(len(x))
  8.     left_side_eq = (1/(b-a))*(x-a)
  9.     right_side_eq = (1/(c-b))*(-x+c)
  10.     y = np.minimum(left_side_eq,right_side_eq)    
  11.     y = np.maximum(y,0)
  12.     return y
  13.  
  14. def inference_mamdani_nm(P,ux,uy):
  15.     """
  16.    onde:
  17.    - P é a premissa
  18.    - ux é a função de pertinência do antencedente
  19.    - uy é a função de pertinência do consequente
  20.    - retornará Q
  21.    """
  22.     antecedente_max = np.max(np.minimum(P[:],ux[:]))
  23.     #ipdb.set_trace()
  24.     Q = np.minimum(antecedente_max,uy[:])
  25.     return Q
  26.  
  27. def inference_mamdani_2_premises_and(P1,ux1,P2,ux2,uy):
  28.     """
  29.    onde:
  30.    - P1 é o antecedente 1
  31.    - P2 é o antecedente 2
  32.    - ux1 é a função de pertinência do antencedente 1
  33.    - ux2 é a função de pertinência do antencedente 2
  34.    - uy é a função de pertinência do consequente
  35.    - retornará Q
  36.    """
  37.     antecedente1_max = np.max(np.minimum(P1[:],ux1[:]))
  38.     antecedente2_max = np.max(np.minimum(P2[:],ux2[:]))
  39.     antecedente_max = min(antecedente1_max,antecedente2_max)
  40.     Q = np.minimum(antecedente_max,uy[:])
  41.     return Q
  42.  
  43.  
  44. # conjunto Universo  das variáveis base
  45. #X = [0, 10 ... 80]
  46. X = np.arange(0,81,10)
  47.  
  48. #Y = [-10, -8, ..., 10]
  49. Y = np.arange(-10, 10.1, 2)
  50.  
  51. # Funções de Pertinência
  52. u_x_medio = trimf(X,[0,40,80])  # funcao de pertinencia para variável linguística x1 com valor medio
  53. u_x_alto = trimf(X,[40,80,110])  # funcao de pertinencia para variável linguística x com valor baixo
  54.  
  55. u_y_medio  = trimf(Y,[-10,0,10])     # funcao de pertinencia para variável linguística y com valor medio
  56. u_y_alto  = trimf(Y,[0,10,20])      # funcao de pertinencia para variável linguística y com valor alto
  57.  
  58. #ipdb.set_trace()
  59. # Inferência Fuzzy
  60.  
  61. #Assuma que x = 50
  62. A_l = np.zeros(X.shape[0])   # inicializa A_l
  63. A_l[np.where(X==50)] = 1     # faz que no índice onde o conjunto universo = 50, este conjunto tenha valor 1
  64.  
  65.  
  66. Y_l1 = inference_mamdani_nm(A_l,u_x_medio,u_y_alto)
  67. Y_l2 = inference_mamdani_nm(A_l,u_x_alto,u_y_medio)
  68.  
  69. Y_l = np.maximum(Y_l1,Y_l2)
  70.  
  71. print(Y_l)
  72.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement