Introdução ao Python aplicada a Lógica Fuzzy
Até aqui, mergulhamos fundo nas águas teóricas dos conjuntos difusos. Já exploramos desde a Introdução à Lógica Fuzzy, passamos pelas Propriedades do Conjunto Fuzzy e chegamos até a sofisticação dos Alpha-cortes e o Princípio de Extensão de Zadeh.
Mas a matemática só ganha vida de verdade quando a vemos em ação, resolvendo problemas complexos de engenharia, economia e inteligência artificial. Para isso, o Python é a nossa ferramenta de escolha. Hoje, vamos aprender a preparar o terreno para transformar fórmulas em algoritmos.
Google Colab
Antes de instalarmos qualquer coisa, uma recomendação de ouro: Google Colab.
Se você está começando, não precisa se preocupar em configurar variáveis de ambiente ou lidar com conflitos de versão no seu computador. O Colab é um ambiente baseado em nuvem que já vem com quase tudo o que um matemático precisa (como NumPy, Pandas e Matplotlib) pré-instalado.
Vantagens:
- Grátis e sem necessidade de instalação local.
- Acesso a hardware potente (GPUs).
- Facilidade para compartilhar seus "cadernos" (notebooks) de cálculos.
Instalando as Bibliotecas Essenciais
O ecossistema Python possui duas bibliotecas principais para quem trabalha com lógica difusa. Como elas não vêm instaladas por padrão no Colab, precisamos de um comando simples de "uma linha" para trazê-las ao nosso projeto.
1. Scikit-Fuzzy (skfuzzy)
É a biblioteca mais clássica e robusta. Ela é construída sobre o ecossistema SciPy e é ideal para quem quer um controle granular sobre as funções de pertinência e os métodos de defuzzificação.
Como instalar:
Abra uma célula de código no seu Colab e digite:
!pip install scikit-fuzzy
2. Simpful
Se você busca uma abordagem mais moderna e orientada a objetos, a Simful é incrível. Ela é extremamente intuitiva para criar Sistemas de Inferência Fuzzy (Mamdani ou Sugeno) com menos linhas de código.
Como instalar:
!pip install simpful
Verificando a instalação
Após rodar os comandos de instalação, é sempre bom garantir que tudo está funcionando. Tente importar as bibliotecas e verificar suas versões com o código abaixo:
import skfuzzy as fuzzy
import simpful as sf
import numpy as np
print(f"Versão do Scikit-Fuzzy: {fuzzy.__version__}")
# Se não houver erros, você está pronto para os cálculos!
Problema: O Conforto térmico
Vamos supor que estamos projetando um sistema de climatização inteligente. No mundo da lógica clássica, diríamos que um quarto está "confortável" se a temperatura for exatamente entre $20^\circ C$ e $25^\circ C$. Se estiver $19,9^\circ C$, o sistema diria que "não está confortável".
Na Lógica Fuzzy, entendemos que o conforto é gradual.
Definição do Universo de Discurso ($U$)
O nosso universo é o intervalo de temperaturas possíveis para o ambiente interno:
$$U = [10, 35] \text{ em graus Celsius (°C)}$$
O Conjunto Fuzzy: "Temperatura Confortável" ($C$)
Diferente de um conjunto comum, o conjunto fuzzy $C$ permitirá que uma temperatura tenha um grau de pertinência $\mu_C(x)$ entre $0$ e $1$.
A Função de Pertinência ($\mu_C$)
Vamos utilizar uma função trapezoidal, que é ideal para representar faixas de valores ideais. Definimos os seguintes limites:
- Abaixo de $15^\circ C$: Desconfortável (Pertinência $0$).
- Entre $15^\circ C$ e $20^\circ C$: O conforto começa a subir linearmente.
- Entre $20^\circ C$ e $25^\circ C$: Conforto ideal (Pertinência $1$).
- Entre $25^\circ C$ e $30^\circ C$: O conforto começa a cair (está ficando quente).
- Acima de $30^\circ C$: Desconfortável (Pertinência $0$).
Modelo matemático
A função de pertinência $\mu_C(x)$ para a temperatura $x$ é dada por:
$$\mu_C(x) = \begin{cases} 0, & \text{se } x \le 15 \\ \frac{x - 15}{20 - 15}, & \text{se } 15 < x \le 20 \\ 1, & \text{se } 20 < x \le 25 \\ \frac{30 - x}{30 - 25}, & \text{se } 25 < x \le 30 \\ 0, & \text{se } x > 30 \end{cases}$$
Modelo computacional do problema
No Python (usando a biblioteca skfuzzy que instalamos), definiríamos esse trapézio com apenas uma linha de comando:
import skfuzzy as fuzz
import numpy as np
# Universo de 10 a 35 graus
x_temp = np.arange(10, 36, 1)
# Criando a função trapezoidal [a, b, c, d]
conforto = fuzz.trapmf(x_temp, [15, 20, 25, 30])
Assim, caso a temperatura do quarto esteja a 18°C, por exemplo, podemos determinar o grau de pertinência ao conjunto $C$ com o código:
# Determinar o grau de pertinência para 18ºC
valor_entrada = 18
pertinencia_alvo = fuzz.interp_membership(x_temp, conforto, valor_entrada)
print(f"O grau de pertinência para {valor_entrada}°C é: {pertinencia_alvo:.2f}")
Para representar graficamente a função de pertinência $\mu_C$ podemos utilizar a biblioteca matplotlib para gerar um gráfico elegante e informativo e dando destaque à temperatura de 18°C.
import matplotlib.pyplot as plt
# Configuração do Gráfico
fig, ax = plt.subplots(figsize=(10, 6))
# Plotagem da linha da função
ax.plot(x_temp, conforto, 'b', linewidth=2, label='Conjunto Fuzzy "Confortável"')
# Preenchimento da área sob a curva (estética de blog)
ax.fill_between(x_temp, conforto, facecolor='blue', alpha=0.1)
# Destaque para o ponto de 18°C
ax.vlines(valor_entrada, 0, pertinencia_alvo, color='red', linestyle='--')
ax.plot(valor_entrada, pertinencia_alvo, 'ro', label=f'Ponto de Entrada ({valor_entrada}°C)')
# Anotação do valor de pertinência no gráfico
ax.annotate(f'μ = {pertinencia_alvo:.2f}',
xy=(valor_entrada, pertinencia_alvo),
xytext=(valor_entrada - 4, pertinencia_alvo + 0.1),
arrowprops=dict(facecolor='black', shrink=0.05, width=1, headwidth=5))
# Títulos e Rótulos (Design Matemático)
ax.set_title('Representação da Função de Pertinência Trapezoidal', fontsize=15)
ax.set_xlabel('Temperatura (°C)', fontsize=12)
ax.set_ylabel('Grau de Pertinência ($\mu$)', fontsize=12)
ax.set_ylim(-0.05, 1.05)
ax.legend(loc='upper right')
ax.grid(True, linestyle=':', alpha=0.6)
plt.show()
Queremos ouvir você!
A matemática só faz sentido quando é compartilhada e discutida. Por isso, deixe seu comentário abaixo:
- Você conseguiu rodar o código no seu Google Colab?
- Consegue imaginar outro exemplo do dia a dia onde uma variável é "fuzzy" (como "café quente", "carro rápido" ou "pessoa alta")?
- Tem alguma dúvida sobre as funções de pertinência que vimos hoje?
Gostou deste laboratório prático? Não esqueça de compartilhar este artigo com seus colegas professores ou entusiastas da tecnologia. Vamos levar a "Bendita Matemática" para cada vez mais pessoas!
Nos vemos no próximo post. Até lá! 📐✨


Comentários
Postar um comentário
Não postar comentários ofensivos e que contenham palavrões. Comente sobre o assunto da postagem que você leu.