Mudanças entre as edições de "Lógica Difusa: exemplo em Python"
De Aulas
(Criou página com 'Afluentes: Inteligência Artificial <syntaxhighlight lang=python line> import numpy as np import skfuzzy as fuzzy from skfuzzy import control # Cria as variáveis do pro...') |
|||
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | |||
− | <syntaxhighlight lang=python | + | Afluentes: [[Inteligência Artificial]], [[Modelos Evolutivos e Tratamento de Incertezas]] |
+ | |||
+ | = Preparação = | ||
+ | |||
+ | Para executar o código abaixo, precisamos seguir alguns passos: | ||
+ | |||
+ | 1. Criar uma pasta para o projeto. Nesse exemplo consideramos que já temos um workspace para projetos de python (ex: pydev) e meu_usuario deve ser substituido pelo seu usuario no linux. | ||
+ | |||
+ | mkdir -p /home/meu_usuario/pydev/meu_projeto | ||
+ | |||
+ | Isso também vale para windows, lembrando que precisamos criar nossa pasta em algum drive, tipo C:, algo como: | ||
+ | C:\desenvolvimento\pydev\meu_projeto | ||
+ | 2. Entrar na pasta | ||
+ | |||
+ | cd /home/meu_usuario/pydev/meu_projeto | ||
+ | |||
+ | 3. Criar o ambiente virtual dentro da pasta do projeto. Normalmente criamos um ambiente venv para cada projeto. | ||
+ | |||
+ | python3 -m venv venv | ||
+ | |||
+ | 4. Ativar o ambiente virtual (dentro da pasta do projeto também) | ||
+ | |||
+ | source venv/bin/activate | ||
+ | |||
+ | 5. Instalar as bibliotecas necessárias para rodar o código abaixo | ||
+ | |||
+ | pip install numpy matplotlib scipy scikit-fuzzy networkx | ||
+ | |||
+ | 6. Criar o arquivo do script e executar | ||
+ | |||
+ | python3 meuscript.py | ||
+ | |||
+ | = Código = | ||
+ | <syntaxhighlight lang="python"> | ||
import numpy as np | import numpy as np | ||
import skfuzzy as fuzzy | import skfuzzy as fuzzy | ||
Linha 49: | Linha 81: | ||
servico.view(sim=gorjeta_simulador) | servico.view(sim=gorjeta_simulador) | ||
gorjeta.view(sim=gorjeta_simulador) | gorjeta.view(sim=gorjeta_simulador) | ||
+ | |||
+ | input("Pressione Enter para sair...") | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | = Resultado = | ||
+ | |||
+ | [[Arquivo:Fuzzy py 01.png|centro|miniaturadaimagem|582x582px|Comida]] | ||
+ | [[Arquivo:Fuzzy py 02.png|centro|miniaturadaimagem|584x584px|Serviço]] | ||
+ | [[Arquivo:Fuzzy py 03.png|centro|miniaturadaimagem|591x591px|Gorjeta]] |
Edição atual tal como às 23h02min de 9 de abril de 2025
Afluentes: Inteligência Artificial, Modelos Evolutivos e Tratamento de Incertezas
Preparação
Para executar o código abaixo, precisamos seguir alguns passos:
1. Criar uma pasta para o projeto. Nesse exemplo consideramos que já temos um workspace para projetos de python (ex: pydev) e meu_usuario deve ser substituido pelo seu usuario no linux.
mkdir -p /home/meu_usuario/pydev/meu_projeto
Isso também vale para windows, lembrando que precisamos criar nossa pasta em algum drive, tipo C:, algo como:
C:\desenvolvimento\pydev\meu_projeto
2. Entrar na pasta
cd /home/meu_usuario/pydev/meu_projeto
3. Criar o ambiente virtual dentro da pasta do projeto. Normalmente criamos um ambiente venv para cada projeto.
python3 -m venv venv
4. Ativar o ambiente virtual (dentro da pasta do projeto também)
source venv/bin/activate
5. Instalar as bibliotecas necessárias para rodar o código abaixo
pip install numpy matplotlib scipy scikit-fuzzy networkx
6. Criar o arquivo do script e executar
python3 meuscript.py
Código
import numpy as np
import skfuzzy as fuzzy
from skfuzzy import control
# Cria as variáveis do problema
comida = control.Antecedent(np.arange(0, 11, 1), 'comida')
servico = control.Antecedent(np.arange(0, 11, 1), 'servico')
gorjeta = control.Consequent(np.arange(0, 26, 1), 'gorjeta')
# Cria automaticamente o mapeamento entre valores nítidos e difusos
# usando uma função de pertinência padrão (triângulo)
comida.automf(names=['péssima', 'comível', 'deliciosa'])
# Cria as funções de pertinência usando tipos variados
servico['ruim'] = fuzzy.trimf(servico.universe, [0, 0, 5])
servico['aceitável'] = fuzzy.gaussmf(servico.universe, 5, 2)
servico['excelente'] = fuzzy.gaussmf(servico.universe, 10, 3)
gorjeta['baixa'] = fuzzy.trimf(gorjeta.universe, [0, 0, 13])
gorjeta['média'] = fuzzy.trapmf(gorjeta.universe, [0, 13, 15, 25])
gorjeta['alta'] = fuzzy.trimf(gorjeta.universe, [15, 25, 25])
# Posso ver cada gráfico difuso com a função view
# comida.view()
# servico.view()
# gorjeta.view()
rule1 = control.Rule(servico['excelente'] | comida['deliciosa'], gorjeta['alta'])
rule2 = control.Rule(servico['aceitável'], gorjeta['média'])
rule3 = control.Rule(servico['ruim'] & comida['péssima'], gorjeta['baixa'])
gorjeta_control = control.ControlSystem([rule1, rule2, rule3])
gorjeta_simulador = control.ControlSystemSimulation(gorjeta_control)
# Entrando com alguns valores para qualidade da comida e do serviço
gorjeta_simulador.input['comida'] = 3.5
gorjeta_simulador.input['servico'] = 2.4
# Calculando o resultado
gorjeta_simulador.compute()
print(gorjeta_simulador.output['gorjeta'])
# Mostrando os gráficos fuzzy gerados
comida.view(sim=gorjeta_simulador)
servico.view(sim=gorjeta_simulador)
gorjeta.view(sim=gorjeta_simulador)
input("Pressione Enter para sair...")