0% encontró este documento útil (0 votos)
336 vistas19 páginas

Lógica Difusa en Python con simpful

Este documento describe la biblioteca simpful para Python, la cual permite definir sistemas de lógica difusa de manera personalizada. Simpful permite definir funciones de pertenencia personalizadas, reglas difusas en lenguaje natural, e inferencia difusa de orden arbitrario. El documento también presenta un ejemplo de un sistema difuso para calcular la propina basado en la calidad del servicio y comida.

Cargado por

MONICA
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
336 vistas19 páginas

Lógica Difusa en Python con simpful

Este documento describe la biblioteca simpful para Python, la cual permite definir sistemas de lógica difusa de manera personalizada. Simpful permite definir funciones de pertenencia personalizadas, reglas difusas en lenguaje natural, e inferencia difusa de orden arbitrario. El documento también presenta un ejemplo de un sistema difuso para calcular la propina basado en la calidad del servicio y comida.

Cargado por

MONICA
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 19

LÓGICA DIFUSA

CON PYTHON
LIBRERÍA: simpful
LIBRERÍAS FUZZY PARA PYTHON
 PyFuzzy, la primera para Python 2, ya no se actualiza.
1. Scikit-Fuzzy es una API de lógica difusa que funciona
en scipy, para modelar sistemas difusos.
2. Fuzzylab es una biblioteca de Python 3, basada en
Octave Fuzzy Logic Toolkit, crea controladores fuzzy.
Ambas bibliotecas no admiten definir funciones de
pertenencia personalizadas (solo preimplementadas) ni
sistemas de inferencia Takagi-Sugeno de orden
arbitrario. No proporcionan una interfaz cercana al
lenguaje natural para la definición de FIS. Fuzzylab
emplea una matriz que el usuario debe ingresar para
definir la base de reglas completa. Scikit-Fuzzy adopta
la notación de prefijo para definir los antecedentes de
las reglas.
CARACTERÍSTICAS DE simpful
 Definición personalizada de funciones de
pertenencia: gaussiano (Gaussian_MF), gaussiano
invertido (InvGaussian_MF), doble gaussiano
(DoubleGaussian_MF), sigmoide (Sigmoid_MF),
sigmoide invertido (InvSigmoid_MF),
Triangular_MF), trapezoidal (Trapezoidal_MF).
 Definición de reglas difusas como cadenas de
caracteres escritas en lenguaje natural.
 Definición de reglas difusas arbitrariamente
complejas construidas con los operadores lógicos
Y (mínimo), NO (complemento a 1), O (máximo).
 Métodos de inferencia: Mamdani y cualquier orden
Takagi-Sugeno
INSTALAR simpful

Descomprimir simpful-master.rar (mejor en la carpeta


donde tiene instalado Python). Estará en la carpeta
simpful-master
En Python abrir la ventana de comandos:
(Command Promt.exe)
Ir a la carpeta simpful-master.
Luego ir a la carpeta simpful (está en simpful-master).
Ejecutar:
> pip install simpful
ARQUITECTURA DEL SISTEMA
BASADO EN LÓGICA DIFUSA

REGLAS
Entrada Salida
Discreta Discreta
x  Un y=f(x)  V

FUZZYFICACIÓN DEFUZZYFICACIÓN

MOTOR DE
INFERENCIA
Entrada difusa DIFUSO
Salida difusa
MOTOR DE INFERENCIA
REGLAS

BORROSIFICADOR DESBORROSIFICADOR

MOTOR DE
INFERENCIA

CONEXIÓN
ANTECEDENTES
IMPLICACIÓN

AGREGACIÓN
CONEXIÓN ANTECEDENTES
REGLAS

BORROSIFICADOR DESBORROSIFICADOR

MOTOR DE
INFERENCIA

Regla 1: SI x es A1 Y y es B1 ENTONCES z es C1

SI x es A1 Y y es B1 ...
x y

A1 B1
MÍNIMO
1
PRODUCTO
x=x0 y=y0


mínimo : 1  min  A1 ( x0 ), B1 ( y0 ) 
producto : 1   A1 ( x0 )   B1 ( y0 )
IMPLICACIÓN
REGLAS

BORROSIFICADOR DESBORROSIFICADOR

MOTOR DE
INFERENCIA

Regla 1: SI x es A1 Y y es B1 ENTONCES z es C1

... ENTONCES z es C1 z

C1
MÍNIMO
C1*
1
C1
PRODUCTO
C1*

mínimo : 
 C* ( z )  min 1 , C1 ( z )
1

producto :  C* ( z )  1   C1 ( z )
1
AGREGACIÓN
REGLAS

BORROSIFICADOR DESBORROSIFICADOR

MOTOR DE
INFERENCIA

Regla 1: SI x es A1 Y y es B1 ENTONCES z es C1
Regla 2: SI x es A2 Y y es B2 ENTONCES z es C2
z
C
z MÁXIMO
REGLA 1 C1 *

REGLA 2 C2 * C SUMA
ALGEBRAICA

máximo : 
 C ( z )  max  C* ( z ), C* ( z ) 
 
1 2

suma algebraica :  C ( z )   C* ( z )   C* ( z )   C* ( z )   C* ( z )
1 2 1 2
DEFUZZYFICACIÓN
REGLAS

BORROSIFICADOR DESBORROSIFICADOR

MOTOR DE
INFERENCIA

MEDIA DE LOS PROMEDIO DE


LOS CENTROS
MÁXIMOS
CENTROIDE

y1

y2

z=z0 z=z0 z=z0


MECANISMO DE SUGENO Y TAKAGI

R1: Si x está en A1 e y está en B1 Entonces z1  p1  x  q1  y

R2: Si x está en A2 e y está en B2 Entonces z 2  p 2  x  q 2  y


Hecho: x es x 0e y es y 0
Consecuencia: z0
 Procedimiento
Primero  1  A1 ( x 0 )  B1 ( y 0 )
 2  A2 ( x 0 )  B 2 ( y 0 )
Luego se calcula: z1  p1 x 0  q1 y 0 z2  p2 x0  q2 y0

1 z1   2 z2
Y la salida crisp z0 
1   2
EJEMPLO DE LA PROPINA

Variable Etiquetas Función de


lingüística pertenencia
SERVICIO pobre, bueno, Triangular
excelente
COMIDA rancia, deliciosa Triangular

PROPINA pequeña, Triangular -


promedio, Trapezoidal
generosa
EJEMPLO DE LA PROPINA
Variables lingüisticas y etiquetas (funciones pertenencia)
from simpful import *
# problema de la propina
# Crear el modelo de sistema difuso
FS = FuzzySystem()
# Definir las variables lingüisticas de entrada y sus
conjuntos difusos (etiquetas y funciones de
pertenencia)
# SERVICIO:
S1 = FuzzySet(function=Triangular_MF(a=0, b=0,
c=5), term="pobre")
S2 = FuzzySet(function=Triangular_MF(a=0, b=5,
c=10), term="bueno")
S3 = FuzzySet(function=Triangular_MF(a=5,b=10,
c=10), term="excelente")
FS.add_linguistic_variable("Servicio",
LinguisticVariable([S1, S2, S3], concept="Calidad
del Servicio", universe_of_discourse=[0,10]))

# COMIDA:
C1 = FuzzySet(function=Triangular_MF(a=0, b=0,
c=10), term="rancia")
C2 = FuzzySet(function=Triangular_MF(a=0, b=10,
c=10), term="deliciosa")

FS.add_linguistic_variable("Comida",
LinguisticVariable([C1, C2], concept="Calidad de la
Comida", universe_of_discourse=[0,10]))
# Definir la variable lingüistica de salida y sus
conjuntos difusos (etiquetas y funciones de
pertenencia)
# PROPINA
P1 = FuzzySet(function=Triangular_MF(a=0, b=0,
c=10), term="pequeña")
P2 = FuzzySet(function=Triangular_MF(a=0, b=10,
c=20), term="promedio")
P3 = FuzzySet(function=Trapezoidal_MF(a=10,
b=20, c=25, d=25), term="generosa")

FS.add_linguistic_variable("Propina",
LinguisticVariable([P1, P2, P3],
universe_of_discourse=[0,25]))
# Definir las reglas difusas
R1 = "IF (Servicio IS pobre) OR (Comida IS rancia)
THEN (Propina IS pequeña)"
R2 = "IF (Servicio IS bueno) THEN (Propina IS
promedio)"
R3 = "IF (Servicio IS excelente) OR (Comida IS
deliciosa) THEN (Propina IS generosa)"
FS.add_rules([R1, R2, R3])

# Realizar una consulta (dar los valores de las


variables de entrada)
FS.set_variable("Servicio", 4)
FS.set_variable("Comida", 8)

# Ejecutar la inferencia Mamdani y mostrar la salida


print(FS.Mamdani_inference(["Propina"]))
SOFTWARE PARA SISTEMAS BASADOS
EN LÓGICA DIFUSA:
- Xfuzzy. Descargar de: (http://www2.imse-
cnm.csic.es/Xfuzzy/index_sp.html) (12Mb)

- Opcional: MATLAB (fuzzy toolbox)


- Python: simpful: Descargar de:
https://github.com/aresio/simpful
GRACIAS

También podría gustarte