Lógica Fuzzy: Conceito e Exemplo de Implementação em Python
Foto de Rhuan C.
Por: Rhuan C.
20 de Outubro de 2024

Lógica Fuzzy: Conceito e Exemplo de Implementação em Python

Python

A lógica fuzzy (ou lógica difusa) é uma extensão da lógica clássica que lida com a incerteza e valores imprecisos. Ao contrário da lógica booleana, onde as variáveis podem ser verdadeiras ou falsas (1 ou 0), na lógica fuzzy os valores podem ser intermediários, ou seja, qualquer número entre 0 e 1. Isso permite que os sistemas baseados em lógica fuzzy façam inferências mais suaves e realistas, aproximando-se do raciocínio humano.

Este artigo apresenta uma breve introdução à lógica fuzzy, seguida de um exemplo prático de implementação em Python utilizando a biblioteca scikit-fuzzy.

Conceitos Básicos

A lógica fuzzy utiliza conjuntos fuzzy, onde um elemento pode pertencer parcialmente a um conjunto com um grau de pertinência (um número entre 0 e 1). Os conjuntos fuzzy são descritos por funções de pertinência, que atribuem um valor de pertencimento a cada elemento.

Além disso, as decisões na lógica fuzzy são geralmente feitas através de regras do tipo "se-então". Por exemplo:

  • Se a temperatura estiver "muito alta", então reduza a potência do ar-condicionado.

Esse tipo de raciocínio é muito comum em controladores automáticos, onde há variáveis contínuas que não podem ser classificadas apenas como "sim" ou "não".

Exemplo Prático: Controlador de Temperatura com Lógica Fuzzy

Neste exemplo, vamos implementar um sistema básico de controle de temperatura usando a lógica fuzzy. O objetivo é ajustar a velocidade de um ventilador com base na temperatura medida.

Passos:

  1. Definiremos três conjuntos fuzzy para a variável de entrada "temperatura": fria, média e quente.
  2. Definiremos três conjuntos fuzzy para a variável de saída "velocidade do ventilador": baixa, média e alta.
  3. Escreveremos regras fuzzy para descrever o comportamento do sistema.
  4. Faremos a defuzzificação para converter a saída fuzzy em um valor concreto.

Instalação da Biblioteca scikit-fuzzy

Antes de começarmos, precisamos instalar a biblioteca scikit-fuzzy, que é uma ferramenta muito útil para trabalhar com lógica fuzzy em Python. Execute o seguinte comando para instalá-la:

pip install scikit-fuzzy

Código em Python

Aqui está o código para um controlador fuzzy de temperatura:

import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl

# Passo 1: Definindo as variáveis fuzzy (temperatura e velocidade do ventilador)
temperatura = ctrl.Antecedent(np.arange(0, 41, 1), 'temperatura')
velocidade_ventilador = ctrl.Consequent(np.arange(0, 101, 1), 'velocidade_ventilador')

# Passo 2: Definindo as funções de pertinência (fuzzy sets)
temperatura['fria'] = fuzz.trimf(temperatura.universe, [0, 0, 15])
temperatura['media'] = fuzz.trimf(temperatura.universe, [10, 20, 30])
temperatura['quente'] = fuzz.trimf(temperatura.universe, [25, 40, 40])

velocidade_ventilador['baixa'] = fuzz.trimf(velocidade_ventilador.universe, [0, 0, 50])
velocidade_ventilador['media'] = fuzz.trimf(velocidade_ventilador.universe, [30, 50, 70])
velocidade_ventilador['alta'] = fuzz.trimf(velocidade_ventilador.universe, [50, 100, 100])

# Passo 3: Definindo as regras fuzzy
rule1 = ctrl.Rule(temperatura['fria'], velocidade_ventilador['baixa'])
rule2 = ctrl.Rule(temperatura['media'], velocidade_ventilador['media'])
rule3 = ctrl.Rule(temperatura['quente'], velocidade_ventilador['alta'])

# Passo 4: Criando o sistema de controle fuzzy
controle_ventilador = ctrl.ControlSystem([rule1, rule2, rule3])
simulador = ctrl.ControlSystemSimulation(controle_ventilador)

# Passo 5: Testando o sistema com uma entrada
# Definindo a temperatura de entrada
simulador.input['temperatura'] = 28

# Calculando a saída fuzzy
simulador.compute()

# Exibindo a velocidade do ventilador calculada
print(f"Velocidade do ventilador: {simulador.output['velocidade_ventilador']}")

# Visualizando os gráficos das funções de pertinência
temperatura.view()
velocidade_ventilador.view()

Explicação do Código

  1. Definição das variáveis fuzzy: Utilizamos as classes Antecedent e Consequent da biblioteca skfuzzy para definir as variáveis fuzzy "temperatura" e "velocidade do ventilador". As funções de pertinência são definidas usando fuzz.trimf para criar funções triangulares.

  2. Definição das regras fuzzy: As regras de inferência são definidas usando a classe Rule. No exemplo, as regras dizem que:

    • Se a temperatura é fria, a velocidade do ventilador será baixa.
    • Se a temperatura é média, a velocidade será média.
    • Se a temperatura é quente, a velocidade será alta.
  3. Sistema de controle: Utilizamos a classe ControlSystem para combinar as regras fuzzy e a classe ControlSystemSimulation para simular o comportamento do sistema.

  4. Cálculo e resultado: Após definir a temperatura de entrada (neste caso, 28°C), o sistema calcula a velocidade correspondente do ventilador. O valor fuzzy é defuzzificado para obter uma velocidade concreta.

Saída do Exemplo

Para uma temperatura de 28°C, o sistema fuzzy retornará um valor correspondente à velocidade do ventilador, que será um número contínuo (por exemplo, 68.2), o que representa uma velocidade média-alta.

Visualização

As funções de pertinência da temperatura e da velocidade do ventilador podem ser visualizadas utilizando o método view(), o que gera gráficos para ilustrar como as variáveis fuzzy são interpretadas no sistema.

Conclusão

A lógica fuzzy oferece uma abordagem flexível para lidar com incerteza em sistemas dinâmicos, permitindo o desenvolvimento de soluções que imitam o raciocínio humano. A implementação em Python usando a biblioteca scikit-fuzzy torna essa técnica acessível para uma variedade de aplicações, como controle de sistemas, inteligência artificial e automação. Neste exemplo simples, vimos como ajustar a velocidade de um ventilador com base na temperatura de forma suave e contínua, um uso prático comum de lógica fuzzy.

Rhuan C.
Rhuan C.
Alfenas / MG
Responde em 14 h e 13 min
Identidade verificada
1ª hora grátis
5,0
nota média
2
avaliações
R$ 50
por hora
Especialização: Modelagem em Ciência e Tecnologia (UNIFAL)
Professor de matemática, programação e inglês graduado em ciência da computação especializado em modelagem em ciência e tecnologia

Confira artigos similares

Aprenda sobre qualquer assunto