Lógica Difusa: exemplo em Python

De Aulas

Afluentes: Inteligência Artificial, Modelos Evolutivos e Tratamento de Incertezas

 1import numpy as np
 2import skfuzzy as fuzzy
 3from skfuzzy import control
 4
 5# Cria as variáveis do problema
 6comida = control.Antecedent(np.arange(0, 11, 1), 'comida')
 7servico = control.Antecedent(np.arange(0, 11, 1), 'servico')
 8gorjeta = control.Consequent(np.arange(0, 26, 1), 'gorjeta')
 9
10# Cria automaticamente o mapeamento entre valores nítidos e difusos
11# usando uma função de pertinência padrão (triângulo)
12comida.automf(names=['péssima', 'comível', 'deliciosa'])
13
14# Cria as funções de pertinência usando tipos variados
15servico['ruim'] = fuzzy.trimf(servico.universe, [0, 0, 5])
16servico['aceitável'] = fuzzy.gaussmf(servico.universe, 5, 2)
17servico['excelente'] = fuzzy.gaussmf(servico.universe, 10, 3)
18
19gorjeta['baixa'] = fuzzy.trimf(gorjeta.universe, [0, 0, 13])
20gorjeta['média'] = fuzzy.trapmf(gorjeta.universe, [0, 13, 15, 25])
21gorjeta['alta'] = fuzzy.trimf(gorjeta.universe, [15, 25, 25])
22
23# Posso ver cada gráfico difuso com a função view
24# comida.view()
25# servico.view()
26# gorjeta.view()
27
28rule1 = control.Rule(servico['excelente'] | comida['deliciosa'], gorjeta['alta'])
29rule2 = control.Rule(servico['aceitável'], gorjeta['média'])
30rule3 = control.Rule(servico['ruim'] & comida['péssima'], gorjeta['baixa'])
31
32gorjeta_control = control.ControlSystem([rule1, rule2, rule3])
33gorjeta_simulador = control.ControlSystemSimulation(gorjeta_control)
34
35# Entrando com alguns valores para qualidade da comida e do serviço
36gorjeta_simulador.input['comida'] = 3.5
37gorjeta_simulador.input['servico'] = 2.4
38
39# Calculando o resultado
40gorjeta_simulador.compute()
41
42print(gorjeta_simulador.output['gorjeta'])
43
44# Mostrando os gráficos fuzzy gerados
45comida.view(sim=gorjeta_simulador)
46servico.view(sim=gorjeta_simulador)
47gorjeta.view(sim=gorjeta_simulador)