XFL3: El lenguaje de especificación de Xfuzzy 3

Definición de funciones unarias

Las funciones unarias son usadas para describir modificadores lingüísticos. Estas funciones pueden ser asignadas a los modificadores no (not), fuertemente (strongly), más o menos (more-or-less) y ligeramente (slightly). La estructura de la definición de una función unaria es como sigue:

		unary identifier { blocks }                     

Los bloques que pueden aparecer en la definición de una función unaria son: alias, parameter, requires, java, ansi_c, cplusplus, derivative y source.  

El bloque alias se utiliza para definir nombres alternativos para identificar a la función. Cualquiera de esos identificadores puede ser usado para hacer referencia a la función. La sintaxis del bloque alias es:

		alias identifier, identifier, ... ;                    

El bloque parameter permite la definición de los parámetros de los que depende la función. El último identificador puede ir seguido de corchetes para definir una lista de parámetros. Su formato es:

		parameter identifier, identifier, ..., identifier[] ;                    

El bloque requires expresa las restricciones sobre los valores de los parámetros por medio de una expresión Booleana en Java que valida los valores de los parámetros. La estructura de este bloque es:

		requires { expression }                     

Los bloques java, ansi_c y cplusplus describen el comportamiento de la función por medio de su descripción como el cuerpo de una función en los lenguajes de programación Java, C y C++, respectivamente. La variable de entrada para estas funciones es 'a'. El formato de estos bloques es el siguiente:

		java { Java_function_body } 
		ansi_c { C_function_body } 
		cplusplus { C++_function_body } 

El bloque derivative describe la derivada de la función con respecto a la variable de entrada 'a'. Esta descripción consiste en una expresión Java de asignamiento a la variable 'deriv'. La descripción de la derivada de la función permite propagar la derivada de la función de error del sistema utilizada por los algoritmos de aprendizaje supervisado basados en gradiente descendente. El formato es:

		derivative { Java_expressions }                  

El bloque source es utilizado para definir código Java que es directamente incluido en el código de la clase generada para la definición de la función. Este código nos permite definir métodos locales que pueden ser empleados dentro de otros bloques. La estructura es:

		source { Java_code }                    

El siguiente ejemplo muestra la definición de la C-norma de Yager, que depende del parámetro w.

 unary yager {
    parameter w;
    requires { w>0 }
    java { return Math.pow( ( 1 - Math.pow(a,w) ) , 1/w ); }
    ansi_c { return pow( ( 1 - pow(a,w) ) , 1/w ); }
    cplusplus { return pow( ( 1 - pow(a,w) ) , 1/w ); }
    derivative { deriv = - Math.pow( Math.pow(a,-w) -1, (1-w)/w ); }
   } 

Para comentarios, sugerencias, notificación de bugs, etc. contacte con nosotros en:   xfuzzy-team@imse-cnm.csic.es

©IMSE-CNM 2012

Última actualización: 22-12-2012 00:00:00