Ausência do Arquivo Colab da Gorjeta!

Home Fóruns Fórum Lógica Fuzzy com Python: O Guia para Iniciantes Ausência do Arquivo Colab da Gorjeta!

Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #39647
    ronald brito
    Participante

      Prezados(as),

      O arquivo do google colab do exemplo de gorjetas não está disponível. O arquivo que está lá é do aspirador de pó.

      Podem disponibilizar o arquivo da gorjeta, por gentileza?

      Grato!

      #39913

      bom dia Ronald,

       

      Segue em código aqui um exemplo. Não tenho a opção de anexar arquivo pra você.

       

      #installs
      pip install -U scikit-fuzzy

      #imports
      import numpy as np
      import skfuzzy as fuzz
      import matplotlib.pyplot as plt

      # Gerarando as variáveis do problema
      # * varáveis de Qualidade e serviço em faixas de [0, 10]
      # * a variável “x_tip” que traz o resultado com um intervalo de [0, 25]. Em unidades de pontos percentuais.
      x_qual = np.arange(0, 11, 1)
      x_serv = np.arange(0, 11, 1)
      x_tip  = np.arange(0, 26, 1)

      # Gera as variáveis para as funções de associação difusas
      qual_lo = fuzz.trimf(x_qual, [0, 0, 5])
      qual_md = fuzz.trimf(x_qual, [0, 5, 10])
      qual_hi = fuzz.trimf(x_qual, [5, 10, 10])
      serv_lo = fuzz.trimf(x_serv, [0, 0, 5])
      serv_md = fuzz.trimf(x_serv, [0, 5, 10])
      serv_hi = fuzz.trimf(x_serv, [5, 10, 10])
      tip_lo = fuzz.trimf(x_tip, [0, 0, 13])
      tip_md = fuzz.trimf(x_tip, [0, 13, 25])
      tip_hi = fuzz.trimf(x_tip, [13, 25, 25])

      # Interliga as variáveis para a criação das funções de associação do problema.
      #Cria o ambiente gráfico onde será cruzado os valores para a defuzzificação.
      fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, figsize=(8, 9))

      ax0.plot(x_qual, qual_lo, ‘b’, linewidth=1.5, label=’Mau’)
      ax0.plot(x_qual, qual_md, ‘g’, linewidth=1.5, label=’Decente’)
      ax0.plot(x_qual, qual_hi, ‘r’, linewidth=1.5, label=’Ótimo’)
      ax0.set_title(‘Qualidade da comida’)
      ax0.legend()

      ax1.plot(x_serv, serv_lo, ‘b’, linewidth=1.5, label=’Pobre’)
      ax1.plot(x_serv, serv_md, ‘g’, linewidth=1.5, label=’Aceitável’)
      ax1.plot(x_serv, serv_hi, ‘r’, linewidth=1.5, label=’Surpreendente’)
      ax1.set_title(‘Qualidade do serviço’)
      ax1.legend()

      ax2.plot(x_tip, tip_lo, ‘b’, linewidth=1.5, label=’Baixo’)
      ax2.plot(x_tip, tip_md, ‘g’, linewidth=1.5, label=’Medio’)
      ax2.plot(x_tip, tip_hi, ‘r’, linewidth=1.5, label=’Alto’)
      ax2.set_title(‘Valor de gorjeta’)
      ax2.legend()

      # Desliga os eixos superior/direito
      for ax in (ax0, ax1, ax2):
      ax.spines[‘top’].set_visible(False)
      ax.spines[‘right’].set_visible(False)
      ax.get_xaxis().tick_bottom()
      ax.get_yaxis().tick_left()

      plt.tight_layout()

      (

      Regras difusas

      Agora, para tornar essa triângulação gráfica útil, definimos a relação difusa entre as variáveis ​​de entrada e saída. Em nosso exemplo, considere três regras simples:

      Se a comida for ruim OU o serviço for ruim, a gorjeta será baixa
      Se o serviço for aceitável, a gorjeta será média
      Se a comida for ótima OU o serviço for incrível, a gorjeta será alta.

      )

      # Aqui configuramos as funções de associação difusa nos valores escolhidos:
      # (Nesse caso) Os valores 8.0 (qualidade) e 6.5 (serviço).
      # Para isso se utiliza o “fuzz.interp_membership”.

      qual_level_lo = fuzz.interp_membership(x_qual, qual_lo, 8.0)
      qual_level_md = fuzz.interp_membership(x_qual, qual_md, 8.0)
      qual_level_hi = fuzz.interp_membership(x_qual, qual_hi, 8.0)

      serv_level_lo = fuzz.interp_membership(x_serv, serv_lo, 6.5)
      serv_level_md = fuzz.interp_membership(x_serv, serv_md, 6.5)
      serv_level_hi = fuzz.interp_membership(x_serv, serv_hi, 6.5)

      # Agora se aplica as regras.
      #Regra 1: diz respeito a comida OU serviço ruim.
      active_rule1 = np.fmax(qual_level_lo, serv_level_lo)

      # função de associação “np.fmin” elimina o topo da saída correspondente. Removendo inteiramento para 0.
      tip_activation_lo = np.fmin(active_rule1, tip_lo)

      # Regra 2, se conecta serviço aceitável à gorjeta média.
      tip_activation_md = np.fmin(serv_level_md, tip_md)

      #Regra 3, se conecta serviço Surpreendente OU Ótima comida com alta gorjeta.
      active_rule3 = np.fmax(qual_level_hi, serv_level_hi)
      tip_activation_hi = np.fmin(active_rule3, tip_hi)
      tip0 = np.zeros_like(x_tip)

      #Visualizando após a construção das regras
      fig, ax0 = plt.subplots(figsize=(8, 3))

      ax0.fill_between(x_tip, tip0, tip_activation_lo, facecolor=’b’, alpha=0.7)
      ax0.plot(x_tip, tip_lo, ‘b’, linewidth=0.5, linestyle=’–‘, )
      ax0.fill_between(x_tip, tip0, tip_activation_md, facecolor=’g’, alpha=0.7)
      ax0.plot(x_tip, tip_md, ‘g’, linewidth=0.5, linestyle=’–‘)
      ax0.fill_between(x_tip, tip0, tip_activation_hi, facecolor=’r’, alpha=0.7)
      ax0.plot(x_tip, tip_hi, ‘r’, linewidth=0.5, linestyle=’–‘)
      ax0.set_title(‘Saída das atividades interligadas’)

      # Desliga os eixos superior/direito
      for ax in (ax0,):
      ax.spines[‘top’].set_visible(False)
      ax.spines[‘right’].set_visible(False)
      ax.get_xaxis().tick_bottom()
      ax.get_yaxis().tick_left()

      plt.tight_layout()

      (

      Agregação da Regra

      Com a atividade de cada função de associação de saída conhecida, todas as funções de associação de saída devem ser combinadas.

      Defuzzificação

      Esse método é importante, pois ele estabelece um retorno ao usuário, que se encaixa na lógica anteriormente configurada. Porém o retorno vem de forma única e exata, depois de já ter tratado a questão da difusão. Ou seja, na perspectiva fuzzy que a comida % meio boa e % meio ruim. Em uma escala de 1-10. A comida está com 6.9 exatos de qualidade. E com isso definimos um valor de gorjeta!

      A defuzzificação pode ser calculada com fórmulas diferentes, sendo elas:

      centroid (centroid)
      bisector (bisector)
      mean of maximum (mom)
      min of maximum (som)
      max of maximum (lom)

      )

      #Agrega todas as três funções de associação de saída juntas
      aggregated = np.fmax(tip_activation_lo, np.fmax(tip_activation_md, tip_activation_hi))

      # Calcula o resultado da defuzzificação.
      tip = fuzz.defuzz(x_tip, aggregated, ‘centroid’)
      #tip = fuzz.defuzz(x_tip, aggregated, ‘bisector’)
      #tip = fuzz.defuzz(x_tip, aggregated, ‘mom’)
      #tip = fuzz.defuzz(x_tip, aggregated, ‘som’)
      #tip = fuzz.defuzz(x_tip, aggregated, ‘lom’)
      tip_activation = fuzz.interp_membership(x_tip, aggregated, tip)

      # Visualização após aplicação dos conjuntos e defuzzificação
      fig, ax0 = plt.subplots(figsize=(8, 3))

      ax0.plot(x_tip, tip_lo, ‘b’, linewidth=0.5, linestyle=’–‘, )
      ax0.plot(x_tip, tip_md, ‘g’, linewidth=0.5, linestyle=’–‘)
      ax0.plot(x_tip, tip_hi, ‘r’, linewidth=0.5, linestyle=’–‘)
      ax0.fill_between(x_tip, tip0, aggregated, facecolor=’purple’, alpha=0.7)
      ax0.plot([tip, tip], [0, tip_activation], ‘k’, linewidth=1.5, alpha=0.9)
      ax0.set_title(‘Resutado agregado após a defuzzificação (LINHA)’)

      # Desliga os eixos superior/direito
      for ax in (ax0,):
      ax.spines[‘top’].set_visible(False)
      ax.spines[‘right’].set_visible(False)
      ax.get_xaxis().tick_bottom()
      ax.get_yaxis().tick_left()

      plt.tight_layout()

      #Visualização do número calculado pela defuzzificação (LINHA)
      print(“(Valor gorjeta) (LINHA) – Resultado: “,  tip)

       

      #42587

      Boa noite.

      Ao invés de postar o código, poderia corrigir no link do material. Tive o mesmo problema.

    Visualizando 3 posts - 1 até 3 (de 3 do total)
    • Você deve fazer login para responder a este tópico.