XFL3: El lenguaje de especificación de Xfuzzy 3

Tipos de variables lingüísticas

Un tipo XFL3 es un objeto que describe un tipo de variable lingüística. Esto significa definir su universo de discurso, dar nombre a las etiquetas lingüísticas que cubren dicho universo y especificar las funciones de pertenencia asociadas a cada etiqueta. El formato de definición de un tipo es el siguiente:

 

type identifier [min, max; card] {
    family_id [] membership_function_family(parameter_list);
    .............
    label membership_function(parameter_list);
    .............
    label family_id [ index ];
    ............. }
  

donde min y max son los límites del universo de discurso y card (cardinalidad) es su número de elementos discretos. Si la cardinalidad no es especificada se asume su valor por defecto (actualmente, 256). Cuando no se definen explícitamente los límites, el universo de discurso es considerado entre 0 a 1.

Las etiquetas lingüísticas pueden definirse de dos maneras: como funciones de pertenencia libres o como miembros de una familia de funciones de pertenencia. En este último caso, la familia de funciones de pertenencia debe haber sido definida previamente. Una función de pertenencia libre utiliza su propio conjunto de parámetros mientras que los miembros de las familias de funciones de pertenencia comparten la lista de parámetros de la familia. Esto resulta muy útil tanto para reducir el número de parámetros como para representar restricciones entre las etiquetas lingüísticas (como el orden o un grado de solapamiento fijo).

El formato del identificador de las funciones de pertenencia libres (membership_function) y de las familias de funciones de pertenencia (membership_function_family) es similar al del identificador de un operador, es decir, "package.function". Por otro lado, las etiquetas lingüísticas definidas como miembros de una familia se identifican por su índice dentro de la familia (comenzando por 0).

XFL3 soporta mecanismos de herencia en las definiciones de tipos (como su precursor XFL). La cabecera de la definición utilizada para expresar herencia es como sigue:

type identifier extends identifier {

Los tipos definidos de esta manera heredan automáticamente el universo de discurso y las etiquetas de sus padres. Las etiquetas definidas en el cuerpo de la definición del tipo son añadidas a las etiquetas de sus padres o sobrescriben a éstas si tienen los mismos nombres.

 type Tinput1 [-90,90] {
    NM xfl.trapezoid(-100,-90,-40,-30);
    NP xfl.trapezoid(-40,-30,-10,0);
    CE xfl.triangle(-10,0,10);
    PP xfl.trapezoid(0,10,30,40);
    PM xfl.trapezoid(30,40,90,100);
   } 
 type Tinput2 extends Tinput1 {
    NG xfl.trapezoid(-100,-90,-70,-60);
    NM xfl.trapezoid(-70,-60,-40,-30);
    PM xfl.trapezoid(30,40,60,70);
    PG xfl.trapezoid(60,70,90,100);
   } 
 type Tinput3 [-90,90] {
    fam[] xfl.triangular(-60,-30,0,30,60);
    NG fam[0];
    NM fam[1];
    NP fam[2];
    CE fam[3];
    PP fam[4];
    PM fam[5];
    PG fam[6];
   } 

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

©IMSE-CNM 2018