Este proyecto implementa una herramienta escrita en C# utilizando .NET Framework 4.7.1 que permite al usuario:
-
Definir un sistema de inferencia difusa:
- Definir las variables de entrada y salida, con sus respectivos valores lingüísticos y funciones de membresía
- Definir las reglas de inferencia
- Especificar el método a emplear
- Definir el tamaño de paso a utilizar en la discretización de los valores de las variables de salida
-
Utilizar el sistema de inferencia definido, para obtener los valores de las variables de salida para diferentes juegos de datos
El programa se ejecuta mediante el comando:
FuzzyApp.exe <data>.json <rules>.fis [<step_size>]<data>.json: fichero en formato JSON con las especificaciones de las variables de entrada y sus respectivos valores, así como las funciones de membresía. Un ejemplo de una variable y una función sería:
{
"variables": {
"input1": 5.3
},
"functions": {
"membership_func1": [
"Trapezoid", 10, 15, 20, 25
]
}
}Como se puede deducir del ejemplo, las funciones se especifican mediante una lista, cuyo primer elemento es el tipo de la función y los restantes son los parámetros que caracterizan su comportamiento; siendo estos últimos específicos de cada tipo. Los tipos de funciones soportadas son:
-
Trapezoid:
a: Punto donde la monotonía de la función pasa a ser creciente, por tanto,f(a)==0. Sia==nullse asume que para cualquierx<=ase cumple quef(x)==1.b: Menor (mayor sia==null) valor dexpara el quef(x)==1.c: Mayor valor dexpara el quef(x)==1, si no existe talxfinita, entoncesc==null. Sia==null, entonces es el menor valor dexpara el quef(x)==0.d: Punto donde la monotonía deja de ser decreciente. Si no existe, oa==null, entoncesc==null.
-
Triangle: Caso particular de trapezoide, con tres parámetros
a,bycrepresentando lasxde sus 3 vértices. -
Sigmoid:
k: Ancho del sigmoidex0: Valor central
-
Gaussian:
b: Centro de la campanac: Ancho de la campana
<rules>.fis: ficherode extensión fis (fuzzy inference system) con la especificación de las reglas y el modelo de inferencia; sigue el siguiente formato:
[model] (Mamdani | Sugeno | Tsukamoto)
[t-norm] (min | product)
[t-conorm] (max | sum)
([defuzzy] (Centroid | Bisecter | Mean_max))?
input1 is val1 or input2 is val2 then output1 is val3
Todas las variables definidas a la izquierda de los then deben tener un valor asociado en el fichero de datos (.json). Asimismo ha de ocurrir con los valores lingüísticos usados en las reglas.
En el caso de usar el modelo Sugeno, el valor la parte derecha de los then será una expresión aritmética que puede usar valores numéricos y variables de entrada. Los operadores permitidos en este caso son +, -, *, / y ** (potencia).
En los campos t-norm y t-conorm se indicarán las operaciones para evaluar las expresiones and y or respectivamente.
El programa reporta el resultado de evaluar el sistema especificado. Los valores calculados para cada una de las variables de salidas son reportados por la salida estándar, siguiendo el formato: output1: #.000\n
Iván Galbán Smith ivan.galban.smith@gmail.com
4th year Computer Science student, University of Havana