10.07.2015 Views

UNIVERSIDAD NACIONAL DE COLOMBIA FACULTAD ... - Profe Saul

UNIVERSIDAD NACIONAL DE COLOMBIA FACULTAD ... - Profe Saul

UNIVERSIDAD NACIONAL DE COLOMBIA FACULTAD ... - Profe Saul

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>UNIVERSIDAD</strong> <strong>NACIONAL</strong> <strong>DE</strong><strong>COLOMBIA</strong><strong>FACULTAD</strong> <strong>DE</strong> INGENIERÍAMAGISTER EN AUTOMATIZACIÓN INDUSTRIALUNFUZZY – SOFTWARE PARA EL ANÁLISIS,DISEÑO, SIMULACIÓN E IMPLEMENTACIÓN <strong>DE</strong>SISTEMAS <strong>DE</strong> LÓGICA DIFUSAIng. Oscar G. Duarte V.Santafé de Bogotá, Agosto de 19971


NADA ES MAYORNada es mayor que tú : sólo la rosatiene tu edad suspensa, ilimitada.Eres la primavera deseadasin ser la primavera ni la rosa.Vago espejo de amor donde la rosainaugura su forma deseada,absorta, inmensa, pura, ilimitada ;imagen sí, pero sin ser la rosa.Bajo tu piel de nube marinera,luz girante, tu sangre silenciosadespliega su escarlata arborecida.Nada es mayor que tú, rosa y no rosa,primavera sin ser la primavera ;arpegio en la garganta de la vida !Arturo Camacho Ramírez


10. INTRODUCCIÓNEste texto corresponde al Informe Escrito de mi trabajo presentado comoTesis para la Maestría de Automatización Industrial adelantada en la Facultadde Ingeniería de la Universidad Nacional de Colombia. En él he intentadocondensar los principales resultados del Proyecto de Investigación que hadado como fruto el software de diseño, simulación e implementación deSistemas de Lógica Difusa, al que he bautizado UNFUZZY.La idea de elaborar un software para lógica difusa apareció en el primersemestre de 1996, dentro del desarrollo del curso Control Difuso, a cargo delIng. Gustavo Pérez Hoyos. Ph.D., quien además es el Director de esta Tesis.La ausencia de herramientas de diseño para Sistemas de Lógica Difusa depropósito general dió una justificación fuerte a la idea.Inicialmente se implementó un programa de computador para DOS, quepermitía diseñar Sistemas de Lógica Difusa de una entrada y una salida, yvisualizar su comportamiento, con una interfaz poco amigable, y empleandoalgoritmos de escasa eficiencia. Ese primer programa rudimentario sirviócomo aliciente para proponer al Comité Asesor de la Maestría el Proyecto deTesis cuyos resultados presento en este texto.El objetivo original del Proyecto era el de diseñar e implementar unaherramienta de software para ambiente Windows, que facilitara el diseño yanálisis de Sistemas de Lógica Difusa de Múltiples Entradas y MúltiplesSalidas, y en esos términos fue aprobado por el Comité.Sin embargo, a medida que avanzaba el trabajo surgieron propuestas defunciones adicionales que podrían incluirse en la herramienta. De estaspropuestas, finalmente fueron implementadas las siguientes :1. Generación de Tablas de Entrada-Salida2. Generación de Código Fuente C y/o C++3. Entrenamiento mediante TablasParticularmente las últimas dos incrementaron el potencial de la herramientaen una forma asombrosa : El código fuente permite la implementación ensoftware de los sistemas diseñados, y el entrenamiento amplía lasposibilidades de aplicación de los éstos.


2UNFUZZY fue concebido como una herramienta de propósito general, y porlo tanto espero que su utilización facilite la labor de aquellos en cuyas áreas detrabajo tiene cabida la Lógica Difusa.La organización del presente texto se hizo en seis capítulos cuyo contenidoabreviado es el siguiente :El Capítulo 1 resume los principales conceptos de la Lógica Difusa. Elpropósito no es el de servir de guía introductoria en el tema, sino el depresentar la terminología empleada en el Proyecto.El Capítulo 2 muestra los resultados de la etapa de análisis del software, esdecir, es una presentación a alto nivel del código fuente desarrollado paraUNFUZZY, mientras que el Capítulo 3 muestra los resultados de la etapa dediseño del software, en la que se especifican los principales detalles de lasclases implementadas.El Capítulo 4 es el Manual del Usuario de UNFUZZY, cuyo contenido se haincluido también en la ayuda en línea del programa, junto con los conceptosdel Capítulo 1.El Capítulo 5 presenta tres ejemplos de aplicación de UNFUZZY, en los quese resalta la utilización del código fuente generado por el programa, y lasopciones de entrenamiento. Los tres ejemplos son tres distintos programas enlos que se empleó intensivamente código C++ generado por UNFUZZY, y endos de ellos se utilizan algoritmos de entrenamiento. Los ejemplos son :Control del Péndulo Invertido, Identificación de Plantas, y Predicción de laSerie de Tiempo del caudal mensual del río Bogotá.Por último, el capítulo 6 es una visión crítica del proyecto, que permiteobtener algunas conclusiones globales del mismo.Oscar G. Duarte


31. CONCEPTOS BÁSICOSEn el contexto de este informe, se ha tomado como acepción de “Sistema deLógica Difusa” la definición presentada por Wang 1 para los Sistemas deLógica Difusa con módulos de Difusión y Concreción, que en adelante sedenominarán Difusor y Concresor respectivamente. A continuación sepresenta una breve descripción de dichos sistemas, que tiene por objetoclarificar la terminología empleada en el texto, más que servir de guíaintroductoria al tema de la Lógica Difusa 2 .1.1. Conjuntos Difusos y Lógica DifusaLos Conjuntos Difusos pueden entenderse como una extensión de losconjuntos “ordinarios” , generalmente denominados Conjuntos Concretos. Unconjunto difuso C está definido por su Función Característica o de Pertenenciau C (x), que se define como una función que toma valores de un Universo deDiscurso U (por ejemplo un intervalo de los números Reales) y entregavalores en el intervalo real [0,1] :U u xC⎯⎯⎯ ( ) →[ 0, 1 ]En la figura 1.1 se muestran las funciones de pertenencia que definen tresconjuntos difusos, para los cuales el Universo de Discurso es el intervalo [-1,1].1Wang, Li-Xin, "Adaptative Fuzzy Systems and Control". Prentice Hall,1994, p. 1-7. Esta definición excluye los sistemas tipo Takagi - Sugenoexplicados en el mismo texto de Wang.2 Aquellos lectores que no estén familiarizados con el tema de la lógica difusay de los Sistemas de lógica Difusa, pueden acudir al mismo texto de Wang, oa Mendel, Jerry, "Fuzzy Logic systems for engineering: a tutorial"Proceedings of the IEEE, v83, # 3, p. 345-377.; se recomienda tambienDriankov, Dimiter y otros, "An Introduction to Fuzzy Control", Springer-Verlag, 1993.


4Figura 1.1 Funciones de PertenenciaSe entiende por Soporte de un conjunto difuso C el subconjunto S delUniverso de Discurso U para el cual la función de pertenencia es distinta decero. En la figura 1.1 el soporte del conjunto BAJO es [-1,0], el de MEDIO es[-0.5,0.5], y el de ALTO es [0,1].Al trabajar con Conjuntos Concretos el tipo de operaciones básicas son laUnión, la Intersección y el Complemento de conjuntos. Con los conjuntosdifusos pueden definirse al menos las siguientes operaciones:1.1.1. T-NormasUna T-Norma es una función denotada por el operador (*) que opera sobre elconjunto [0,1] x [0,1] y produce resultados en el conjunto [0,1], con lassiguientes propiedades:x (*) y = y (*) x(x (*) y) (*) z = x (*) (y (*) z)Si (x


Una S-Norma es una función denotada por el operador (+) que opera sobre elconjunto [0,1] x [0,1] y produce resultados en el conjunto [0,1], con lassiguientes propiedades:x (+) y = y (+) x(x (+) y) (+) z = x (+) (y (+) z)Si (x h>0, el modificador seinterpreta como si al Conjunto Difuso se le hubiese adicionado el calificativo“poco”. ( POCO BAJO, POCO MEDIO, POCO ALTO en los conjuntos de lafigura 1.1).h5


61.1.5. RelaciónDados dos conjuntos Difusos A y B, cada uno de ellos definidos sobre losUniversos de Discurso U y V respectivamente, se define la relación R entre Ay B como un nuevo conjunto difuso R(A,B) definido sobre el Universo deDiscurso UxV. La función de pertenencia de este nuevo conjunto representa elgrado de presencia o ausencia de alguna asociación o interacción entre losconjuntos originales.1.1.6. Composición de Relaciones y ConjuntosDadas dos relaciones R y S con las siguientes características,1. R relaciona los conjuntos A y B definidos en los Universos de Discurso U yV respectivamente.2. S relaciona los conjuntos B y C definidos en los Universos de Discurso V yW respectivamente.estas relaciones R y S pueden componerse entre si para generar una nuevarelación RoS que relacione los conjuntos A y C; esta relación será entonces unnuevo Conjunto Difuso RoS(A,C), definido sobre el Universo de DiscursoUxW, cuya función de pertenencia está dada por:u ( x, z) = max{ u ( x, y)( ∗ ) u ( y, z)}RoSyEn donde (*) es un T-Norma, x,y,z son elementos de los Universos deDiscurso U, V, W respectivamente, y el cálculo del máximo debe hacersesobre todos los posibles valores que y puede tomar en el Universo de DiscursoV.REs posible remplazar la Relación R por un Conjunto Difuso D definido sobreU, en cuyo caso los Universos de discurso U y V serían el mismo; en estascondiciones la composición se efectuaría entre el conjunto D y la relación S yla función de pertenencia estaría dada por:u ( z) = max{ u ( x)( ∗ ) u ( x, z)}RoSxDSS


71.1.7. ImplicaciónLa implicación es un tipo de relación entre dos conjuntos difusos; porejemplo, la implicación entre los conjuntos P y Q definidos sobre U y Vrespectivamente es un conjunto difuso (P Q) definido sobre UxV. Existendos tipos de implicación con propiedades diferentes:1.1.7.1.Implicación IF-THENEste tipo de implicaciones pretenden ser una extensión del operador booleanoIF-THEN, y por lo tanto deben satisfacer:u p¡ q(0,0)=1u p¡ q(0,1)=1u p¡ q(1,0)=0u p¡ q(1,1)=1Una implicación de este tipo también se conoce como una Implicación Lógica.1.1.7.2.Implicación AN<strong>DE</strong>ste tipo de implicaciones pretenden ser una extensión del operador booleanoAND, ya que buscan explorar relaciones de causalidad. Por el hecho de seruna extensión del operador AND, las implicaciones de este tipo son T-Normas. También se conocen como Implicaciones de Ingeniería.1.2. Estructura de un Sistema de Lógica DifusaUn Sistema de Lógica Difusa puede entenderse como un sistema no lineal demúltiples entradas concretas y multiples salidas concretas, cuya estructurainterna se muestra en la figura 1.2. Cada una de las variables concretas deentrada o salida se representa dentro del Sistema de Lógica Difusa por mediode una Variable Lingüística. El conjunto de las Variables Lingüísticas deentrada se conoce como el Universo de Entrada, y el conjunto de las VariablesLingüísticas de salida se conoce como el Universo de Salida


8Figura 1.2 Sistema de Lógica Difusa1.2.1. Variables LingüísticasCada Variable Lingüística está conformada por un conjunto de propiedadesentre las cuales podemos destacar1.2.1.1.Nombre de la VariableEs una etiqueta con la que se distingue la naturaleza de la variable (e.g.Temperatura, Cambio de Error, etc).1.2.1.2.Universo de DiscursoEs el intervalo real dentro del cual la variable concreta puede tomar un valor(e.g. [-10,50], [0.5,2.5]).1.2.1.3.Valores LingüísticosSon los posibles calificativos que puede tomar la variable (e.g. BAJO, MEDIOy ALTO). Cada uno de estos valores tiene asociado un Conjunto Difusodefinido sobre el Universo de Discurso de la variable.En la figura 1.3 se muestran las funciones de pertenencia de los tres ConjuntosDifusos asociados a los Valores Lingüísticos BAJO, MEDIO y ALTO para laVariable Lingüística de nombre TEMPERATURA, cuyo Universo deDiscurso es el intervalo [-10,50].


91.2.2. DifusorFigura 1.3 Valores LingüísticosEl bloque difusor recibe las múltiples entradas concretas que llegan al Sistemade Lógica Difusa, y produce un Conjunto Difuso por cada una de ellas (verfigura 1.4). Cada Conjunto Difuso producido por este bloque está definidosobre el Universo de Discurso de la Variable Lingüística respectiva, estácentrado en el valor concreto de entrada, y tiene una función de pertenenciacuya forma puede ser distinta para cada variable de entrada.1.2.3. Base de ReglasFigura 1.4DifusorLa base de reglas es un conjunto de m reglas, cada una de las cuales es de laforma 3 :IF ( entrada 1 es conjunto i 1 AND entrada 2 es conjunto i 2 AND......ANDentrada p es conjunto i p )THEN (salida 1 es conjunto i 1 AND salida 2 es conjunto i 2 AND......ANDsalida q es conjunto i q )En donde conjunto i j es uno de los Valores Lingüísticos que puede tomar lavariable (de entrada o de salida) j . Opcionalmente, cada uno de los Valores3 Se ha supuesto un sistema con p entradas y q salidas.


Lingüísticos de las variables de entrada puede estar afectado por unmodificador, de tal manera, que una determinada regla puede en realidad serde la formaIF ( entrada 1 es [muy/poco (mod 1 )] conjunto i 1 AND entrada 2 es [muy/poco(mod 2 )] conjunto i 2 AND......AND entrada p es [muy/poco (mod p )] conjunto i p)THEN (salida 1 es conjunto i 1 AND salida 2 es conjunto i 2 AND......ANDsalida q es conjunto i q )En cada regla pueden distinguirse dos partes: el Antecedente y elConsecuente; de tal forma que cada regla puede escribirse en forma abreviadacomoIF (Antecedente ) THEN (Consecuente).Si las m reglas cubren todas las posibles combinaciones de ValoresLingüísticos de los Antecedentes, se dice que la Base de Reglas es Completa.En ningún caso puede permitirse que existan dos reglas con el mismoAntecedente.1.2.4. Motor de InferenciaEl Motor de Inferencia recibe los p conjuntos difusos producidos por elDifusor, y los aplica a cada una de las m reglas de la Base de Reglas, paraproducir m*q Conjuntos Difusos (un conjunto difuso por cada variable desalida en cada una de las reglas) definidos sobre los Universos de Discurso dela Variables Lingüísticas de salida (ver figura 1.5).10Figura 1.5 Máquina de InferenciaLa forma en que se define la función de pertenencia de cada uno de los m*qConjuntos Difusos producidos es la siguiente:


11Supóngase que el Difusor produce p conjuntos difusos Dif 1 , Dif 2 ,... Dif p , , confunciones de pertenenciau Dif1 (x 1 ), u Dif2 (x 2 ), ...u Difp (x p ),Supóngase ademas que la regla número i es de la formaIF ( entrada 1 es ci 1 AND entrada 2 es ci 2 AND....AND entrada p es ci p )THEN (salida 1 es di 1 AND salida 2 es di 2 AND......AND salida q es di q )En donde los conjuntos ci k y di j tienen funciones de pertenenciau ci1 (x 1 ), u ci2 (x 2 ), ...u cip (x p ),u di1 (y 1 ), u di2 (y 2 ), ...u diq (y q ),Supóngase que el conjunto B ij es uno de los m*q conjuntos difusos generadospor el Motor de Inferencia, correspondiente a la regla i y a la variable de salidaj. Dicho conjunto B ij tiene por funcion de pertenencia:u Bij (y j )=composicion( u Dif (x), u Imp (x,y j ))u Bij (y j )=max x ( u Dif (x) (*) u Imp (x,y j ))En donde x corresponde a un vector de las p variables de entrada x 1 , x 2 , ...x p ;(*) corresponde a un operador T-Norma, y u Dif (x), u Imp (x,y j ) se definen acontinuación:u Dif (x) = u Dif1 (x 1 )ANDu Dif2 (x 2 ) AND ... ANDu Difp (x p )u Imp (x,y j ) = (u Antecedente (x)¢ u Consecuente (y j ))u Antecedente (x)= u ci1 (x 1 )ANDu ci2 (x 2 ) AND ... ANDu cip (x p )u Consecuente (y j ) = u dij (x j )En donde el operador AND corresponde a un operador T-Norma, y eloperador £ corresponde a una Implicación.En caso de que la regla i sea de la formaIF ( entrada 1 es [muy/poco(mod 1 )] ci 1 AND entrada 2 es [muy/poco(mod 2 )]ci 2 AND....AND entrada p es [muy/poco(mod p )] ci p )THEN (salida 1 es di 1 AND salida 2 es di 2 AND......AND salida q es di q )


el único cambio que debe hacerse para la determinación de las funciones depertenencia es el siguiente:u Antecedente (x)= (u ci1 (x 1 )) mod1 AND(u ci2 (x 2 )) mod2 AND ... AND(u cip (x p )) modp121.2.5. ConcresorEl bloque de concreción recibe los m*q Conjuntos Difusos generados por elmotor de Inferencia, y produce q valores concretos correspondientes a cadauna de las Variables de Salida del Sistema de Lógica Difusa (ver figura 1.6).Figura 1.6 ConcresorEn general, para producir cada uno de los q valores concretos, el Concresortoma los m Conjuntos Difusos correspondientes a cada Variable de Salida, ymediante algún algoritmo produce un valor concreto.Ciertos algoritmos de concreción efectúan la Unión o la Intersección de los mConjuntos Difusos; cuando esto es así, debe observarse si el operador deImplicación empleado por el Motor de Inferencia es una Implicación IF-THEN o una Implicación AND; en el primero de los casos el algoritmo deberáemplear una Intersección (una T-Norma) y en el segundo caso una Unión (una S-Norma).1.3. Entrenamiento de Sistemas de Lógica Difusa medianteTablasDe acuerdo a lo presentado en el numeral 1.2, el diseño de un Sistema deLógica Difusa plantea como mínimo la selección de los siguientesparámetros :1. Número de Variables Concretas de Entrada y de Salida.


2. Estructura de las Variables Lingüísticas asociadas a cada Variable Concretade Entrada y de Salida.3. Definición de los Conjuntos Difusos asociados a cada Valor Lingüístico decada Variable Lingüística.4. Definición del tipo de Difusor empleado para cada Variable de Entrada.5. Definición del número de reglas presentes en la Base de reglas.6. Valores Lingüísticos de cada una de las variables del Antecedente y delConsecuente para cada regla.7. Tipo de relación de Implicación, operador AND, T-Norma de composicióna utilizar en el Motor de Inferencia.8. Tipo de Concresor empleado para cada Variable de Salida.9. Tipo de Unión o Intersección a utilizar en el Concresor.De lo anterior se desprende que la tarea para el diseñador de un Sistema deLógica Difusa puede ser compleja debido a que debe seleccionar variosparámetros, cada uno de los cuáles ofrece bastantes opciones 4 .El objetivo de los algoritmos de entrenamiento es el de facilitar el diseño deun Sistema de Lógica Difusa, del cuál se conoce al menos parte delcomportamiento que de él se espera obtener. A continuación se presentan dosde los algoritmos de entrenamiento conocidos 5 , que fueron implementados enel presente trabajo.Estos algoritmos parten de tablas que describen cuáles deben ser las salidasconcretas, cuando se especifican las entradas concretas, es decir, de tablascomo la siguiente :13Entrada 1 Entrada 2 ... Entrada p Salida 1 Salida 2 ... Salida qx 11 x 21 ... x p1 y 11 y 21 ... y q1x 12 x 22 ... x p2 y 12 y 22 ... y q2.........x 1w x 2w ... x pw y 1w y 2w ... y qwTabla 1.1.........4 Véase Mendel, Jerry, "Fuzzy Logic systems for engineering: a tutorial"Proceedings of the IEEE, v83, # 3, p. 369.5 Wang presenta otros tres algoritmos diferentes, no explorados en esteproyecto.


14La tabla anterior puede interpretarse como sigue :“Se desea que el Sistema de Lógica Difusa responda con las salidas concretasy 11 , y 21 , ... y q1 , cuando las entradas concretas son x 11 , x 21 , ... x p1 ; que respondacon las salidas concretas y 12 , y 22 , ... y q2 , cuando las entradas concretasson x 12 , x 22 , ... x p2 ; ....... ; que responda con las salidas concretas y 1w , y 2w , ...y qw , cuando las entradas concretas son x 1w , x 2w , ... x pw .”Los w casos que se quieren obtener con el Sistema de Lógica Difusa puedenser insuficientes para determinar completamente el diseño, o por el contrario,pueden ser inconsistentes entre sí.1.3.1. Algoritmo de entrenamiento con los Universos FijosEste algoritmo permite determinar la base de reglas a partir de una tabla comola Tabla 2.1 ; el diseñador debe seleccionar los demás parámetros de Sistemade Lógica Difusa. El procedimiento es el siguiente para cada uno de los wcasos:1. Determinar los grados de pertenencia de x 1k , x 2k , ... x pk , y 1k , y 2k , ... y qk a cadauno de los Valores Lingüísticos de las respectivas Variables Lingüísticas.2. Seleccionar los Valores Lingüísticos Lx 1k , Lx 2k , ... Lx pk , Ly 1k , Ly 2k , ... Ly qk ,para los cuales los grados de pertenencia respectivos son máximos.3. Crear una regla de la forma IF Entrada 1 es Lx 1k AND Entrada 2 es Lx 2kAND ... AND Entrada p es Lx pk THEN Salida 1 es Ly 1k AND Salida 2 esLy 2k AND ... AND Salida q es Ly qk .4. Asignar a la regla anterior un factor de certeza, calculado como el productode los grados de pertenencia a cada Valor Lingüístico.5. Verificar si en la Base de Reglas existe ya una regla con el mismoantecedente (y quizás distinto consecuente); de ser así, dejar en la Baseaquella que tenga un mayor factor de certeza. Si aún no hay en la Base deReglas una regla con el mismo antecedente, adicionar la nueva regla a laBase.1.3.2. Algoritmo de entrenamiento con los UniversosVariables


Este algoritmo permite determinar la definición de las Variables Lingüísticasde los Universos de Entrada y de Salida, así como la base de reglas a partir deuna tabla como la Tabla 2.1 ; el diseñador debe seleccionar los demásparámetros de Sistema de Lógica Difusa. El procedimiento es el siguiente paracada uno de los w casos:1. Crear los Valores Lingüísticos Lx 1k , Lx 2k , ... Lx pk , Ly 1k , Ly 2k , ... Ly qk , uno paracada Variable Lingüística de los Universos de Entrada y Salida. EstosValores Lingüísticos están asociados con Conjuntos Difusos, cada uno de lscuales estará centrado en los valores concretos x 1k , x 2k , ... x pk , y 1k , y 2k , ... y qk .La forma de estos conjuntos puede ser definida por el usuario.2. Crear una regla de la forma IF Entrada 1 es Lx 1k AND Entrada 2 es Lx 2kAND ... AND Entrada p es Lx pk THEN Salida 1 es Ly 1k AND Salida 2 esLy 2k AND ... AND Salida q es Ly qk .Es de resaltar que éste algoritmo incrementa la complejidad del Sistema deLógica Difusa con cada línea de la tabla de entrenamiento 6 , y no evalúa si lainformación es redundante, o lo que es peor, si es contradictoria frente ainformación previa.156 En efecto, si la tabla de entrenamiento consta de doscientos datos, al finalizarel entrenamiento cada Variable Lingüística estará definida por doscientosValores Lingüísticos.


162. UNFUZZY - ANÁLISIS <strong>DE</strong>L SOFTWAREEl propósito fundamental de este capítulo consiste en hacer una presentación aAlto Nivel del código fuente desarrollado para el programa UNFUZZY. Semostrarán por tanto, la estructura general del programa y los módulos que loconforman, con el único fin de explicar cómo interactúan entre sí.2.1. Propósito del programaEl programa UNFUZZY tiene por propósito brindar al usuario un ambiente detrabajo adecuado para el diseño, simulación e implementación de Sistemas deLógica Difusa. Debido a que el diseñador tiene varias opciones de selecciónde parámetros, cada una de las cuales afecta el desempeño global del Sistema,se ha buscado que UNFUZZY sea una herramienta con las siguientescaracterísticas:2.1.1. Diseño de Sistemas de Lógica DifusaDentro de la estructura básica de un Sistema de Lógica Difusa explicada en elnumeral 1.2 son numerosos los parámetros de diseño; UNFUZZY brinda laposibilidad de :1. Definir el número de Variables Concretas de Entrada y de Salida.2. Definir las Variables Lingüísticas asociadas a cada Variable Concreta deEntrada y de Salida.3. Definir el nombre de cada Variable Lingüística .4. Definir el Universo de Discurso de cada Variable Lingüística.5. Definir los Valores Lingüísticos de cada Variable Lingüística.6. Definir los Conjuntos Difusos asociados a cada Valor Lingüístico. La formade cada Conjunto Difuso puede seleccionarse dentro de las opcionespresentadas en la tabla 2.1; los parámetros de cada Conjunto Difuso puedendefinirse gráficamente, especificando su valor o empleando opciones deAutodefinición.7. Definir el tipo de Difusor empleado para cada Variable de Entrada; la formade cada Difusor puede seleccionarse dentro de las opciones presentadas enla tabla 2.1; los parámetros de cada Difusor pueden definirse especificandosu valor.8. Definir el número de reglas presentes en la Base de reglas.


9. Especificar para cada regla cuáles son los Valores Lingüísticos de cada unade las variables del Antecedente y del Consecuente.10.Adicionar, si se desea, un modificador a cada uno de los ValoresLingüísticos de los Antecedentes de cada regla.11.Autodefinir los Antecedentes de una Base de Reglas Completa.12.Autodefinir los Consecuentes de una Base de Reglas con tendenciascrecientes, decrecientes o constantes frente a variaciones de losAntecedentes.13.Seleccionar para el Motor de Inferencia el tipo de relación de Implicación autilizar; la seleccion puede hacerse dentro de las opciones presentadas en latabla 2.2.14.Seleccionar para el Motor de Inferencia el tipo de operador AND a utilizar;la seleccion puede hacerse dentro de las opciones presentadas en la tabla2.2.15.Seleccionar para el Motor de Inferencia el tipo de T-Norma a utilizar en laComposición; la seleccion puede hacerse dentro de las opciones presentadasen la tabla 2.2.16.Seleccionar el tipo de Concresor empleado para cada Variable de Salida; laseleccion puede hacerse dentro de las opciones presentadas en la tabla 2.1.17.Seleccionar para el Concresor el tipo de Unión o Intersección a utilizar; laseleccion puede hacerse dentro de las opciones presentadas en la tabla 2.2.18.Efectuar un diseño basado en los algoritmos de entrenamiento presentadosen el numeral 1.3.17


18Tipos de ConjuntosDifusos DisponiblesTipos deDisponiblesDifusoresTipos de ConcresoresDisponiblesTipo L Tipo Triángulo Primer MáximoTipo Triángulo Tipo Pi Último MáximoTipo Pi Tipo Campana Media de MáximosTipo Gamma Tipo Pi-Campana Centro de GravedadTipo Z Tipo Singenton AlturaTipo CampanaTipo Pi-CampanaTipo STipo SingentonTabla 2.1 7Implicación AND Composición Unión/IntersecciónMínimo Mínimo Mínimo MáximoProducto Producto Producto Suma AcotadaKleene-Dienes Producto Acotado Producto Acotado Suma DrásticaLukasiewcz Producto Drástico Producto Drástico MínimoZadeh Familia Tp Familia Tp ProductoEstocástica Familia Hamacher Familia Hamacher Producto AcotadoGoguen Familia Sugeno Familia Sugeno Producto DrásticoGödel Familia Frank Familia Frank Familia TpAguda Familia Yager Familia Yager Familia HamacherFamilia Dubois-Prade Familia Dubois-Prade Familia SugenoFamilia FrankFamilia YagerFamilia Dubois-PradeTabla 2.2 8Opciones de la Máquina de Inferencia2.1.2. Simulación y Análisis de Sistemas de Lógica DifusaPara poder explotar toda la potencialidad de Diseño descrita en el numeralanterior, se necesita tener la capacidad de analizar eficientemente elcomportamiento de un Sistema de Lógica Difusa, de forma tal que sea posibleidentificar el efecto que tiene el cambio de uno de los parámetros de diseñosobre el comportamiento global del Sistema.UNFUZZY permite al usuario efectuar los siguientes tipos de análisis sobreun Sistema de Lógica Difusa:7 Ver numeral 4.28 Ibid.


1. Calcular los valores concretos de las Variables de Salida, para unos valoresconcretos definidos de las Variables de Entrada.2. Efectuar el cálculo anterior Paso a Paso, de forma tal que el usuario puedavisualizar los Conjuntos Difusos producidos por el Difusor; el listado de lasreglas que se activan con esas salidas del Difusor; los Conjuntos Difusosproducidos por el Motor de Inferencia para cada regla y cada Variable deSalida; la Unión o Intersección de esos Conjuntos; y el valor Concretoproducido por el Concresor para cada Variable de Salida.3. Producir una tabla en la que se consignan los valores concretos de lasVariables de Salida para todas las combinaciones posibles de valoresconcretos de Entrada. La lista puede salvarse como un archivo ASCII.4. Visualizar la relación final Entrada-Salida, comúnmente denominadaFunción de Transferencia (aunque no hace referencia alguna al dominio dela variable compleja). Debido a que es imposible graficar la relación entrevarias entradas y varias salidas, la visualización se hace de la relación deuna Variable de Salida contra una Variable de Entrada, fijando las demásVariables de Entrada en valores seleccionables por el usuario; este tipo depresentación permite efectuar análisis de sensibilidad.2.1.3. Implementación de Sistemas de Lógica DifusaUna vez diseñado y analizado el sistema de lógica Difusa, el usuario tiene lanecesidad de exportarlo para emplearlo en su aplicación particular (Control,Identificación o Modelamiento de Plantas, etc.). UNFUZZY permite estaoperación mediante la generación automática de Código Fuente en lenguaje Có C++ 9 .El usuario entonces no tiene que preocuparse por los detalles deimplementación de software del Sistema de Lógica ni de ninguno de suscomponentes, sino únicamente por el desempeño de dicho sistema.2.2. Análisis del softwareEn su forma más global, la solución propuesta consistió en la elaboración deun programa cuya estructura se muestra en la figura 2.1, donde se observanclaramente 3 módulos:199 El código generado C y C++ ha sido probado empleando para ello elcompilador BorlandC++ versión 4.52


1. Módulo del Problema (Sistema de Lógica Difusa) : Encapsula todos losobjetos que conforman el dominio del problema (Variables Lingüísticas,Motor de Inferencia, Base de Reglas, etc.).2. Módulo de Consulta : Utiliza el Sistema de Lógica Difusa para permitirle alusuario efectuar simulaciones y obtener implementaciones del sistemadiseñado.3. Módulo de Edición : Interactúa con el Sistema de Lógica Difusa paraalterarlo, permitiendo al usuario hacer las modificaciones de Diseño.20Figura 2.1 Estructura del programaEn los numerales siguientes se presenta el análisis de cada uno de losmódulos.2.2.1. Módulo del ProblemaDebido a que un Sistema de Lógica Difusa tiene una estructura globalconocida (mostrada en la figura 1.2), pero con una gran dependencia respectoal número de Variables Lingüísticas de Entrada y de Salida empleadas, asícomo de la forma en que éstas sean definidas, se planteó como modelo generalde este módulo el presentado en la figura 2.2.Figura 2.2 Módulo del problema


Los propósitos de cada uno de los submódulos que se observan en la figura2.2 son los siguientes:1. Universo de Entrada : Encapsula toda la información relativa a lasVariables Lingüísticas de Entrada.2. Universo de Salida : Encapsula toda la información relativa a las VariablesLingüísticas de Salida.3. Máquina de Inferencia : Encapsula los procedimientos necesarios paraefectuar la Inferencia; Este submódulo incluye dentro de sí mismo la Basede Reglas y los algoritmos de Entrenamiento.4. Bloque de Concreción : Encapsula los procedimientos necesarios paraefectuar la concreción de los Conjuntos Difusos producidos por la Máquinade Inferencia. Existe un procedimiento independiente para cada Variable deSalida. Este Submódulo sirve también de interfaz con el Módulo deConsulta.2.2.1.1.Universo de EntradaEl Universo de Entrada puede visualizarse como un conjunto de VariablesLingüísticas de Entrada (ver figura 2.3), cada una de las cuales tiene unaestructura como la que se muestra en la figura 2.4. A diferencia de loplanteado en el numeral 1.2, en este modelamiento se decidió incluir el difusorcomo parte de la Variable Lingüística, para facilitar que cada Variable tuvieseun Difusor diferente.21Figura 2.3 UniversoFigura 2.4 Variable Lingüística


Los Valores Lingüísticos de cada variable son en realidad Conjuntos Difusoscuya estructura se muestra en la figura 2.5. Cada Conjunto Difuso secaracteriza por un Nombre y por su Función de Pertenencia.22Figura 2.5 Valor Lingüístico2.2.1.2.Universo de SalidaEl Universo de Salida presenta la misma estructura del Universo de Entrada(de hecho son dos instanciaciones de la misma clase); para el Universo deSalida la presencia de los Difusores en las Variables Lingüísticas no es deutilidad.2.2.1.3.Máquina de InferenciaLa estructura básica de la Máquina de Inferencia se muestra en la figura 2.6.Los operadores AND, de Implicación, y de Composición son empleados por elprocedimiento de Inferencia (ver numeral 1.2.4). La máquina de Inferenciaposee la capacidad de entrenarse mediante los algoritmos presentados en elnumeral 1.3. La Base de Reglas es un conjunto de reglas, cada una de lascuales tiene una estructura como la que se muestra en la figura 2.7 10 .Figura 2.6 Máquina de Inferencia10 En esa figura se ha supuesto un Sistema de Lógica Difusa con p entradas y qsalidas.


23Figura 2.7 Regla2.2.1.4.Bloque de ConcreciónEl Bloque de Concreción es un conjunto de tantos Concresores comoVariables de Salida tenga el sistema de Lógica Difusa. Cada Concresor a suvez, tiene una estructura básica como la que se muestra en la figura 2.8. Lareferencia a la variable de salida es en realidad un número que le permiteidentificar sobre qué Variable Lingüística de Salida debe aplicar su algoritmode concreción.Figura 2.8 Concresor2.2.2. Módulo de ConsultaEl módulo de Consulta (ver figura 2.9) consta de varios submódulos separadosque interactúan con el Módulo del Problema a través del Bloque deConcreción de éste. Las funciones de cada uno de esos módulos son lassiguientes:1. Calcular: Calcula los valores concretos de las Variables de Salida, para unosvalores concretos definidos de las variables de Entrada.2. Calcular Paso a Paso: Efectúa el cálculo anterior Paso a Paso, de forma talque el usuario puede visualizar distintas etapas del proceso.3. Función de Transferencia: Visualizar la relación final Entrada-Salida.


4. Generar Tabla: Produce una tabla en la que se consignan los valoresconcretos de las Variables de Salida para todas las combinaciones posiblesde valores concretos de Entrada.5. Generar Código: Genera automáticamente Código Fuente en lenguaje C óC++.24Figura 2.9 Módulo de Consulta2.2.3. Módulo de EdiciónEl módulo de Edición (ver figura 2.10) consta de varios submódulos separadosque interactúan con el Módulo del Problema para editarlo. Las funciones decada uno de esos módulos son las siguientes:1. Editor Universo de Entrada : Permite la edición de cada una de lasVariables Lingüísticas de Entrada.2. Editor Universo de Salida : Permite la edición de cada una de las VariablesLingüísticas de Salida, y del Bloque de Concreción.3. Editor Base de Reglas : Permite la edición de cada una de las reglas.4. Editor Máquina de Inferencia : Permite la edición de la Máquina deInferencia.5. Módulo de Entrenamiento : Permite la edición del Sistema de LógicaDifusa mediante los algoritmos de Entrenamiento presentados en el numeral1.3


Figura 2.10 Módulo de Edición25


263. UNFUZZY - DISEÑO <strong>DE</strong>L SOFTWAREA continuación se hace una presentación de las clases diseñadas eimplementadas, resumiendo sus principales atributos y procedimientos,utilizando un nivel de detalle exclusivamente descriptivo, con el propósito depreparar el terreno para aquellos lectores que deseen profundizar en losdetalles de implementación 11 .Las diferentes clases se han agrupado en tres numerales, correspondientes acada uno de los tres módulos mostrados en la figura 2.1.3.1. Clases SemánticasLas Clases Semánticas son aquellas que forman parte del módulo delProblema, y por tanto tienen por fin encapsular la información y losprocedimientos del Sistema de Lógica Difusa. Para cada clase se presenta lainformación relevante en cuadros que incluyen:1. Información General2. Principales Atributos3. Principales Procedimientos4. Clases Derivadas3.1.1. Clase ConjuntoDifuso y derivadasLa clase abstracta ConjuntoDifuso tiene por propósito encapsular la definiciónde cada Valor Lingüístico; fundamentalmente es una Etiqueta, y un ConjuntoDifuso definido por su función de pertenencia y su Soporte.GeneralidadesNombre de la Clase ConjuntoDifusoClases PadresClases Hijas ConjuntoL, ConjuntoTriángulo, ConjuntoPi, ConjuntoGamma,ConjuntoZ, ConjuntoCampana, ConjuntoPiCampana, ConjuntoS,ConjuntoSinglenton, Difusor11 Un estudio a bajo nivel que incluya todos los detalles de implementaciónpuede llevarse a cabo a partir de los archivos mismos del código fuente, yaque éstos están ampliamente documentados.


27Archivo del EncabezadoArchivos con funcionesfuzzyset.hppfuzzyset.cpp, setdial2.cppPrincipales AtributosNombre Tipo DescripciónNombre char Etiqueta del Valor Linguistico (Ej, “BAJO”)Tipo char Identificador de tipo (Ej. "Tipo L" )Minimo float límite inferior del SoporteMaximo float límite superior del SoporteCodigoC char Texto necesario para generar CodigoCCodigoCPP char Texto necesario para generar CodigoC++Principales ProcedimientosNombre Tipo Descripciónnombre() char consultor de Nombrenombre(char *s) void modificador de Nombretipo(char *s) void modificador de Tipominimo() float consultor de Minimominimo(float x) void modificador de Minimomaximo() float consultor de Maximomaximo(float x) void modificador de Maximopertenencia(float x) virtual float calcula la función de pertenencia para x; esta función debeser redefinida por los hijoscodigoC() virtual char crea el texto necesario para generar Código C; ; esta funcióndebe ser redefinida por los hijoscodigoCPP() virtual char crea el texto necesario para generar Código C++; ; estafunción debe ser redefinida por los hijosClases Derivadas (hijos)Nombre Descripción 12ConjuntoLConjunto Difuso con función de pertenencia⎧1,x < a⎪f(x) = ⎨(b − x)/(b − a),a > x > b⎪ 0,x > bConjuntoTriangulo Conjunto Difuso con función de pertenencia⎧0,x < a⎪(x − b)/(a − b),a > x > bf(x) = ⎨⎪(c − x)/(c − b),b > x > c⎪0,x > cConjuntoPiConjunto Difuso con función de pertenencia12 En esta tabla, a,b,c,d son reales definidos dentro del Universo de Discursode la Variable Lingüística que contiene al ConjuntoDifuso, que satisfacena


28ConjuntoGammaConjuntoZConjuntoCampanaConjuntoPiCampanaConjuntoSConjuntoSinglentonDifusor⎧0,x < a⎪(x − b)/(a − b),a > x > b⎪f(x) = ⎨1,b > x > c⎪(d − x)/(d − c),c > x > d⎪⎪0,x > dConjunto Difuso con función de pertenencia⎧0,x < a⎪f(x) = ⎨(x − a)/(b − a),a > x > b⎪ 1,x > bConjunto Difuso con función de pertenencia⎧1,x < a2⎪1 − 2( (x − a)/(b − a) ) , a > x > ( a + b) / 2f(x) = ⎨2⎪2( (x − b)/(b − a) ) ,( a + b) / 2 > x > b⎪ 0,x > bConjunto Difuso con función de pertenencia⎧0,x < a⎪2⎪2( (x − a)/(b − a) ) ,a > x > ( a + b) / 22⎪1 − 2( (x − b)/(b − a) ) ,( a + b) / 2 > x > bf(x) = ⎨2⎪1 − 2( (x − b)/(c − b) ) ,b > x > ( b + c) / 2⎪22( (x − c)/(c − b) ) ,( b + c) / 2 > x > c⎪⎪0,x > cConjunto Difuso con función de pertenencia⎧0,x < a⎪2⎪2( (x − a)/(b − a) ) ,a > x > ( a + b) / 2⎪21− 2( (x − b)/(b − a) ) ,( a + b) / 2 > x > b⎪f(x) = ⎨1,b > x > c⎪2⎪1− 2( (x − c)/(d − c) ) ,c > x > ( c + d) / 2⎪22( (x − d)/(d − c) ) ,( c + d) / 2 > x > d⎪0,x > dConjunto Difuso con función de pertenencia⎧0,x < a2⎪2( (x − a)/(b − a) ) ,a > x > ( a + b) / 2f(x) = ⎨2⎪1 − 2( (x − b)/(b − a) ) ,( a + b) / 2 > x > b⎪ 1,x > bConjunto Difuso con función de pertenencia⎧0,x ≠ x0f(x) = ⎨ 1,x = x0Clase Abstracta (ver numeral siguiente)


293.1.2. Clase Difusor y derivadasLa clase abstracta Difusor tiene por propósito encapsular la definición de losdifusores que pueden emplear cada una de las Variables Lingüísticas deEntrada; es una clase heredada de ConjuntoDifuso con una forma que no sealtera, pero cuyo Centro se puede modificar, alterando con ello los parámetrosque definen la función de pertenencia del ConjuntoDifuso. El Difusor seevalúa en un número finito de puntos, y no en todo el soporte, creándose conello un Intervalo de EvaluaciónNombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesGeneralidadesDifusorConjuntoDifusoDifusorTriangulo, DifusorPi, DifusorCampana, DifusorPiCampana,DifusorSinglentonfuzzific.hppsetdial2.cppPrincipales AtributosNombre Tipo DescripciónCentro float Centro del DifusorNumeroPuntos int Número de puntos en que se evalúa el Difusordx float Intervalo de evaluaciónCodigo_C char Texto necesario para generar Código CCodigo_CPP char Texto necesario para generar Código C++Principales ProcedimientosNombre Tipo DescripciónnumeroPuntos(int n) void modificador de NumeroPuntos; modifica también dxnumeroPuntos() int consultor de NumeroPuntoscentro() float consultor de Centroentrada(float x) void modificador de Centro; también cambia todos losparámetros del padre para cambiar su función depertenencia.intervalo() float consultor de dxancho(float) void permite cambiar el soporte del difusorCodigo_C virtual char Texto necesario para generar Código CCodigo_CPP virtual char Texto necesario para generar Código C++NombreDifusorTrianguloDifusorPiClases Derivadas (hijos)Descripcióndifusor que hereda también de la clase ConjuntoTriangulo, de la que tomasu funcionalidad como Conjunto Difusodifusor que hereda también de la clase ConjuntoPi, de la que toma sufuncionalidad como Conjunto Difuso


30DifusorCampanaDifusorPiCampanaDifusorSinglentondifusor que hereda también de la clase ConjuntoCampana, de la que tomasu funcionalidad como Conjunto Difusodifusor que hereda también de la clase ConjuntoPiCampana, de la que tomasu funcionalidad como Conjunto Difusodifusor que hereda también de la clase ConjuntoSinglenton, de la que tomasu funcionalidad como Conjunto Difuso3.1.3. Clase Norma y derivadasLa clase abstracta Norma tiene por propósito definir las operaciones entreConjuntos Difusos conocidas como T_Normas y S_Normas. De Norma seheredan dos clases abstractas hijas, S_Norma y T_Norma, y de estas a su vezse heredan varias clases concretas, en las que se implementan las operacioneslógicas difusasNombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesNormaGeneralidadesS_Norma, T_Norma, y de éstas se heredan: Máximo, SumaAcotada,SumaDrastica, Minimo, Producto, ProductoAcotado, ProductoDrastico,FamiliaTp, FamiliaHp, FamiliaSp, FamiliaFp, FamiliaYp, FamiliaApfuznorms.hppPrincipales AtributosNombre Tipo DescripciónTipo char Identificador del tipo de Norma (Ej, “Producto”)CodigoCpp char Texto necesario para generar código C++;Principales ProcedimientosNombre Tipo Descripcióntipo() char Consultor de TipoToSNorm() int Decide si la Norma es T_Norma ó S_Normaopera(float, float) float Efectúa la operación matemática que define la normacodigoC() virtual char Genera el texto necesario para generar Código CcodigoCPP() virtual char Genera el texto necesario para generar Código C++NombreT_NormaS_NormaMinimoProductoProductoDrasticoClases Derivadas (hijos)DescripciónClase abstracta de las T_NormasClase abstracta de las S_NormasT_Norma definida por la relaciónf ( x, y) = min( x, y)T_Norma definida por la relaciónf ( x, y) = xyT_Norma definida por la relación


31ProductoAcotadoFamiliaTpFamiliaHpFamiliaSpFamiliaFpFamiliaYpFamiliaApMaximoSumaAcotadaSumaDrastica⎧x,y = 1⎪f ( x, y)= ⎨y,x = 1⎪ 0,x ≠ 1ANDy≠ 1T_Norma definida por la relaciónf ( x, y) = max( 0, x + y − 1 )T_Norma definida por la relaciónp p p p[ ]f ( x, y) = 1− ( 1− x) + ( 1− y) − ( 1− x) *( 1−y)p ∈RT_Norma definida por la relaciónf ( x, y)=p ≥ 0xyp + ( 1− p)( x + y − xy)T_Norma definida por la relaciónf ( x, y) = min( 1, x + y + p − xy)p ≥ −1T_Norma definida por la relaciónxy⎛ ( p − 1)( p − 1)⎞f ( x, y) = logp⎜1+⎟⎝ p − 1 ⎠p > 0T_Norma definida por la relaciónf ( x, y) = 1− min( 1,(( 1− a) + ( 1−b) ) )p ≥ 0T_Norma definida por la relaciónxyf ( x, y)=max( x, y, p)0 ≤ p ≤ 1T_Norma definida por la relaciónf ( x, y) = max( x, y)T_Norma definida por la relaciónf ( x, y) = min( 1 , x + y)T_Norma definida por la relación⎧x,y = 0⎪f ( x, y)= ⎨y,x = 0⎪ 1,x ≠ 1ANDy≠ 1p p 1/p1/p3.1.4. Clase Implicacion y derivadasLa clase abstracta Implicacion tiene por propósito definir las relaciones deimplicación entre Conjuntos Difusos. De Implicacion se heredan dos clasesabstractas hijas ImplicacionT_Norma e ImplicacionIf_Then, y de estas a suvez se heredan varias clases concretas, en las que se implementan las


implicaciones difusas. En ImplicacionT_Norma se incluyen las Implicacionesde Ingeniería, mientras que en ImplicacionIf_Then se incluyen lasImplicaciones Lógicas.32Nombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesImplicacionGeneralidadesImplicacionT_Norma, ImplicacionIf_Then, y de éstas se heredan:ImplicacionProducto, ImplicacionMinimo, ImplicacionKleeneDienes,ImplicacionLukasiewicz, ImplicacionZadeh, ImplicacionEstocastica,ImplicacionGoguen, ImplicacionGodel, ImplicacionAguda.fuzimpli.hppPrincipales AtributosNombre Tipo DescripciónTipo char Identificador del tipo de Implicacion (Ej, “Producto”)CodigoC char Texto necesario para generar código C;CodigoCpp char Texto necesario para generar código C++;Principales ProcedimientosNombre Tipo Descripcióntipo() char Consultor de Tipodefecto() float Decide si la Implicación es T_Norma ó If_Thenimplica(float, float) float Efectúa la operación matemática que define la implicacióncodigoC() virtual char Genera el texto necesario para generar Código CcodigoCPP() virtual char Genera el texto necesario para generar Código C++NombreImplicacionT_NormaImplicacionIf_ThenImplicacionProductoImplicacionMinimoImplicacionKleeneDienesImplicacionLukasiewiczImplicacionZadehImplicacionEstocasticaImplicacionGoguenClases Derivadas (hijos)DescripciónClase abstracta de las Implicaciones de IngenieríaClase abstracta de las Implicaciones LógicasImplicación de Ingeniería definida por la relaciónf ( x, y) = xyImplicación de Ingeniería definida por la relaciónf ( x, y) = min( x, y)Implicación Lógica definida por la relaciónf ( x, y) = max( 1 − x, y)Implicación Lógica definida por la relaciónf ( x, y) = min( 11 , − x + y)Implicación Lógica definida por la relaciónf ( x, y) = max( min( x, y), 1 − x)Implicación Lógica definida por la relaciónf ( x, y) = max( 1 − x, xy)Implicación Lógica definida por la relaciónyf ( x, y) = min( 1 , )x


33ImplicacionGodelImplicacionAgudaImplicación Lógica definida por la relación⎧1,x ≤ yf ( x, y)= ⎨ y,x > yImplicación Lógica definida por la relación⎧1,x ≤ yf ( x, y)= ⎨ 0,x > y3.1.5. Clase VariableLa clase concreta Variable tiene por propósito encapsular la definición decada Variable Lingüística; fundamentalmente es una Etiqueta, un Universo deDiscurso, un listado de Conjuntos Difusos (Valores Lingüísticos), y unDifusor.Nombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesVariableGeneralidadesfuzzyvar.hppfuzzyvar.cpp, archivo.cppPrincipales AtributosNombre Tipo DescripciónConjuntos Lista de Esta Lista contiene los Valores LingüísticosConjuntoDifusoDifusorEntrada Difusor * Apuntador al Difusor de la VariableRangoMinimo float Límite Inferior del Universo de DiscursoRangoMaximo float Límite Superior del Universo de DiscursoNumeroIntervalos int Número de Intervalos de EvaluaciónIntervalo float Intervalo de Evaluación definido por el Universo deDiscurso y NumeroIntervalosNombreVariable char Etiqueta con el nombre de la VariablePrincipales ProcedimientosNombre Tipo DescripcióndifusorEntrada() Difusor * Consultor de DifusorEntradadifusorEntrada(Difusor*) Difusor * Modificador de DifusorEntradanombreVariable() char* consultor de NombreVariablenombreVariable(char) char* modificador de NombreVariableadicionarConjuntos voidPermite adicionar un ConjuntoDifuso a Conjuntos(ConjuntoDifuso* cd)insertarConjuntos(ConjuntoDifuso* cd)voidPermite insertar un ConjuntoDifuso a Conjuntos


34eliminarConjuntos voidPermite eliminar un ConjuntoDifuso de Conjuntos(ConjuntoDifuso* cd)numeroConjuntos() int consultor del número de items en Conjuntosconjunto(int conj) ConjuntoDifuso* retorna un apuntador a un ConjuntoDifuso deConjuntospertenencia(int, float) float ejecuta la función pertenencia de unConjuntoDifuso de ConjuntospertenenciaDifusor(float) float ejecuta la función pertenencia de DifusorrangoMinimo() float Consultor de RangoMinimorangoMinimo(float) void Modificador de RangoMinimorangoMaximo() float Consultor de RangoMaximorangoMaximo(float) void Modificador de RangoMaximoautodefinirConjuntosRectos(int num)voidpermite una definición rápida de un objetoVariable empleando ConjuntoDifusos rectosautodefinirConjuntosCurvos(int num)voidpermite una definición rápida de un objetoVariable empleando ConjuntoDifusos curvos3.1.6. Clase UniversoLa clase concreta Universo tiene por propósito encapsular la definición de lasVariables Lingüísticas que forman los Universos de Entrada y de Salida;fundamentalmente es un listado de Variables, que tiene la funcionalidad deejecutar los procedimientos más importantes de las clases Variable,ConjuntoDifuso y Difusor.Nombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesUniversoGeneralidadesfuzinput.hppfuzinput.cpp, archivo.cppPrincipales AtributosNombre Tipo DescripciónVariables ListaVariables Listado de Variables LingüísticasPrincipales ProcedimientosNombre Tipo DescripciónautodefinirUniversoRecto void definición rápida del Universo empleando(int numVar,int numCon);Conjuntos Difusos rectosautodefinirUniversoCurvo void definición rápida del Universo empleando(int numVar,int numCon);Conjuntos Difusos curvosadicionarVariable voidpermite adicionar una Variable a la lista Variables(Variable *var)insertarVariable (Variable voidpermite insertar una Variable a la lista Variables*var)eliminarVariable (Variable*var)voidpermite eliminar una Variable de la lista Variables


35*var)numeroVariables() int permite averiguar el número de items de Variablesvariable(int numVar); Variable * retorna un apuntador a una Variable de la listaVariableslimpiarListaVariables(); void permite eliminar todos los miembros de la listaVariables3.1.7. Clase ReglaLa clase concreta Regla tiene por propósito encapsular la definición de lasexpresiones IF-THEN que emplea la Máquina de Inferencia;fundamentalmente es una listado de Antecedentes, Consecuentes yModificadores; los Antecedetes y los Consecuentes son números enteros queidentifican Valores Lingüísticos de los Universos de Entrada y Salidarespectivamente; los Modificadores son reales positivos que sirven deexponente a las funciones de pertenencia de los antecedentes. Adicionalmente,cada regla tiene un parámetro certeza que es usado por el algoritmo deentrenamiento de Universos Fijos.Nombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesReglafuzinfe3.hppGeneralidadesPrincipales AtributosNombre Tipo DescripciónNumeroEntradas; int Número de Variables en el Universo de EntradaNumeroSalidas; int Número de Variables en el Universo de EntradaAntecedente; int * Vector de NumeroEntrada elementos, que hace referencia alos Valores Lingüísticos del AntecedenteConsecuente; int * Vector de NumeroSalida elementos, que hace referencia alos Valores Lingüísticos del ConsecuenteModificadores; float * Vector de NumeroEntrada elementos, que hace referencia alos modificadores de los Valores Lingüísticos delAntecedenteCerteza; float parametro útil para entrenamiento de Sistemas de LógicaDifusaPrincipales ProcedimientosNombre Tipo DescripciónconjuntoEntrada(int num) int Consultor de AntecedenteconjuntoEntrada(int Var, voidModificador de Antecedenteint Con)


36conjuntoSalida(int num) int Consultor de ConsecuenteconjuntoSalida(int Var, int voidModificador de ConsecuenteCon)modificador(int num) int Consultor de Modificadormodificador(int Var, int voidModificador de ModificadorCon)certeza(float cer) void Modificador de Certezacerteza() float Consultor de Certeza3.1.8. Clase MaquinaInferenciaLa clase concreta MaquinaInferencia tiene por propósito encapsular laoperación del Motor de Inferencia; fundamentalmente consta de una Base deReglas, definida como un listado de Reglas y de unos procedimientos en losque se efectúan los algoritmos de inferencia; El Bloque de Concreción puedeconsultar a MaquinaInferencia para conocer las funciones de pertenencia delos Conjuntos Difusos definidos en el Universo de Salida, que son el resultadode la Inferencia.Nombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesMaquinaInferenciaGeneralidadesfuzinfe3.hppfuzinfe3.hpp, archivo.cppPrincipales AtributosNombre Tipo DescripciónBaseReglas ListaReglas * Listado con las ReglasEntradas Universo * Apuntador al Universo de EntradaSalidas Universo * Apuntador al Universo de SalidaImplicaciones Implicacion * Operador de ImplicacionComposicion Norma * T_Norma de la ComposicionAnd Norma * Operador ANDNumeroReglas int Numero de Reglas en ListaReglasNumeroEntradas int Numero de Variables en EntradasNumeroSalidas int Numero de Variables en SalidasPrincipales ProcedimientosNombre Tipo Descripciónimplicacion() Implicacion* Consultor de ImplicacionimplicacionvoidModificador de Implicacion(Implicacion *imp)and() Norma* Consultor de Andand(Norma *nor) void Modificador de And


37composicion() Norma* Consultor de Composicioncomposicion(Norma *nor) void Modificador de Composicionregla(int reg) Regla * Devuelve una Regla de ListaReglasentradas() Universo * Consultor de Entradassalidas() Universo * Consultor de SalidasnumeroReglas() int Consultor de NumeroReglasactualizarEntradas(float *ent)pertenenciaDifusores(float*ent)pertenenciaImplicacion(int numSal,int numRegla,float *ent,float sal)pertenenciaConsecuente(intnumSal,int numRegla,float sal)pertenenciaAntecedente(int numRegla,float *ent)pertenenciaComposicion(int numVar,int numRegla, float sal)activarRegla(int Numregla)EntrenaUniversoFijo(float*antecedente, float*consecuente)EntrenaUniversoVariable(float *antecedente, float*consecuente)voidfloatfloatfloatfloatfloatintvoidvoidActualiza los Difusores del Universo de Entradapara unas entradas concretas archivadas en elvector entCalcula el AND de las funciones de pertenencia delos Difusores del Universo de Entrada, para unvector de netrada entCalcula la Implicacion entre Antecedente yConsecuente, para la regla numRegla, y la salidanumSal, para valores del Universo de Entradaarchivados en el vector ent, y valores del Universode Salida archivados en el vector sal,Calcula la pertenencia al Consecuente, para laregla numRegla, y la salida numSal, para valoresdel Universo de Salida archivados en el vector salCalcula la pertenencia al Consecuente, para laregla numRegla, para valores del Universo deEntrada archivados en el vector entCalcula la Composicion entre los Difusores y laImplicacionVerifica si una regla se dispara con los difusoresdel Universo de EntradaEfectúa el algoritmo de entrenamiento presentadoen el numeral 1.3.1, con los datos deentrenamiento archivados en los vectoresantecedente y consecuenteEfectúa el algoritmo de entrenamiento presentadoen el numeral 1.3.2, con los datos deentrenamiento archivados en los vectoresantecedente y consecuente3.1.9. Clase Concresor y derivadasLa clase abstracta Concresor tiene por propósito encapsular la operación deConcreción empleada para cada Variable Lingüistica de Salida.Fundamentalmente consta de un indentificador de la Variable de Salida sobrela que debe operar, y un algoritmo de concreción;los Concresores empleanintensivamente las funciones de la Máquina de Inferencia, pues es ésta la quegenera los Conjuntos Difusos que deben concretarse; la mayoría de algoritmosde concreción efectúan la Unión o la Intersección de los Conjuntos Difusosproducidos por el Motor de Inferencia 13 , esta operación la lleva a cabo una13 El único Concresor que no efectúa Unión ni Intersección es el de Altura.


Norma denominada Conjunción. De esta clase se derivan varias clasesconcretas, cada una con un algoritmo de concreción diferente.38Nombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesConcresorfuzdefuz.hppfuzdefuz.cppGeneralidadesPrincipales AtributosNombre Tipo DescripciónNombre char Etiqueta para distinguir el tipo de Concresor(ej.“Altura”)CodigoC char Texto necesario para generar Código CCodigoCPP char Texto necesario para generar Código C++Motor MaquinaInferencia * Apuntador a la Máquina de InferenciaNumeroVariable int Identificador de la Variable de Salida sobre la queoperaConjuncion Norma * Norma para efectuar Unión o IntersecciónIdentificador int parámetro necesario para leer archivos de discoPrincipales ProcedimientosNombre Tipo DescripciónnumeroVariable() int Consultor de NumeroVariablenumeroVariablevoidModificador de NumeroVariable(int numVar)motor() MaquinaInferencia * Consultor de MotormotorvoidModificador de Motor(MaquinaInferencia *maq)defecto() float calcula la función defecto de la Implicación deMotornombre() char Consultor de Nombreconjuncion() Norma * Consultor de Conjuncionconjuncion(Norma *nor) void Modificador de Conjuncionidentificador() int Consultor de IdentificadorsalidaConcreta(float *ent) virtual float=0 efectúa el algoritmo de Concreción cuando lasentradas Concretas al Sistema de LógicaDifusa están almacenadas en el vector ent; Estafunción encapsula todo el comportamiento delSistema de Lógica DifusacodigoC() virtual char*=0 genera Código CcodigoCPP() virtual char*=0 genera Código C++Clases Derivadas (hijos)


39Nombre Descripción 14PrimerMaximo Concresor definido por la expresiónUltimoMaximoMediaDeMaximosCentroDeGravedadAltura{ µ µ }*y = inf y ∈ U| ( y) = sup ( y)y∈UConcresor definido por la expresión{ µ µ }*y = sup y ∈ U| ( y) = sup ( y)y∈UConcresor definido por la expresión{ µ µ }*y 1 = inf y ∈ U| ( y) = sup ( y){ µ µB }*y 2 = sup y ∈ U| ( y) = sup ( y)y*y∈Uy∈U* *( y 1 + y 2 )=2Concresor definido por la expresióny*=∫U∫UyµBB( y)dyµ ( y)dyConcresor definido por la expresiónyi*=m∑i=1m∑ii=1y µBiBi( y)y = centroAltura( i)iiµ ( y)BBBcentroAltura(i) es un parámetro del Conjunto Difuso de la Variable deSalida, que corresponde al Consecuente de la regla i; dicho parámetrointenta representar el centro del Conjunto Difuso.3.1.10.Clase BloqueConcrecionLa clase concreta BloqueConcrecion tiene por propósito encapsular laoperación de Concreción empleada para todas las Variables Lingüisticas delUniverso de Salida; fundamentalmente es un listado de objetos de la claseConcresor .14 En esta tabla se supone que el Motor de Inferencia produce m ConjuntosDifusos para la Variable de Salida en cuestión, que está definida sobre unUniverso de Discurso U; cada uno de los m conjuntos tiene una función depertenencia u Bi (y), i=1,2,..m . Si el Concresor efectúa la Unión o laIntersección de los m conjuntos, el resultado es un Conjunto Difuso B quetiene función de pertenencia u B (y).


40Nombre de la ClaseClases PadresClases HijasArchivo del EncabezadoArchivos con funcionesBloqueConcrecionGeneralidadesfuzdefuz.hppfuzdefuz.cpp, archivo.cppPrincipales AtributosNombre Tipo DescripciónConcresores ListaConcresores Listado de ConcresoreMotor MaquinaInferencia * Apuntador a la Máquina de InferenciaPrincipales ProcedimientosNombre Tipo DescripciónadicionarConcresor voidpermite adicionar un Concresor a Concresores(Concresor* conc)insertarConcresor voidpermite insertar un Concresor a Concresores(Concresor* conc)eliminarConcresor voidpermite eliminar un Concresor de Concresores(Concresor* conc)numeroConcresores() int permite consultar el número de items enConcresoresconjuncion() Norma * Consultor al atributo Conjuncion del primerConcresor en Concresores ; Todos losConcresores emplean el mismo operador deConjuncionconjuncion(Norma *nor) void Modificador al atributo Conjuncion de todoslos ConcresoreslimpiarListaConcresores() void elimina todos los ConcresoresmotorvoidModificador de Motor(MaquinaInferencia* maq)motor() MaquinaInferencia * Consultor de Motorconcresor(int numSal) Concresor * devuelve un Concresor presente enConcresoressalidaConcreta(int numSal,float *ent)floatdevuelve el dato concreto producido por unConcresor presente en Concresores, cuando laentrada al Sistema de Lógica Difusa son lossalidaConcreta(float *ent,float *sal)autodefinirBloqueConcrecion(MaquinaInferencia*maq,Norma *conjuncion)voidvoidvalores concretos almacenados en el vector entcalcula el dato concreto producido por todoslos Concresores presentes en Concresores,cuando la entrada al Sistema de Lógica Difusason los valores concretos almacenados en elvector ent; las salidas concretas las almacenaen el vector saldefinición rápida de BloqueConcrecion


413.2. Clases de ConsultaLas Clases de Consulta son aquellas que forman parte del módulo deConsulta, y por tanto tienen por fin facilitar la utilización del Sistema deLógica Difusa diseñado. La consulta se efectúa desde Cuadros de Dialogo, detal forma que las Clases de Consulta se han heredado de la clase TDialog,provista por Borland. En el siguiente cuadro se reseña su información másrelevante:GeneralidadesClase Encabezado Funciones DescripciónDialogCalcular dialogos.hpp dialogos.cpp Permite Calcular las salidas concretas delSistema de Lógica Difusa, para un conjuntodado de entradas concretas.DialogPasoAPaso dialogos.hpp transfe.cpp Permite Calcular Paso a Paso las salidasconcretas del Sistema de Lógica Difusa, para unconjunto dado de entradas concretas.DialogTransferencia dialogos.hpp transfe.cpp Permite visualizar las relaciones existentes entrelas entradas concretas y las salidas concretas delSistema de Lógica Difusa.DialogEntrarDatos dialogos.hpp Permite especificar cuáles son las entradasconcretas al Sistema de Lógica Difusa ; se usadesde DialogCalcular, DialogPasoAPaso, yDialogTranseferencia.DialogGenerarCodigo gendial.hpp gendial.cpp Permite generar código fuente C y C++, parauna implementación del sistema de LógicaDifusa.DialogGenerarTabla gendial.hpp gendial.cpp Permite generar una tabla con todas las posiblescombinaciones de entradas concretas al Sistemade Lógica Difusa, con sus respectivas salidasconcretas.DialogNombreClase gendial.hpp gendial.cpp Permite especificar el nombre de la clase cuyocódigo C++ desea generarse ; es empleadadesde DialogGenerarCodigo.3.3. Clases de EdiciónLas Clases de Edición son aquellas que forman parte del módulo de Edición, ypor tanto tienen por fin facilitar la modicación del Sistema de Lógica Difusadiseñado. La Edición se efectúa desde Cuadros de Dialogo, de tal forma quelas Clases de Edición se han heredado de la clase TDialog, provista porBorland. En el siguiente cuadro se reseña su información más relevante:GeneralidadesClase Encabezado Funciones DescripciónDialogDescripcion dialogos.hpp Permite introducir un breve comentariodescriptivo que acompañe al Sistema deLógica Difusa


42DialogAutoEntrada dialogos.hpp Permite efectuar una definición rápida delUniverso de EntradaDialogAutoSalida dialogos.hpp Permite efectuar una definición rápida delUniverso de SalidaDialogVariableEntrada dialogos.hpp dialogos.cpp, Permite efectuar una definición detallada deldialogos3.cpp Universo de EntradaDialogVariableSalida dialogos.hpp dialogos2.cpp Permite efectuar una definición detallada delDialogDefinirVariableEntradaDialogAutodefinirVariableEntradadialogos3.cppdialogos.hpp dialogos.cppdialogos.hpp dialogos.cppUniverso de SalidaPermite modificar los atributos de unaVariable Lingüística ; se emplea desdeDialogVariableEntrada, DialogVariableSalida.Permite efectuar una definición rápida de losValores Lingüísticos de una VariableLingüística ; se emplea desdeDialogVariableEntrada, DialogVariableSalida.DialogInsertarConjunto dialogos.hpp Permite insertar un nuevo Valore Lingüísticoen una Variable Lingüística ; se emplea desdeDialogVariableEntrada, DialogVariableSalida.DialogDefinirDifusor dialogos.hpp dialogos.cpp Permite modificar los atributos del difusor deuna Variable Lingüística ; se emplea desdeDialogVariableEntrada.DialogDefinirConjuntosLDialogDefinirConjuntosTrianguloDialogDefinirConjuntosPiDialogDefinirConjuntosGammaDialogDefinirConjuntosZDialogDefinirConjuntosCampanaDialogDefinirConjuntosPiCampanasetdialo.hpp setdialo.cpp Permite modificar los atributos de unConjunto Difuso Tipo L; se emplea desdeDialogVariableEntrada, DialogVariableSalida.setdialo.hpp setdialo.cpp Permite modificar los atributos de unConjunto Difuso Tipo Triángulo ; se usa desdeDialogVariableEntrada, DialogVariableSalida.setdialo.hpp setdialo.cpp Permite modificar los atributos de unConjunto Difuso Tipo Pi ; se emplea desdeDialogVariableEntrada, DialogVariableSalida.setdialo.hpp setdialo.cpp Permite modificar los atributos de unConjunto Difuso Tipo Gamma ; se usa desdeDialogVariableEntrada, DialogVariableSalida.setdialo.hpp setdialo.cpp Permite modificar los atributos de unConjunto Difuso Tipo Z; se emplea desdeDialogVariableEntrada, DialogVariableSalida.setdialo.hpp setdialo.cpp Permite modificar los atributos de unConjunto Difuso Tipo Campana; se usa desdeDialogVariableEntrada, DialogVariableSalida.setdialo.hpp setdialo.cpp Permite modificar los atributos de unConjuntoDifuso TipoPiCampana; se usa desdeDialogVariableEntrada, DialogVariableSalida.DialogDefinirConjuntosS setdialo.hpp setdialo.cpp Permite modificar los atributos de unConjunto Difuso Tipo S ; se emplea desdeDialogVariableEntrada, DialogVariableSalida.DialogDefinirConjuntosSinglentonsetdialo.hpp setdialo.cpp Permite modificar los atributos de unConjunto Difuso Tipo L se emplea desdeDialogVariableEntrada, DialogVariableSalida.DialogBaseReglas infdial.hpp infdial.cpp Permite definir la Base de ReglasDialogIrARegla infdial.hpp infdial2.cpp Permite buscar e insertar Reglas en la Base deReglas ; se emplea desde DialogBaseReglasDialogOpcion infdial.hpp infdial.cpp Permite modificar las principales opcionesmatemáticas de la Máquina de Inferencia y elBloque de ConcreciónDialoParametro infdial.hpp infdial2.cpp Permite definir el parámetro de algunasfamilias de T-Normas ; se emplea desdeDialogOpcion


43familias de T-Normas ; se emplea desdeDialogOpcionDialogRapida infdial.hpp infdial.cpp Permite efectuar una definición rápida de laBase de ReglasDialogEntrena entrdial.hpp entrdial.cpp Permite efectuar los algoritmos deEntrenamiento presentados en el numeral 1.33.4. Otras ClasesExisten otras Clases cuya definición es utilitaria, sus principales característicasson :GeneralidadesClase Encabezado Funciones DescripciónTDialogInicial fuzzyapp.hpp difumain.cpp Muestra el Cuadro de Dialogo depresentación del programaTFuzzyAppfuzzyapp.hpp difumain.cpp Define la AplicaciónTVentanaDeTrabajoClient ventana.hpp ventmdi.cpp Encapsula los procedimientos de la VentanaCliente en el esquema MDITVentanaDeTrabajoChild ventana.hpp ventmdi.cpp Encapsula los procedimientos de la VentanaHija en el esquema MDI


444. UNFUZZY - MANUAL <strong>DE</strong>L USUARIOEn este capítulo se presenta el Manual del Usuario de UNFUZZY; lainformación en él contenida se ha incluido también en las opciones de Ayudasensitiva en línea del programa. Para la correcta interpretación de las opcionesque brinda UNFUZZY, se recomienda el lector revisar el Capítulo 1, en el quese ha precisado la terminología empleada.Se ha organizado este Manual de la siguiente forma: Un primer numeral deGeneralidades, en el que se muestran los pasos necesarios para instalarUNFUZZY y leer un primer ejemplo desde disco; en el segundo numeral semuestran las distintas opciones de diseño disponibles; el tercero resume lospasos necesarios para el Diseño de un Sistema de Lógica Difusa; el cuartomuestra las posibilidades de análisis e implementación que brindaUNFUZZY; el quinto enseña cómo entenar un Sistema de Lógica Difusa; yfinalmente se ha reservado el sexto numeral para presentar algunasconsideraciones sobre la implementación de Sistemas de Lógica Difusaempleando el código fuente C y/o C++ generado por UNFUZZY.4.1. GeneralidadesEl propósito de UNFUZZY es brindar al usuario un ambiente de trabajoadecuado para el diseño, simulación e implementación de Sistemas de LógicaDifusa como los definidos en el Capítulo 1.4.1.1. RequerimientosLos requirimientos de Hardware de UNFUZZY son los mismos que se tienenpara Windows95 ó WindowsNT, que son las plataformas sobre las cualesfunciona el programa; adicionalmente, se necesitan 2Mb de espacio disponibleen disco duro para su instalación básica, 10Mb adicionales si se deseaninstalar los ejemplos de aplicación, 18Mb adicionales si se desean instalar losarchivos del informe escrito, y 12 Mb adicionales para instalar los archivos delcódigo fuente con los recursos.


454.1.2. InstalaciónLos discos que acompañan a este texto incluyen la versión comprimida (.ZIP)de UNFUZZY; los pasos a seguir para instalar el programa son los siguientes:1. Cree un nuevo directorio en el disco duro (p.ej. UNFUZZY)2. Copie desde el disco 1 el archivo PKUNZIP.EXE en ese directorio.3. Inserte el disco 1 en el drive y ejecute el comando>PKUNZIP -d a:UNFUZZY.ZIPEl comando anterior debe descomprimir UNFUZZY.ZIP en los siguientesarchivosUNFUZZY.EXE : versión ejecutable del programaBWCC32.DLL : librería de BorlandC para el manejo de la interfazgráfica en 32 bitsEJEMPLO.DIF : un primer ejemplo para probar UNFUZZYFUZZY.HPP : archivo con el encabezado de las clases necesarias parautilizar el código C++ generado por UNFUZZY.FUZZY.CPP : archivo con las funciones de las clases necesarias parautilizar el código C++ generado por UNFUZZY.EJEMPLO.DIF : un primer ejemplo para probar UNFUZZY. Estearchivo se copia en el subdirectorio EJEMPLOS4. Si desea instalar los tres ejemplos de aplicación, inserte el disco 2 en eldrive y ejecute el comando >PKUNZIP -d a:UNFUZAPL.ZIP. Cuando sele solicite que insertar un nuevo disco, inserte el disco 3.5. Si desea instalar los archivos del Informe escrito que acompañan alprograma, en formato WORD 6.0, inserte el disco 4 en el drive y ejecute elcomando >PKUNZIP -d a:UNFUZDOC.ZIP6. Si desea instalar los archivos con el código fuente, inserte el disco 5 en eldrive y ejecute el comando >PKUNZIP -d a:UNFUZSRC.ZIP7. Desde Windows95 ó Windows NT ejecute el programa UNFUZZY,identificado por el ícono que se muestra en la figura 4.1Figura 4.1 Ícono de UNFUZZY


464.1.3. Un primer ejemploEn las siguientes líneas se explica cómo leer desde disco un archivo deejemplo suministrado con UNFUZZY, para tener un contacto inicial con lasopciones de diseño y análisis que brinda el programa.Una vez instalado y ejecutado UNFUZZY, aparece en la pantalla una ventanacomo la que se muestra en la figura 4.2; En la barra de herramientas sóloaparece habilitada la primer opción, que permite Leer archivos en disco;emplee esta opción para leer el archivo EJEMPLO.DIF, que ha quedadograbado en el directorio en que aparece UNFUZZY\EJEMPLOS; estaoperación tambien la puede efectuar con el comando Leer disponible en laopción Archivo del Menú principal.Figura 4.2 Ventana de UNFUZZYDespues de Leer Ejemplo.dif, aparece en la pantalla una ventana como lamostrada en la figura 4.3. Este archivo corresponde a un Sistema de LógicaDifusa cuyas principales características son:1. Número de Variables de Entrada: 32. Número de Variables de Salida: 23. Número de Reglas en la Base de Reglas : 1254. Nombre de las Variables de Entrada :Entrada 1Entrada 2Entrada 35. Nombre de las Variables de Salida :Salida 1Salida 26. Número de Valores Lingüísticos definidos para cada Variable de Entrada:Entrada 1 : 5Entrada 2 : 5


47Entrada 3 : 57. Número de Valores Lingüísticos definidos para cada Variable de Salida:Salida 1 : 5Salida 2 : 58. Tipo de difusores empleados para cada Variable de Entrada:Entrada 1 : SinglentonEntrada 2 : SinglentonEntrada 3 : Singlenton9. Tipo de Concresores empleados para cada Variable de SalidaSalida 1 : AlturaSalida 2 : Altura10. Principales operadores matemáticos empleados:AND : míminoComposición : max-mínimoImplicación : mínimoUnión : máximoFigura 4.3 Ventana de Trabajo - Archivo EJEMPLO.DIF


48Figura 4.4 Barra de Herramientas de UNFUZZY4.1.3.1.Primeros cálculosEl ejemplo leido de disco es un Sistema de Lógica Difusa previamentediseñado; quizás lo primero que el usuario desee hacer sea calcular cuáles sonlos valores de las salidas para unas ciertas entradas; para ello, el usuario debeefectuar una cualquiera de las siguientes dos operaciones:1. Ejecutar el Comando Calcular del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Calcular, que se muestra en la figura 4.5. Para calcular las salidasconcretas del Sistema de Lógica Difusa el usuario debe seguir los siguientespasos:1. Informar al programa cuáles son los valores concretos de entrada: para ellodebe efectuar un doble 'click' sobre cada variable de Entrada de la ListaEntradas, con lo que despliega un cuadro de diálogo en el que puede editarel valor de entrada.1. Hacer 'click' sobre el boton CalcularComo respuestas a estas acciones, UNFUZZY calculará las salidas y lasescribirá en la lista Salidas.


49Figura 4.5 Cuadro de Diálogo Calcular4.1.3.2.Cálculo Paso a PasoSi bien este primer cálculo resume todas las operaciones del Sistema deLógica Difusa, en ocasiones es deseable tener un conocimiento sobre los pasosintermedios que llevaron a obtener tal resultado; para ello, el usuario debeefectuar una cualquiera de las siguientes dos operaciones:1. Ejecutar el Comando Calcular Paso a Paso del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestraen la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Calcular Paso a Paso, que se muestra en la figura 4.6. Para calcularpaso a paso las salidas concretas del Sistema de Lógica Difusa el usuario debeseguir los siguientes pasos:1. Informar al programa cuáles son los valores concretos de entrada: para ellodebe efectuar un doble 'click' sobre cada variable de Entrada de la ListaEntradas, con lo que despliega un cuadro de diálogo en el que puede editarel valor de entrada.1. Hacer 'click' sobre el botón Siguiente Paso; como respuesta a esta acciónUNFUZZY muestra los Conjuntos Difusos asociados a los ValoresLingüísticos de las Variables de Entrada, y señala el Difusor correpondientea la entrada definida en el paso anterior. El usuario puede seleccionar laVariable de Entrada que desea visualizar, mediante la lista Difusor.Adicionalmente, UNFUZZY indica que se ha efectuado el primero de cincopasos ("Paso 1/5").


1. Hacer 'click' sobre el botón Siguiente Paso; como respuesta a esta acciónUNFUZZY muestra las reglas que se activan con los difusores a que serefiere el paso 2. Adicionalmente, UNFUZZY indica que se ha efectuado elsegundo de cinco pasos ("Paso 2/5").1. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acciónUNFUZZY muestra las funciones de pertenencia de los Conjuntos Difusosproducidos como resultado de la inferencia sobre las reglas activadas; Elusuario puede seleccionar la Regla que desea visualizar, mediante la listaReglas Activas. Adicionalmente, UNFUZZY indica que se ha efectuado eltercero de cinco pasos ("Paso 3/5").1. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acciónUNFUZZY muestra la funcion de pertenencia del Conjunto Difusoproducido como resultado de la Unión o Intersección de las reglas activadasa que se refiere el paso anterior. Adicionalmente, UNFUZZY indica que seha efectuado el cuarto de cinco pasos ("Paso 4/5").1. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acciónUNFUZZY calcula los valores concretos de las Variables de Salidacorrepondientes a los valores Concretos de Entradas especificados en elpaso 1, y lo muestra en la figura a que hace referencia el paso anterior.Adicionalmente, UNFUZZY indica que se ha efectuado el quinto de cincopasos ("Paso 5/5").Los pasos 2 a 6 pueden efectuarse en un sólo paso, empleando el botón Todoslos Pasos; El botón Paso Inicial devuelve el cuadro de diálogo a su estadoinicial.50


51Figura 4.6 Cuadro de Diálogo Calcular Paso A Paso4.1.3.3.Modificaciones al Universo de EntradaEn este punto es posible que el usuario esté interesado en averiguar cómo sediseñaron las Variables Lingüísticas de los Universos de Entrada y Salida, yquizás probar sus propios diseños; a continuación se muestra cómo modificarel Universo de Entrada (para modificar el Universo de Salida los pasos sonmuy similares): el usuario deberá efectuar una cualquiera de las siguientes tresoperaciones:1. Ejecutar el Comando Definir Variable del Menú Entradas1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.41. hacer doble 'click' en el figura que representa el Universo de Entrada en laventana de Trabajo (ver figura 4.3)Con cualquiera de las tres opciones anteriores se despliega el cuadro deDiálogo Definir Variable de Entrada, que se muestra en la figura 4.7. Lasfiguras que allí se muestran corresponden a las funciones de pertenencia de losvalores lingüísticos de la variable de entrada seleccionada en la lista Variable,


y su difusor; el usuario puede entonces modificar el diseño del Universo deEntrada de la siguiente forma:1. Generalidades de las Variables Lingüísticas: Mediante el botón DefinirVariable se pueden modificar tanto el nombre de cada variable, como suUniverso de Discurso.1. Número de Variables de Entrada: Mediante los botones Adicionar Variabley Eliminar Variable se agregan o retiran Variables Lingüísticas.1. Tipo de difusor: Mediante la lista difusor se selecciona el difusor de cadaVariable Lingüística.1. Función de pertenencia del difusor: Mediante el botón Definir Difusor seajusta la función de pertenencia del difusor.1. Función de pertenencia de un valor Lingüístico: El usuario debe primeroseleccionar el Valor Lingüístico deseado mediante la lista Conjunto(UNFUZZY dibuja con color verde el Conjunto seleccionado); después delo cuál el usuario puede:- Editar gráficamente: presionar el botón izquierdo del ratón cuando elcursor está ubicado sobre uno de los puntos de control (marcados por unpequeño cuadrado verde) y arrastrar (con el botón presionado) el puntohasta el lugar deseado.- Editar los parámetros : Mediante el botón Definir Conjunto.- Modificar el Tipo de Conjunto: Mediante la lista Tipo de Conjunto.Para ver otras opciones de edición del Universo de Entrada, el lector puederemitirse al numeral 4.3.1.52


53Figura 4.7 Cuadro de Diálogo Definir Variable de Entrada4.1.3.4.Modificaciones a la Base de ReglasSi el usuario está interesado en conocer la Base de Reglas, y en modificarla,entonces deberá efectuar una cualquiera de las siguientes tres operaciones:1. Ejecutar el Comando Reglas del Menú Inferencia1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.41. hacer doble 'click' en el figura que representa la Base de Reglas en laventana de Trabajo (ver figura 4.3)Con cualquiera de las tres opciones anteriores se despliega el cuadro deDiálogo Definir Base de Reglas, que se muestra en la figura 4.8. Cada regla secompone de un Antecedente y un Consecuente; las modificaciones quepueden efectuarse son las siguientes:


Modificaciones en el Antecedente: Pueden introducirse ModificadoresLingüísticos en cada uno de los términos del Antecedente; para ello debeseleccionarse el término deseado en la lista que muestra la Regla, y luegomodificar la caja de edición Modificador Lingüístico con la barra dedesplazamiento ubicada a la derecha de la caja.Modificaciones en el consecuente: Pueden cambiarse los términos delconsecuente; para ello debe seleccionarse el término deseado en la lista quemuestra la Regla, con lo cual la lista Consecuente muestra los posibles valoreslingüísticos que puede tomar el término deseado; el usuario debe escoger elnuevo valor lingüístico.Si el usuario desea cambiar los términos del Antecedente, debe emplear laopción Ir A... (ver numeral 4.3.3.2.5); de esta forma se asegura que no seescriban dos reglas con el mismo Antecedente y distinto Consecuente.Para consultar o modificar otra Regla, el usuario debe emplear las opcionesSiguiente, Anterior, o Ir A.... Para ver otras opciones de edición de la Base deReglas, el lector puede remitirse al numeral 4.3.3.54Figura 4.8 Cuadro de Diálogo Definir Base de Reglas


554.1.3.5.Modificaciones a la Máquina de InferenciaSi el usuario esté interesado en modificar alguna de las opciones matemáticasde la Máquina de Inferencia, entonces deberá efectuar una cualquiera de lassiguientes tres operaciones:1. Ejecutar el Comando Opciones Matemáticas del Menú Inferencia1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.41. hacer doble 'click' en el figura que representa la Máquina de Inferencia en laventana de Trabajo (ver figura 4.3)Con cualquiera de las tres opciones anteriores se despliega el cuadro deDiálogo Opciones Matemáticas para los procesos de Inferencia y Concreción,que se muestra en la figura 4.9. Las cuatro listas que allí aparecen permiten alusuario seleccionar distintos operadores para las funciones AND, laComposición, la Implicación, y para la Unión o Intersección que efectúanalgunos Concresores.Figura 4.9 Cuadro de DiálogoOpciones Matemáticas para los procesos de Inferencia y Concreción


564.1.3.6.Generación de TablasLa opción de Generación de Tablas permite al usuario crear un archivo detexto en el que se tabulan las salidas concretas para todas las posiblescombinaciones de los valores concretos de entrada; para ello el usuario deberáefectuar una cualquiera de las siguientes dos operaciones:1. Ejecutar el Comando Generar Tabla del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Generar Tabla, que se muestra en la figura 4.10. Al empler el botónGenerar el programa calculará las salidas concretas para todas las posiblesentradas, y creará una tabla que se puede grabar en disco mediante el botónSalvar.Figura 4.10 Cuadro de Diálogo Generar Tabla


574.1.3.7.Generación de Código FuenteLa opción de Generación de Código Fuente permite al usuario crear unarchivo de texto con el código fuente C ó C++ necesario para implementar elSistema de Lógica Difusa diseñado; para ello el usuario deberá efectuar unacualquiera de las siguientes dos operaciones:1. Ejecutar el Comando Generar Código del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Generar Código, que se muestra en la figura 4.11. Al emplear elbotón Generar el programa generará el código fuente C ó C++ (según laselección del usuario), que se puede grabar en disco mediante el botón Salvar.Para ver detalles sobre el código fuente generado, el lector puede remitirse alos numerales 4.4.5. y 4.6.Figura 4.11 Cuadro de Diálogo Generar Código


584.2. Opciones de DiseñoUNFUZZY permite que el usuario seleccione distintos parámetros del Sistemade Lógica Difusa; las Tablas 4.1 a 4.6 resumen estas opciones, clasificándolasen Tipo de Conjuntos Difusos, Tipo de Difusores, Tipo de Concresores,Opciones Matemáticas, Normas e Implicaciones.Implicación AND Composición Unión/IntersecciónMínimo Mínimo Mínimo MáximoProducto Producto Producto Suma AcotadaKleene-Dienes Producto Acotado Producto Acotado Suma DrásticaLukasiewcz Producto Drástico Producto Drástico MínimoZadeh Familia Tp Familia Tp ProductoEstocástica Familia Hamacher Familia Hamacher Producto AcotadoGoguen Familia Sugeno Familia Sugeno Producto DrásticoGödel Familia Frank Familia Frank Familia TpAguda Familia Yager Familia Yager Familia HamacherFamilia Dubois-Prade Familia Dubois-Prade Familia SugenoFamilia FrankFamilia YagerFamilia Dubois-PradeTabla 4.1Opciones de la Máquina de InferenciaTipo Descripción 15Tipo LConjunto Difuso con función de pertenencia⎧1,x < a⎪f(x) = ⎨(b − x)/(b − a),a > x > b⎪ 0,x > bTrianguloConjunto Difuso con función de pertenencia⎧0,x < a⎪(x − b)/(a − b),a > x > bf(x) = ⎨⎪(c − x)/(c − b),b > x > c⎪0,x > cPiConjunto Difuso con función de pertenencia15 En esta tabla, a,b,c,d son reales definidos dentro del Universo de Discursode la Variable Lingüística que contiene al ConjuntoDifuso, que satisfacena


59Tipo GammaTipo ZCampanaPiCampanaTipo SSinglenton⎧0,x < a⎪(x − b)/(a − b),a > x > b⎪f(x) = ⎨1,b > x > c⎪(d − x)/(d − c),c > x > d⎪⎪0,x > dConjunto Difuso con función de pertenencia⎧0,x < a⎪f(x) = ⎨(x − a)/(b − a),a > x > b⎪ 1,x > bConjunto Difuso con función de pertenencia⎧1,x < a2⎪1 − 2( (x − a)/(b − a) ) , a > x > ( a + b) / 2f(x) = ⎨2⎪2( (x − b)/(b − a) ) ,( a + b) / 2 > x > b⎪ 0,x > bConjunto Difuso con función de pertenencia⎧0,x < a⎪2⎪2( (x − a)/(b − a) ) ,a > x > ( a + b) / 22⎪1 − 2( (x − b)/(b − a) ) ,( a + b) / 2 > x > bf(x) = ⎨2⎪1 − 2( (x − b)/(c − b) ) ,b > x > ( b + c) / 2⎪22( (x − c)/(c − b) ) ,( b + c) / 2 > x > c⎪⎪0,x > cConjunto Difuso con función de pertenencia⎧0,x < a⎪2⎪2( (x − a)/(b − a) ) ,a > x > ( a + b) / 2⎪21− 2( (x − b)/(b − a) ) ,( a + b) / 2 > x > b⎪f(x) = ⎨1,b > x > c⎪2⎪1− 2( (x − c)/(d − c) ) ,c > x > ( c + d) / 2⎪22( (x − d)/(d − c) ) ,( c + d) / 2 > x > d⎪0,x > dConjunto Difuso con función de pertenencia⎧0,x < a2⎪2( (x − a)/(b − a) ) ,a > x > ( a + b) / 2f(x) = ⎨2⎪1 − 2( (x − b)/(b − a) ) ,( a + b) / 2 > x > b⎪ 1,x > bConjunto Difuso con función de pertenencia⎧0,x ≠ x0f(x) = ⎨ 1,x = x0


60Tabla 4.2Tipos de Conjuntos Difusos DisponiblesTipoTrianguloPiCampanaPiCampanaSinglentonTipoMínimoProductoProducto DrasticoProducto AcotadoFamilia TpFamilia HamacherFamilia SugenoFamilia FrankFamiliaYagerFamilia Dubois-PradeDescripcióndifusor que genera Conjuntos Difusos tipo Triangulodifusor que genera Conjuntos Difusos tipo Pidifusor que genera Conjuntos Difusos tipo Campanadifusor que genera Conjuntos Difusos tipo PiCampanadifusor que genera Conjuntos Difusos tipo SinglentonTabla 4.3Tipos de Difusores DisponiblesDescripciónT_Norma definida por la relaciónf ( x, y) = min( x, y)T_Norma definida por la relaciónf ( x, y) = xyT_Norma definida por la relación⎧x,y = 1⎪f ( x, y)= ⎨y,x = 1⎪ 0,x ≠ 1ANDy≠ 1T_Norma definida por la relaciónf ( x, y) = max( 0, x + y − 1 )T_Norma definida por la relaciónp p p p[ ]f ( x, y) = 1− ( 1− x) + ( 1− y) − ( 1− x) *( 1−y)p ∈RT_Norma definida por la relaciónf ( x, y)=p ≥ 0xyp + ( 1− p)( x + y − xy)T_Norma definida por la relaciónf ( x, y) = min( 1, x + y + p − xy)p ≥ −1T_Norma definida por la relaciónxy⎛ ( p − 1)( p − 1)⎞f ( x, y) = logp⎜1+⎟⎝ p − 1 ⎠p > 0T_Norma definida por la relaciónf ( x, y) = 1− min( 1,(( 1− a) + ( 1−b) ) )p ≥ 0T_Norma definida por la relaciónp p 1/p1/p


61MáximoSuma AcotadaSuma DrásticaTipoProductoMínimoKleene DienesLukasiewiczZadehEstocásticaGoguenGodelAgudaxyf ( x, y)=max( x, y, p)0 ≤ p ≤ 1T_Norma definida por la relaciónf ( x, y) = max( x, y)T_Norma definida por la relaciónf ( x, y) = min( 1 , x + y)T_Norma definida por la relación⎧x,y = 0⎪f ( x, y)= ⎨y,x = 0⎪ 1,x ≠ 1ANDy≠ 1Tabla 4.4Tipos de Normas DisponiblesDescripciónImplicación de Ingeniería definida por la relaciónf ( x, y) = xyImplicación de Ingeniería definida por la relaciónf ( x, y) = min( x, y)Implicación Lógica definida por la relaciónf ( x, y) = max( 1 − x, y)Implicación Lógica definida por la relaciónf ( x, y) = min( 11 , − x + y)Implicación Lógica definida por la relaciónf ( x, y) = max( min( x, y), 1 − x)Implicación Lógica definida por la relaciónf ( x, y) = max( 1 − x, xy)Implicación Lógica definida por la relaciónyf ( x, y) = min( 1 , )xImplicación Lógica definida por la relación⎧1,x ≤ yf ( x, y)= ⎨ y,x > yImplicación Lógica definida por la relación⎧1,x ≤ yf ( x, y)= ⎨ 0,x > yTabla 4.5Tipos de Implicaciones DisponiblesTipo Descripción 1616 En esta tabla se supone que el Motor de Inferencia produce m ConjuntosDifusos para la Variable de Salida en cuestión, que está definida sobre unUniverso de Discurso U; cada uno de los m conjuntos tiene una función de


62Primer MáximoÚltimo MáximoMedia De MáximosCentro De GravedadAlturaConcresor definido por la expresión{ µ µ }*y = inf y ∈ U| ( y) = sup ( y)y∈UConcresor definido por la expresión{ µ µ }*y = sup y ∈ U| ( y) = sup ( y)y∈UConcresor definido por la expresión{ µ µ }*y 1 = inf y ∈ U| ( y) = sup ( y){ µ µ }*y 2 = sup y ∈ U| ( y) = sup ( y)y*y∈Uy∈U* *( y 1 + y 2 )=2Concresor definido por la expresióny*=∫U∫Uyµ( y)dyBµ ( y)dyBConcresor definido por la expresiónyi*=m∑i=1m∑ii=1y µBiBi( y)y = centroAltura( i)iiµ ( y)BBBBcentroAltura(i) es un parámetro del Conjunto Difuso de la Variable deSalida, que corresponde al Consecuente de la regla i; dicho parámetrointenta representar el centro del Conjunto Difuso.Tabla 4.6Tipos de Concresores Disponibles4.3. Diseño de un Sistema de Lógica DifusaPara iniciar el diseño de un Sistema de Lógica Difusa, el usuario deberáseleccionar la opción Nuevo del Menú Archivo, con lo cual aparecerá unaventana como la mostrada en la figura 4.12; Esta ventana difiere de la que semuestra en la figura 4.3, porque las figuras que representan a los Universos depertenencia u Bi (y), i=1,2,..m . Si el Concresor efectúa la Unión o laIntersección de los m conjuntos, el resultado es un Conjunto Difuso B quetiene función de pertenencia u B (y).


Entrada y Salida, así como la de la Base de Reglas muestran que éstos no hansido diseñados aún.63Figura 4.12 Ventana de UNFUZZY para un Nuevo Sistema de Lógica DifusaEl usuario debe entonces efectuar un proceso de cinco Pasos:1. Diseñar el Universo de Entrada1. Diseñar el Universo de Salida1. Diseñar la Base de Reglas1. Diseñar la Máquina de Inferencia1. Asignar un comentario descriptivoEl orden en el que se deben efectuar estos pasos sólo está regido por lassiguientes reglas:1. "El diseño de la base de reglas debe ser posterior al diseño de losUniversos de Entrada y de Salida".1. "Algunos cambios en los Universos de Entrada o de Salida (como elnúmero de Valores Lingüísticos de alguna variable) implican unaredefinición de la Base de Reglas".A continuación se presentan los cinco pasos arriba mencionados.4.3.1. Paso 1 : Diseño del Universo de Entrada


El diseño del Universo de Entrada consiste en la definición de las VariablesLingüísticas que lo forman, y de los difusores que acompañan a éstas.UNFUZZY permite emplear tres caminos distintos para efectuar estadefinición:644.3.1.1.Autodefinición de Universo Recto:Con esta opción el usuario define cuántas Variables Lingüísticas desea en suUniverso de Entrada, y cuántos Valores lingüísticos desea para cada una deellas (todas las Variables tendrán igual número de Valores). Para ello elusuario debe ejecutar el Comando Autodefinir Universo Recto del MenúEntradas, con lo cual se despliega el cuadro de Diálogo Autodefinición deUniversos, que se muestra en la figura 4.13. UNFUZZY define entonces cadaVariable Lingüística con las siguientes especificaciones:Nombre: Variable i (i es el número de la variable)Universo de Discurso : [-1,1]Intervalos de Evaluación : (n+1)*5 (n es el número de Valores Lingüísticos)Tipo de Difusor : SinglentonValores Lingüísticos:Nombre : Conjunto j (j es el número del Conjunto)Tipo : Triángulo para todos, salvo para el primero y el último, que sontipo L y Gamma respectivamente.Soporte : [-1+(j-1)(1-(-1))/(n+1) , -1+(j+1)(1-(-1))/(n+1)] (j es elnúmero del Conjunto, y n es el número de Valores Lingüísticos))Figura 4.13 Cuadro de Diálogo Autodefinición de Universos


654.3.1.2.Autodefinición de Universo Curvo:Esta opción es similar a la anterior, salvo por la forma de los ConjuntosDifusos. Con esta opción el usuario define cuántas Variables Lingüísticasdesea en su Universo de Entrada, y cuántos Valores lingüísticos desea paracada una de ellas (todas las Variables tendrán igual número de Valores). Paraello el usuario debe ejecutar el Comando Autodefinir Universo Recto delMenú Entradas, con lo cual se despliega el cuadro de Diálogo Autodefiniciónde Universos, que se muestra en la figura 4.13. UNFUZZY define entoncescada Variable Lingüística con las siguientes especificaciones:Nombre: Variable i (i es el número de la variable)Universo de Discurso : [-1,1]Intervalos de Evaluación : (n+1)*5 (n es el número de Valores Lingüísticos)Tipo de Difusor : SinglentonValores Lingüísticos:Nombre : Conjunto j (j es el número del Conjunto)Tipo : Campana para todos, salvo para el primero y el último, que sontipo Z y S respectivamente.Soporte : [-1+(j-1)(1-(-1))/(n+1) , -1+(j+1)(1-(-1))/(n+1)] (j es elnúmero del Conjunto, y n es el número de Valores Lingüísticos))4.3.1.3.Definición de cada Variable LingüísticaLas opciones de Autodefinición de Universo Recto y Autodefinición deUniverso Curvo permiten efectuar una definición rápida, pero tiene comoinconveniente que UNFUZZY decide por el usuario todas los factores dediseño. Si el usuario desea alterar esta definición, o si desea desde uncomienzo hacer su propia definición, debe entónces efectuar una cualquiera delas siguientes tres operaciones:1. Ejecutar el Comando Definir Variable del Menú Entradas1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.41. hacer doble 'click' en el figura que representa al Universo de Entrada en laventana de Trabajo (ver figura 4.12)Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Variables del Universo de Entrada, que se muestra en la figura 4.14.La información que se despliega en ese Cuadro de Diálogo corresponde a la


Variable Lingüística seleccionada en la lista Nombre de la Variable. Si no seha definido previamente ningún Universo de Entrada, en esta lista sólo debeaparecer la Variable Entrada 1.En el Cuadro de Diálogo sobresalen dos figuras, una de ellas con el título"Entrada 1", y la otra con el título "Difusor"; la primera corresponde a lasfunciones de pertenencia de los valores lingüísticos de la variable de entradaseleccionada en la lista Nombre de la Variable, y la segunda a la función depertenencia de su difusor.66Figura 4.14 Cuadro de Diálogo Definir Variable de EntradaPara modificar el diseño del Universo de Entrada el usuario tiene lassiguientes opciones:4.3.1.3.1.Definir Variable:


El botón Definir Variable invoca el cuadro de diálogo que se muestra en lafigura 4.15. El usuario puede entonces modificar:Nombre: Es una etiqueta que se asigna a la Variable LingüísticaValor Mínimo: es el límite inferior del Universo de Discurso de la VariableLingüísticaValor Máximo: es el límite superior del Universo de Discurso de la VariableLingüísticaIntervalos de Evaluación: es el número de Intervalos en el que UNFUZZYfraccionará el Universo de Discurso de las variables de Entrada, cuando seemplee la opción Generar Tabla (ver numeral 4.4.4)67Figura 4.15 Cuadro de Diálogo Definción de Variable4.3.1.3.2.Insertar VariableEl botón Insertar Variable permite adicionar una variable Lingüística más alUniverso de Entrada; para ello, invoca el mismo cuadro de diálogo de la figura4.15, autodefine tres valores lingüísticos con conjuntos difusos de forma recta,y asigna un difusor Singlenton. La nueva Variable se ubica a continuación dela que en ese momento esté seleccionada en la lista Nombre de la Variable.4.3.1.3.3.Eliminar VariableEl botón Eliminar Variable permite eliminar una variable Lingüística delUniverso de Entrada; UNFUZZY solicitá una confirmación antes de procedera eliminarla.


684.3.1.3.4.Tipo de DifusorMediante la lista Difusor se puede modificar el tipo de Difusor asociado a laVariable Lingüística de Entrada.4.3.1.3.5.Definir DifusorEl Difusor es un Conjunto Difuso cuyo centro cambia con cada EntradaConcreta, pero cuya forma se mantiene. El botón Definir Difusor permitemodificar los parámetros que definen la forma del Conjunto Difuso; para elloinvoca un cuadro de diálogo como el que se muestra en la figura 4.16. Elcuadro de diálogo puede tener una apariencia diferente, dependiendo del tipode Difusor que se haya seleccionado (ver numeral 4.3.1.3.4).Figura 4.16 Cuadro de Diálogo Definir Difusor4.3.1.3.6.Puntos de EvaluaciónEn el proceso de Inferencia, UNFUZZY debe efectuar la composición de lafunción de pertenencia de los conjuntos producidos por los Difusores, y lasfunciones de pertenecia asociadas a las implicaciones (ver numeral 1.2.4);Para calcular esta composición, debería evaluarse el máximo sobre todos losvalores de los Universos de Discurso de las Entradas, sin embargo, el máximosólo puede presentarse en los soportes de los conjuntos producidos por losdifusores; es por ello que UNFUZZY sólo evalúa en estos soportes, y la


evaluación la hace sobre un conjunto finito de puntos, que el usuario puededeterminar mediante el botón Puntos de Evaluación. Al emplear este botón seabre un Cuadro de Diálogo como el que se muestra en la figura 4.17.69Figura 4.17 Cuadro de Diálogo Puntos de Evaluación4.3.1.3.7.Edición gráfica de los Valores LingüísticosUno de los Conjuntos Difusos cuyas funciones de pertenencia se muestran enel Cuadro de Diálogo está dibujado en color verde, mientras los demás loestán en amarillo. El conjunto en verde corresponde al seleccionado en la listaNombre del Conjunto; este conjunto presentará varios Puntos de Control,señalizados por un pequeño cuadrado de color verde; el número de puntos decontrol y su ubicación dependen del Tipo de Conjunto. Si el usuario ubica elratón en uno de los puntos de control y presiona el botón izquierdo, notará queel cursor cambia de apariencia; si ahora el usuario arrastra el ratón y luegolibera el botón izquierdo, notará que la función de pertenencia del conjunto hasido modificada. De esta forma, puede tenerse una edición gráfica de losConjuntos Difusos asociados a cada Valor Lingüístico.4.3.1.3.8.Definir ConjuntoEl botón Definir Conjunto invoca un cuadro de diálogo como el que semuestra en la figura 4.16; el cuadro puede tener una apariencia diferente segúnsea el Tipo de Conjunto seleccionado en la lista Nombre del Conjunto (elmismo que se presenta en color verde). El usuario puede entonces modificar adicho conjunto:Nombre: Es una etiqueta que se asigna a la Variable LingüísticaParámetros: son los valores que determinan la forma de la función depertenencia, y cuyo significado se muestra en la figura del Cuadro de Diálogo.El número de parámetros depende del tipo de Conjunto.


70En el mismo Cuadro de Diálogo se muestran los valores mínimo y máximodel Universo de Discurso de la Variable Lingüística; estos valores no puedenmodificarse aquí, pero sirven de referencia para la definición de losparámetros.4.3.1.3.9.Insertar ConjuntoEl botón Insertar Conjunto permite adicionar un Valor Lingüístico más a laVariable Lingüística; para ello, invoca el cuadro de diálogo de la figura 4.18.El usuario puede entonces seleccionar un nombre y un Tipo de Conjunto parael valor Lingüístico.Figura 4.18 Cuadro de Diálogo Insertar Conjunto4.3.1.3.10.Eliminar ConjuntoEl botón Eliminar Conjunto permite eliminar un Valor Lingüístico de lavariable lingüística; UNFUZZY solicitá una confirmación antes de proceder aeliminarla.4.3.1.3.11.Tipo de ConjuntoMediante la lista Tipo de Conjunto el usuario puede modificar la forma de lafunción de pertenencia del conjunto seleccionado en la lista Nombre delConjunto (el mismo que se presenta en color verde).


714.3.1.3.12.Autodefinir VariableEl botón Autodefinir permite efectuar una definición rápida de los ValoresLingüísticos de la Variable; para ello invoca el cuadro de diálogo que semuestra en la figura 4.19, para que el usuario decida cuántos Valores desea, ysi los quiere con funciones de pertenencia de forma recta o curva; acontinuación UNFUZZY efectuará una definición similar a la explicada en losnumerales 4.3.1.1 y 4.3.1.2, pero sólo para la Variable Lingüísticaseleccionada en la lista Nombre de la variable.Figura 4.19 Cuadro de Diálogo Autodefinición de Variables4.3.2. Paso 2: Diseño del Universo de Salida:El diseño del Universo de Salida consiste en la definición de las VariablesLingüísticas que lo forman, y de los concresores que acompañan a éstas.UNFUZZY permite emplear tres caminos distintos para efectuar estadefinición, que son del todo análogos a empleados para definir el Universo deEntrada (ver numeral 4.3.1). Las diferencias existentes en las definiciones delos dos Universos son las siguientes:4.3.2.1.Autodefinición de Universos Rectos o CurvosA cada variable de Salida se le asigna un concresor del tipo Altura, en lugar deun difusor.


724.3.2.2.Intervalos de EvaluaciónEl item Intervalos de Evaluación al que se hace referencia en el numeral4.3.1.3.1 tiene un significado diferente para las variables de Salida: Esteintervalo se refiere a la discretización que UNFUZZY hará para calcular elvalor concreto de los conjuntos difusos producidos por el Motor de Inferencia.4.3.2.3.Concresores en lugar de DifusoresComo las variables de salida no requieren de difusores, se han eliminado lasopciones a que hacen referencia los numerales 4.3.1.3.4, 4.3.1.1.5 y 4.3.1.3.6;en su lugar se ha incluido una lista Concresor, con la que el usuario puedeseleccionar el tipo de Concresor asociado a cada Variable Lingüística deSalida.4.3.3. Paso 3: Diseño de la Base de ReglasEl diseño de la Base de Reglas consiste en la definición de un conjunto dereglas, cada una de las cuales está conformada por un Antecedente y unConsecuente; éstos, a su vez, están definidos por términos de la fórmaVariable Lingüística i es Valor Lingüístico j; en donde Variable Lingüística ies una de las variables que forman parte del Universo de Entrada (si se trata deun Antecedente) o de Salida (si se trata de un consecuente), y ValorLingüístico j es uno de los Valores que puede tomar Variable Lingüística i;adicionalmente, cada término del Antecedente puede estar acompañado de unModificador Lingüístico (que por defecto es 1.0), cuyo significado será el deadicionar el calificativo muy (si es mayor que 1.0) o poco (si es menor que1.0).Para definir la Base de Reglas, el usuario tiene dos posibles caminos:4.3.3.1.Definición RápidaCon esta opción UNFUZZY ayuda al usuario a definir una Base de Reglas deforma rápida; para utilizar esta opción, el usuario debe ejecutar el ComandoDefinición Rápida del Menú Inferencia, con lo cual se despliega el cuadro de


Diálogo Definición Rápida de Reglas, que se muestra en la figura 4.20. Coneste Cuadro el usuario puede efectuar las siguientes tareas:73Figura 4.20 Cuadro de Diálogo Definición Rápida de Reglas4.3.3.1.1.Definición de una base completa de reglasAl emplear el botón Definir Conjunto Completo de Reglas UNFUZZY borratodas las reglas existentes en la base, y crea una Base con tantas Reglas comoposibles combinaciones de los Valores Lingüisticos de las variables deEntrada sean posibles, y asigna a cada Regla un antecedente con cada una dedichas combinaciones; otras características de la Base creada son lassiguientes:- Los Modificadores Lingüísticos de todos los términos de los Antecedentesde todas las Reglas se asignan en 1.0.- Todos los términos de los Consecuentes de todas las reglas se asignan enel primer Valor Lingüístico de la variable de Salida correspondiente.4.3.3.1.2.Definición de una base con tendencia crecienteAl emplear el botón Tendencia Creciente UNFUZZY efectúa una operaciónsobre todas las reglas definidas en ese momento, para asignar los términos delos Consecuentes que se relacionan con la variable de salida seleccionada en la


lista Variable de Salida, según un algoritmo interno que intenta incrementar elValor Lingüístico de Salida, conforme se incrementan los ValoresLingüísticos de las Entradas.744.3.3.1.3.Definición de una base con tendencia decrecienteAl emplear el botón Tendencia Decreciente UNFUZZY efectúa una operaciónsobre todas las reglas definidas en ese momento, para asignar los términos delos Consecuentes que se relacionan con la variable de salida seleccionada en lalista Variable de Salida, según un algoritmo interno que intenta incrementar elValor Lingüístico de Salida, conforme se decrementan los ValoresLingüísticos de las Entradas.4.3.3.1.4.Definición de una base con tendencia constanteAl emplear el botón Tendencia Constante UNFUZZY efectúa una operaciónsobre todas las reglas definidas en ese momento, para asignar los términos delos Consecuentes que se relacionan con la variable de salida seleccionada en lalista Variable de Salida, fijándolo en el Valor Lingüístico que esteseleccionado en la lista que aparece en el Cuadro de Diálogo.4.3.3.2.Definición de Cada ReglaCon esta opción UNFUZZY ayuda al usuario a definir una a una las Reglasque forman la Base; para utilizar esta opción, el usuario debe efectuar unacualquiera de las siguientes tres operaciones:1. Ejecutar el Comando Reglas del Menú Inferencia1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.41. hacer doble 'click' en el figura que representa la Base de Reglas en laventana de Trabajo (ver figura 4.3)Con cualquiera de las tres opciones anteriores se despliega el cuadro deDiálogo Definición de las Reglas de la Máquina de Inferencia, que se muestraen la figura 4.21. En la parte superior del Cuadro de Diálogo se muestra elnúmero de la regla cuya información se está desplegando, y el número total dereglas definidas en la Base. En la lista principal del Cuadro se despliga laRegla, empleando un renglón para cada uno de los términos del Antecedente y


del Consecuente; hay también dos renglones "muertos" empleados por laspalabras IF y THEN, que sirven de encabezados al Antecedente y elConsecuente, respectivamente.75Figura 4.21 Cuadro de Diálogo Definición de ReglasLas opciones que permite el Cuadro de Diálogo son las siguientes4.3.3.2.1.Modificaciones en el AntecedentePueden introducirse Modificadores Lingüísticos en cada uno de los términosdel Antecedente; para ello debe seleccionarse el término deseado en la listaque muestra la Regla, y luego modificar la caja de edición ModificadorLingüístico con la barra de desplazamiento ubicada a la derecha de la caja.4.3.3.2.2.Modificaciones en el ConsecuentePueden cambiarse los términos del consecuente; para ello debe seleccionarseel término deseado en la lista que muestra la Regla, con lo cual la listaConsecuente muestra los posibles valores lingüísticos que puede tomar eltérmino deseado; el usuario debe escoger el nuevo valor lingüístico.


764.3.3.2.3.Siguiente ReglaEl botón Siguiente despliega la información correspondiente a la siguienteRegla en la Base4.3.3.2.4.Anterior ReglaEl botón Anterior despliega la información correspondiente a la anterior Reglaen la Base4.3.3.2.5.Ir A....El botón Ir A... permite ubicar rápidamente una regla dentro de la base y/oadicionar nuevas reglas, para ello despliega el cuadro de diálogo Ir a... que semuestra en la figura 4.22; La regla se identifica por los términos delAntecedente, por lo tanto en este Cuadro de Diálogo no se incluye lainformación del Consecuente.Figura 4.22 Cuadro de Diálogo Ir A...Para buscar una regla el usuario puede ubicarla por su número, mediante lacaja de edición Número de Regla, o mediante los términos del Antecedenteasí:


1. Seleccione el primer término del Antecedente en la lista Antecedente; alefectuar esta operación UNFUZZY desplegará los posibles ValoresLingüísticos asociados a la Variable Lingüística del primer término en lalista Conjuntos.1. Seleccione el Valor Lingüístico deseado para el primer término, en la listaConjuntos.1. Repita los pasos 1 y 2 con todos los términos del Antecedente.1. Emplee el botón Buscar ReglaComo respuesta al último paso, UNFUZZY intentará ubicar en la Base deReglas cuál es la Regla cuyo antecedente coincide con el que se muestra en lalista Antecedente; si no encuentra tal regla, le preguntará al usuario si deseaadicionarla a la Base.De lo anterior es claro que para adicionar una regla, primero debe buscarse enla Base, y si no existe, entonces aceptar cuando UNFUZZY le pregunte sidesea adicionarla.774.3.3.2.6.Eliminar ReglaEl botón Eliminar Regla elimina la regla actual de la base de reglas.4.3.3.2.7.Eliminar TodasEl botón Eliminar Todas elimina todas las reglas de la base de reglas; siempresubsistirá una regla, con lo que se impide que el programa entre eninconsistencias internas.4.3.4. Paso 4: Diseño del Motor de InferenciaEl diseño de la Máquina de Inferencia consiste en la selección de losoperadores matemáticos que debe emplear para los distintos cálculos internos.Para llevar a acabo esta operación el usuario deberá efectuar una cualquiera delas siguientes tres operaciones:1. Ejecutar el Comando Opciones Matemáticas del Menú Inferencia1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.4


1. hacer doble 'click' en el figura que representa la Máquina de Inferencia en laventana de Trabajo (ver figura 4.3)Con cualquiera de las tres opciones anteriores se despliega el cuadro deDiálogo Opciones Matemáticas, que se muestra en la figura 4.23. Las cuatrolistas que allí aparecen permiten al usuario seleccionar distintos operadorespara las funciones AND, la Composición, la Implicación, y para la Unión oIntersección que efectúan algunos Concresores.Al seleccionar algunas de las opciones (las familias de T_Normas) UNFUZZYpreguntará al usuario por un parámetro que permite especificar completamenteel operador (ver numeral 4.2)78Figura 4.23 Cuadro de Diálogo Opciones Matemáticas4.3.5. Paso 5: Comentario DescriptivoPara asignar un breve comentario descriptivo el usuario debe seleccionar laopción Descripción del menú Archivo, con lo cual se desplegará un Cuadro deDiálogo para que el usuario escriba un comentario de máximo 80 caracteres;dicho comentario se desplegará en la ventana de trabajo del Sistema de LógicaDifusa.


794.4. Análisis e implementación de un Sistema de LógicaDifusaPara acceder a las opciones de análisis e implementación, el usuario deberáhaber completado el proceso de diseño descrito en el numeral 4.3, luego de locual el usuario tendrá las siguientes posibilidades:4.4.1. Cálculo de SalidasEsta opción permite calcular cuáles son los valores concretos de las Variablesde Salida para unos ciertos valores concretos de las Variables de entrada; paraello, el usuario debe efectuar una cualquiera de las siguientes dos operaciones:1. Ejecutar el Comando Calcular del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestraen la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Calcular, que se muestra en la figura 4.24. Para calcular las salidasconcretas del Sistema de Lógica Difusa el usuario debe seguir los siguientespasos:1. Informar al programa cuáles son los valores concretos de entrada: para ellodebe efectuar un doble 'click' sobre cada variable de Entrada de la ListaEntradas, con lo que despliega un cuadro de diálogo en el que puede editarel valor de entrada.1. Hacer 'click' sobre el boton Calcularcomo respuestas a estas acciones, UNFUZZY calculará las salidas y lasescribirá en la lista Salidas.


80Figura 4.24 Cuadro de Diálogo Calcular4.4.2. Cálculo Paso a PasoEsta opción permite calcular cuáles son los valores concretos de las Variablesde Salida para unos ciertos valores concretos de las Variables de entrada,mostrando los pasos intermedios que llevaron a obtener tal resultado; paraacceder a esta opción el usuario debe efectuar una cualquiera de las siguientesdos operaciones:1. Ejecutar el Comando Calcular Paso a Paso del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestraen la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Calcular Paso a Paso, que se muestra en la figura 4.25. Para calcularpaso a paso las salidas concretas del Sistema de Lógica Difusa el usuario debeseguir los siguientes pasos:1. Informar al programa cuáles son los valores concretos de entrada: para ellodebe efectuar un doble 'click' sobre cada variable de Entrada de la ListaEntradas, con lo que despliega un cuadro de diálogo en el que puede editarel valor de entrada.1. Hacer 'click' sobre el botón Siguiente Paso; como respuesta a esta acciónUNFUZZY muestra los Conjuntos Difusos asociados a los ValoresLingüísticos de las Variables de Entrada, y señala el Difusor correpondientea la entrada definida en el paso anterior. El usuario puede seleccionar laVariable de Entrada que desea visualizar, mediante la lista Difusor.


Adicionalmente, UNFUZZY indica que se ha efectuado el primero de cincopasos ("Paso 1/5").1. Hacer 'click' sobre el botón Siguiente Paso; como respuesta a esta acciónUNFUZZY muestra las reglas que se activan con los difusores a que serefiere el paso 2. Adicionalmente, UNFUZZY indica que se ha efectuado elsegundo de cinco pasos ("Paso 2/5").1. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acciónUNFUZZY muestra las funciones de pertenencia de los Conjuntos Difusosproducidos como resultado de la inferencia sobre las reglas activadas; Elusuario puede seleccionar la Regla que desea visualizar, mediante la listaReglas Activas. Adicionalmente, UNFUZZY indica que se ha efectuado eltercero de cinco pasos ("Paso 3/5").1. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acciónUNFUZZY muestra la funcion de pertenencia del Conjunto Difusoproducido como resultado de la Unión o Intersección de las reglas activadasa que se refiere el paso anterior. Adicionalmente, UNFUZZY indica que seha efectuado el cuarto de cinco pasos ("Paso 4/5").1. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acciónUNFUZZY calcula los valores concretos de las Variables de Salidacorrepondientes a los valores Concretos de Entradas especificados en elpaso 1, y lo muestra en la figura a que hace referencia el paso anterior.Adicionalmente, UNFUZZY indica que se ha efectuado el quinto de cincopasos ("Paso 5/5").Los pasos 2 a 6pueden efectuarse en un sólo paso, empleando el botón Todoslos Pasos; El botón Paso Inicial devuelve el cuadro de diálogo a su estadoinicial.81


82Figura 4.25 Cuadro de Diálogo Calcular Paso A Paso4.4.3. Función de TransferenciaLa opción de Función de Transferencia permite al usuario visualizar larelación existente entre las Entradas y las Salidas; para ello el usuario deberáefectuar una cualquiera de las siguientes dos operaciones:1. Ejecutar el Comando Función de Transferencia del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Función de Transferencia, que se muestra en la figura 4.26. Debido aque es imposible graficar simultáneamente la relación existente entre variasentradas y varias salidas, UNFUZZY muestra la relación de una Variable deSalida contra una Variable de Entrada, fijando las demás entradas en valoresque el usuario puede determinar.


83Figura 4.26 Cuadro de Diálogo Función de TransferenciaLas opciones que brinda el Cuadro de Diálogo Función de Transferencia sonlas siguientes4.4.3.1.Selección de EntradaMediante la lista Entradas el usuario selecciona la Variable de Entrada quequiere relacionar en la gráfica; al efectuar una nueva selección, se borran lasgráficas existentes.4.4.3.2.Selección de SalidaMediante la lista Salidas el usuario selecciona la Variable de Salida que quiererelacionar en la gráfica; al efectuar una nueva selección, se borran las gráficasexistentes.4.4.3.3.Entradas fijas


Al efectuar doble 'click' sobre la lista Entradas Fijas el usuario podrámodificar los valores fijos de las entradas que no es está relacionando en lagráfica; Estos valores también pueden modificarse empleando la barra dedesplazamiento que se encuentra a la derecha de la lista Entradas Fijas.844.4.3.4.CalcularEsta opción grafica la relación existente entre la Variable de Salidaseleccionada en la lista Salidas, y la Variable de Entrada seleccionada en lalista Entradas; si se utiliza esta opción varias veces, en cada ocasión segraficará con un color distinto, de forma tal que se puedan visualizar familiasde curvas.4.4.3.5.LimpiarEsta opción permite borrar las gráficas existentes en ese momento.4.4.4. Generación de Tablas Entrada-SalidaLa opción de Generación de Tablas permite al usuario crear un archivo detexto en el que se tabulan las salidas concretas para todas las posiblescombinaciones de los valores concretos de entrada; para ello el usuario deberáefectuar una cualquiera de las siguientes dos operaciones:1. Ejecutar el Comando Generar Tabla del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Generar Tabla, que se muestra en la figura 4.27. Al emplear el botónGenerar el programa calculará las salidas concretas para todas las posiblesentradas, y creará una tabla que se puede grabar en disco mediante el botónSalvar. Para determinar cuáles son las posibles combinaciones de los valoresconcretos de la Variables de Entrada, UNFUZZY efectúa una discretizaciónde los Universos de Discurso de las Variables Lingüísticas de Entrada,empleando tantos Intervalos de Discretización como haya decidido el usuarioen el Cuadro de Diálogo Definir Variable (ver numeral 4.3.1.3.1).


85Figura 4.27 Cuadro de Diálogo Generar Tabla4.4.5. Generación de Código FuenteLa opción de Generación de Código Fuente permite al usuario crear unarchivo de texto con el código fuente C ó C++ necesario para implementar elSistema de Lógica Difusa diseñado; para ello el usuario deberá efectuar unacualquiera de las siguientes dos operaciones:1. Ejecutar el Comando Generar Código del Menú Analizador1. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura 4.4Con cualquiera de las dos opciones anteriores se despliega el cuadro deDiálogo Generar Código, que se muestra en la figura 4.28. Al emplear elbotón Generar el programa generará el código fuente C ó C++ (según laselección del usuario), que se puede grabar en disco mediante el botón Salvar.


86Figura 4.28 Cuadro de Diálogo Generar CódigoSi el usuario ha seleccionado la opción Codigo C++, entonces UNFUZZY lepreguntará por el nombre que le desea asignar a una Clase en la que seencapsulará todo el comportamiento del Sistema de Lógica Difusa; pordefecto, UNFUZZY asigna a dicha Clase el nombre MiSistema.El numeral 4.6 presenta algunos aspectos a tener en cuenta sobre la utilizacióndel código fuente C y C++ generado por UNFUZZY.4.5. Entrenamiento de un Sistema de Lógica DifusaLa opción de Entrenamiento de un Sistema de Lógica Difusa permite alusuario emplear los algoritmos presentados en el numeral 1.3, utilizando comodatos de entrada tablas como la 1.2, que pueden estar previamentealmacenadas como archivos de texto; para ello el usuario deberá ejecutar elComando Entrenamiento del Menú Inferencia, con lo cual se despliega elcuadro de Diálogo Entrenamiento, que se muestra en la figura 4.29.


87Figura 4.29 Cuadro de Diálogo EntrenamientoEl procedimiento completo para efectuar el entrenamiento es el siguiente :1. El usuario debe escribir en el cuadro de diálogo la tabla con los patrones deentrenamiento, o leerla de un archivo de texto con la opción Leer. Elformato en que debe escribirse la tabla es el siguiente 17 :Entrada 11 ; Entrada 21 ; ... ; Entrada p1 ; Salida 11 ; Salida 21 ; ... ; Salida q1 ;Entrada 12 ; Entrada 22 ; ... ; Entrada p2 ; Salida 12 ; Salida 22 ; ... ; Salida q2 ;.....Entrada 1w ; Entrada 2w ; ... ; Entrada pw ; Salida 1w ; Salida 2w ; ... ; Salida qw ;2. Utilizar la opción Validar, que permite comprobar si el formato empleadoes el correcto.2. Seleccionar el algoritmo de entrenamiento deseado (Universos Fijos oUniversos Variables).2. Seleccionar el Tipo de Algoritmo (Nuevo o Actualiza). Esta selecciónconsiste en decidir si el entrenamiento debe borrar las definiciones que sehayan hecho con entrenamientos previos, o si por el contrario debe17 Ver Tabla 1.2


actualizar el diseño del sistema de Lógica Difusa, sin borrar las definicionesprevias.2. Emplear la opción Entrenar, para ejecutar el algoritmo de Entrenamiento.El Algoritmo de Entrenamiento de Universos Variables debe crear nuevosConjuntos Difusos en cada Variable Lingüística. UNFUZZY toma el primerconjunto de cada Variable, lo reproduce, y lo centra en los valores concretosde los patrones de entrenamiento. De esta forma, el usuario puede decidir quétipo de Conjuntos quiere que genere el algoritmo, creando un modelo comoprimer (y si desea único) conjunto de cada Variable Lingüística, antes deejecutar el algortimo de entrenamiento 18 .4.6. Utilización del Código Fuente generado por UNFUZZYLa opción de Generación de Código Fuente que se presenta en el numeral4.4.5 permite que el usuario disponga de código en lenguaje C y/o C++, paraimplementar en software el Sistema de Lógica Difusa diseñado. Para poderutilizar este código el usuario debe disponer de un compilador para lenguaje Cy/o C++, y tener algunos conocimientos básicos sobre su utilización, y sobreel lenguaje de programación.Los dos principales objetivos del código fuente generado por UNFUZZY sonlos siguientes:1. Permitir que el software del usuario cree fácilmente (con una solainstrucción) el Sistema de Lógica Difusa.1. Permitir que el sofware del usuario consulte fácilmente (con una solainstrucción) cuáles son las salidas concretas del Sistema de Lógica Difusa,para unas ciertas entradas concretas.En el código fuente se incluye tambien una función main() que permiteejemplificar la utilización del código, con un pequeño programa para DOS quesolicita al usuario por teclado las entradas del Sistema de Lógica Difusa, yentrega las salidas del mismo a través de la pantalla.El código fuente ha sido probado empleando la herramienta de programaciónBorlandC++ 4.52; no obstante, es posible que para Sistemas de Lógica Difusacomplejos (con muchas variables y/o muchas reglas), el compilador arroje8818 Ver numerales 4.3.1.3.7 al 4.3.1.3.11


errores debidos a que algunas funciones resulten excesivamente extensas; entales casos, el usuario deberá fraccionarlas adecuadamente para no exceder lascapacidades del Compilador. También es posible que el encadenador detecteque el código generado exceda el estándar de 64K, en cuyo caso el usuariodeberá fraccionar el archivo.A continuación se presentan algunos detalles adicionales sobre el códigogenerado C y C++894.6.1. Código CEl código C generado corresponde a un enfoque de programaciónestructurada. La concepción del software es tal, que existen algunas variables,estructuras y vectores que son de ámbito global, y existen varias funciones queacceden a dichas variables globales.4.6.1.1.Estructuras y variables globales:A continuación se presentan las principales variables globales del código Cgenerado por UNFUZZY:1. define:NUMEROREGLASNUMEROVARIABLESENTRADANUMEROVARIABLESSALIDA: Número total de Reglas: Número de variables de Entrada: Número de variables de SalidaNUMEROTOTALCONJUNTOSENTRADA : Número de Valores Lingüísticos de Entrada2. structconjunto: incluye las siguientes variableschar nombre[40] : cadena con el nombre de la variablefloat minimo : límite inferior del soporte del conjuntofloat maximo : límite superior del soporte del conjuntovariable: incluye las siguientes variableschar nombre[40] : cadena con el nombre de la variablefloat minimo : límite inferiror del Universo de Discursofloat maximo : límite superior del Universo de Discursoint intervalos : número de intervalos de discretizaciónfloat intervalo : intervalo de discretizaciónint numeroConjuntos : número de Valores Lingüísticos de la variabledifusor: incluye las siguientes variablesfloat minimo : límite inferior del soporte del conjunto


90float maximo : límite superior del soporte del conjuntofloat centro : centro del difusorfloat var1 : parámetro de la función de pertenencia del difusorfloat var2 : parámetro de la función de pertenencia del difusorfloat var3 : parámetro de la función de pertenencia del difusorfloat var4 : parámetro de la función de pertenencia del difusorint puntos : Número de puntos de evaluaciónfloat intervalo : intervalo de evaluación3. vectoresstruct variable VariablesEntrada[NUMEROVARIABLESENTRADA]:Conjunto de variables de Entrada, corresponde al Universo de Entrada.struct variable VariablesSalida[NUMEROVARIABLESSALIDA]:Conjunto de variables de Salida, corresponde al Universo de Salida.struct conjunto Entradas[NUMEROTOTALCONJUNTOSENTRADA]:Conjunto de Valores Lingüísticos del Universo de Entradastruct difusor Difusores[NUMEROTOTALCONJUNTOSENTRADA]:Conjunto de Difusores del Universo de Entradaint Reglas[NUMEROREGLAS][NUMEROVARIABLESENTRADA+NUMEROVARIABLESSALIDA]Base de Reglasfloat Modificadores[NUMEROREGLAS][NUMEROVARIABLESENTRADA]:Conjunto de Modificadores Lingüísticos de la Base de Reglasfloat CentrosAltura[NUMEROREGLAS][NUMEROVARIABLESSALIDA]:Conjunto de los centros de los valores lingüísticos de salida, que se emplean cuando existenconcresores tipo Altura.4.6.1.2.funciones:A continuación se presentan las principales funciones del código C generadopor UNFUZZY:void llenarDatos() : esta función crea el Sistema de Lógica Difusa; en rigor, lo que hace es asignar a lasvariables, estructuras y vectores globales sus valores adecuados.void calcular(float *ent, float * sal): esta función permite calcular cuáles son los valores concretos de salidadel Sistema de Lógica Difusa, cuando se especifican unos valores concretos de entrada; los valores de entradadeben estar en el vector ent, y los valores de salida se archivan en el vector sal.4.6.2. Código C++El código C++ generado corresponde a un enfoque de programación orientadaa objetos. El código genera una clase concreta, cuyo nombre lo decide elusuario (por defecto es MiSistema), de tal manera que el Sistema de LógicaDifusa se genera cuando el software del usuario crea un objeto de esa clase.


Una de las principales ventajas que se tiene al emplear el enfoque orientado aobjetos frente al enfoque estructurado, consiste en la facilidad de tener en unmismo programa varios Sistemas de Lógica Difusa, bien sea por tenerdiferentes instancias de la misma clase generada por UNFUZZY, o porque setengan instancias únicas de diferentes clases generadas por UNFUZZY, cadauna con un nombre diferente.La clase generada hereda funciones y atributos de la claseSistemaDeLogicaDifusa; la declaración de esa clase, y de otras tambiénnecesarias se incluye en los archivos fuzzy.hpp y fuzzy.cpp, que se entreganjunto con UNFUZZY. Por esta razón el código del usuario debe contener lainstrucción #include, y debe compilar su código junto con elarchivo fuzzy.cpp.Las principales funciones que se heredan de la clase SistemaDeLogicaDifusason:1. void calcular(float *entra,float *sale): esta función permite calcular cuáles son los valores concretos desalida del Sistema de Lógica Difusa, cuando se especifican unos valores concretos de entrada; los valoresde entrada deben estar en el vector ent, y los valores de salida se archivan en el vector sal.1. int numeroEntradas(): retorna en número de Variables de Entrada1. int numeroSalidas(): retorna el número de Variables de Salida1. char *nombreVariableEntrada(int numVar): retorna el nombre de la Variable de Entrada de númeronumVar1. char *nombreVariableSalida(int numVar): retorna el nombre de la Variable de Salida de número numVar1. void EntrenaUniversoFijo(float *antecedente, float *consecuente) : Efectúa el algoritmo de entrenamientopresentado en el numeral 1.3.1, con los datos de entrenamiento archivados en los vectores antecedente yconsecuente1. void EntrenaUniversoVariable(float *antecedente, float *consecuente) : Efectúa el algoritmo deentrenamiento presentado en el numeral 1.3.2, con los datos de entrenamiento archivados en los vectoresantecedente y consecuente91Debido a que las clases incluidas en los archivos fuzzy.hpp y fuzzy.cpp sonversiones resumidas de las mismas clases empleadas para implementarUNFUZZY, se recomienda al lector que desee profundizar en el conocimientode su diseño, remitirse a los capítulos 2 y 3.


925. UNFUZZY - EJEMPLOS <strong>DE</strong> APLICACIONCon el fin de ilustrar posibles aplicaciones de UNFUZZY, se han desarrolladolos siguientes ejemplos: Control de Péndulo Invertido, Identificación dePlantas y Predicción de Series de Tiempo.En ninguno de los ejemplos se ha pretendido hacer una exploración exhaustivade los posibles Sistemas de Lógica Difusa, ni tampoco comparar los resultadosque se obtendrían con otras estrategias. El único interés consiste en mostrar elmodo de empleo de UNFUZZY en estos casos particulares.5.1. Controlador difuso para el péndulo invertidoUna de las aplicaciones en las que los Sistemas de Lógica Difusa han sido máspromocionados, es en el diseño de Controladores. Por esta razón, el primerejemplo de aplicación de UNFUZZY, que presentamos a continuación, es eldiseño de un controlador para regular un sistema inestable, que ha sido objetode numerosos estudios 19 , el péndulo invertido.5.1.1. Planteamiento del problemaEl péndulo Invertido es un sistema como el que se muestra en la figura 5.1. Setrata de un brazo rígido que puede girar libremente alrededor del punto o, queestá montado sobre un móvil que puede desplazarse en el sentido horizontal.La única acción de control que puede efectuarse sobre el sistema es laaplicación de una fuerza U sobre el móvil, en dirección horizontal. Se buscaque el brazo se estabilice en la posición vertical, para distintas condicionesiniciales.19 Ver. Yamakawa, T. “Stabilization of an Inverted Pendulum by a High SpeedFuzzy Logic Controller Hardware System”, Fuzzy Sets and Systems, 32(1989)161-180. Driankov et. Al “An Introduction to Fuzzy Control”, SpringerVerlag, pp 138-140. Así como el trabajo de Cordon O. et. al, disponible enInternet http://www.decsai.ugr.es


93Figura 5.1 Péndulo InvertidoLas ecuaciones que rigen el sistema pueden derivarse de la aplicación de lasleyes de Newton para el móvil y para el brazo (ver figura 5.2):u − H = MyV − mg = mh¤¤H = md¤¤¤¤¤¤(Suma de fuerzas horizontales en M)IΘ = VlSenΘ − HlCosΘ(Suma de torques respecto a m)(Suma de fuerzas verticales en m)(Suma de fuerzas horizontales en m)[1]Figura 5.2 Modelo del pénduloEn dondeu : Fuerza de Control aplicadaH : Reacción horizontal del brazo sobre el móvilV : Reacción vertical del brazo sobre el móvilM : Masa del móvilm : Masa del brazoθ: Ángulo del brazo con la verticall : distancia del eje al centro de masa del brazod : posición horizontal del centro de masa del brazoh : posición vertical del centro de masa del brazog : aceleración de la gravedady : posición horizontal del móvilI : Momento de Inercia del brazoA partir de la geometría del problema (ver figura 5.2) se puede obtener :y por lo tantoh = lCosΘd = lSenΘ [2]


¥¥¥¥¥¥94¥¥¥¥2( )¥ ¥¥h = − l ΘSenΘ + Θ CosΘ2( )¥ ¥¥d = l ΘCosΘ − Θ SenΘ[3]Si se definen las siguientes variablesxxxx123= Θ= Θ ¥= y= y4 [4]Entonces las ecuaciones se convierten enu − H = MxIx = VlSenx − HlCosx42 1 122 1 2V − mg = − ml( x Senx + x Cosx )¥24 2 1 2H = mx + ml x Cosx − x Senx¥( ¥ )Estas ecuaciones pueden escribirse como sigue :xxx= x2mlx2Cosx SenxgSenx1−=m + M2⎡4mCos x1⎤l⎢− ⎥⎣3m + M ⎦= x[¥ ¥ 24=2 1−2 1]x1 223 41 111[5]Cosx1m M u++2⎡4mCos x1⎤l⎢− ⎥⎣3m + M ⎦mM m l x Cosx x Senx 1−−M − m u[6]El problema del control del Péndulo Invertido puede plantearse en lossiguientes términos:Se necesita diseñar un controlador que estabilice localmente elsistema descrito por las ecuaciones [6], en el punto de equilibriodado porxx12= 0= 0independientemente de los valores que tomen las variables x 3 y x 4 .


955.1.2. Diseño del controlador difusoComo estrategias de control se diseñaron cuatro controladores difusosdiferentes, con las siguientes características generales:Controlador 1 Controlador 2 Controlador 3 Controlador 4Entradas Ángulo respecto a Ángulo respecto a Ángulo respecto a Ángulo respecto ala vertical la vertical la vertical y la vertical yVelocidad Angular Velocidad AngularSalidas Fuerza de Control Fuerza de Control Fuerza de Control Fuerza de ControlHorizontal Horizontal Horizontal HorizontalConcresor Altura Centro de Gravedad Altura AlturaBase de reglas Completa (3/3) Completa (3/3) Incompleta (7/15) Completa (15/15)Observaciones ComportamientoPropuesto porIdéntico a unYamakawa 20ControladorproporcionalTabla 5.1La estrategia de control empleada incluye la opción de aplicar la FuerzaHorizontal de Control como pulsos de duración igual al intervalo de muestreo,y de frecuencia variable (el periodo correspondiente a esta frecuencia es unmúltiplo del intervalo de muestreo).En los numerales siguientes se describen con detalle los cuatro controladoresdiseñados. Nótese que las variables Lingüísticas han sido definidas sobreUniversos de Discurso [-1,1]; esto se ha hecho así para definir factores deescala externos a los Controladores.5.1.2.1.Controlador 1 215.1.2.1.1.Universo de EntradaNúmero de Variables de Entrada: 1Nombre de la Variable de Entrada 1: ÁnguloUniverso de Discurso de la Variable Ángulo: [-1,1]Número de Valores Lingüísticos para la Variable Ángulo: 320 ver nota anterior21El archivo correspondiente a este controlador tiene el nombrePENDULO1.DIF


Nombre de los Valores Lingüísticos para la Variable Ángulo: Negativo,Cero y Positivo.Funciones de Pertenencia de la Variable Ángulo: ver figura 5.3Difusor de la Variable Ángulo: Singlenton.96Figura 5.3 Funciones de Pertenencia para la Variable Ángulo, Controladores 1y 25.1.2.1.2.Universo de SalidaNúmero de Variables de Salida: 1Nombre de la Variable de Salida 1: ControlUniverso de Discurso de la Variable Control: [-1,1]Número de Valores Lingüísticos para la Variable Control: 3Nombre de los Valores Lingüísticos para la Variable Control: Negativo,Cero y Positivo.Funciones de Pertenencia de la Variable Control: ver figura 5.4Concresor de la Variable Control: Altura.Figura 5.4 Funciones de Pertenencia para la Variable Control, Controladores 1y 25.1.2.1.3.Máquina de InferenciaOperador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo5.1.2.1.4.Base de Reglas


97Número de reglas: 3Regla 1:IF Ángulo es Bajo THEN Control es BajoRegla 2:IF Ángulo es Cero THEN Control es CeroRegla 3:IF Ángulo es Alto THEN Control es Alto5.1.2.1.5.Relación Entrada-SalidaLa relación Entrada-Salida obtenida con UNFUZZY se muestra en la figura5.5. Nótese que este controlador equivale a un controlador proporcional.Figura 5.5 Relación Entrada-Salida Controlador 15.1.2.2.Controlador 2 225.1.2.2.1.Universo de EntradaNúmero de Variables de Entrada: 1Nombre de la Variable de Entrada 1: ÁnguloUniverso de Discurso de la Variable Ángulo: [-1,1]Número de Valores Lingüísticos para la Variable Ángulo: 3Nombre de los Valores Lingüísticos para la Variable Ángulo: Negativo,Cero y Positivo.Funciones de Pertenencia de la Variable Ángulo: ver figura 5.3Difusor de la Variable Ángulo: Singlenton.5.1.2.2.2.Universo de Salida22El archivo correspondiente a este controlador tiene el nombrePENDULO2.DIF


98Número de Variables de Salida: 1Nombre de la Variable de Salida 1: ControlUniverso de Discurso de la Variable Control: [-1,1]Número de Valores Lingüísticos para la Variable Control: 3Nombre de los Valores Lingüísticos para la Variable Control: Negativo,Cero y Positivo.Funciones de Pertenencia de la Variable Control: ver figura 5.4Concresor de la Variable Control: Centro de Gravedad.5.1.2.2.3.Máquina de InferenciaOperador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo5.1.2.2.4.Base de ReglasNúmero de reglas: 3Regla 1:IF Ángulo es Bajo THEN Control es BajoRegla 2:IF Ángulo es Cero THEN Control es CeroRegla 3:IF Ángulo es Alto THEN Control es Alto5.1.2.2.5.Relación Entrada-SalidaLa relación Entrada-Salida obtenida con UNFUZZY se muestra en la figura5.6. Nótese que este controlador es una variación del Controlador 1, en el quela Relación de Entrada-Salida se ha suavizado en cercanías del punto en que elángulo es cero.


99Figura 5.6 Relación Entrada-Salida Controlador 15.1.2.3.Controlador 3 235.1.2.3.1.Universo de EntradaNúmero de Variables de Entrada: 2Nombre de la Variable de Entrada 1: ÁnguloUniverso de Discurso de la Variable Ángulo: [-1,1]Número de Valores Lingüísticos para la Variable Ángulo: 5Nombre de los Valores Lingüísticos para la Variable Ángulo: NegativoMediano, Negativo Pequeño, Cero y Positivo Pequeño, PositivoMediano.Funciones de Pertenencia de la Variable Ángulo: ver figura 5.7Difusor de la Variable Ángulo: Triángulo.Figura 5.7 Funciones de Pertenencia para la Variable Ángulo, Controladores 3y 4Nombre de la Variable de Entrada 2: Delta ÁnguloUniverso de Discurso de la Variable Velocidad Angular: [-1,1]Número de Valores Lingüísticos para la Variable Delta Ángulo: 323El archivo correspondiente a este controlador tiene el nombrePENDULO3.DIF


100Nombre de los Valores Lingüísticos para la Variable Delta Ángulo:Negativo, Cero y Positivo.Funciones de Pertenencia de la Variable Delta Ángulo: ver figura 5.8Difusor de la Variable Delta Ángulo: Triángulo.Figura 5.8 Funciones de Pertenencia para la Variable Delta ÁnguloControladores 3 y 45.1.2.3.2.Universo de SalidaNúmero de Variables de Salida: 1Nombre de la Variable de Salida 1: ControlUniverso de Discurso de la Variable Control: [-1,1]Número de Valores Lingüísticos para la Variable Control: 5Nombre de los Valores Lingüísticos para la Variable Control: NegativoMediano, Negativo Pequeño, Cero y Positivo Pequeño, PositivoMediano.Funciones de Pertenencia de la Variable Control: ver figura 5.9Concresor de la Variable Control: Centro de Gravedad.Figura 5.9 Funciones de Pertenencia para la Variable Control, Controladores 3y 45.1.2.3.3.Máquina de Inferencia


101Operador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo5.1.2.3.4.Base de ReglasNúmero de reglas: 7Las reglas pueden visualizarse en la siguiente tabla; los valores en cada casillacorresponden a los consecuentes de cada regla. Nótese que la Base de Reglasno es completa.<strong>DE</strong>LTAÁNGULONegativoCeroNegativoMedianoNegativoMedianoNegativoPequeñoNegativoPequeñoÁNGULOCeroCeroPositivoPequeñoCeroPositivo Cero PositivoPequeñoTabla 5.2PositivoMedianoPositivoMediano5.1.2.3.5.Relación Entrada-SalidaLa relación Entrada-Salida obtenida con UNFUZZY se muestra en la figura5.10.


102Figura 5.10 Relación Entrada-Salida Controlador 35.1.2.4.Controlador 4 245.1.2.4.1.Universo de EntradaNúmero de Variables de Entrada: 2Nombre de la Variable de Entrada 1: ÁnguloUniverso de Discurso de la Variable Ángulo: [-1,1]Número de Valores Lingüísticos para la Variable Ángulo: 5Nombre de los Valores Lingüísticos para la Variable Ángulo: NegativoMediano, Negativo Pequeño, Cero y Positivo Pequeño, PositivoMediano.Funciones de Pertenencia de la Variable Ángulo: ver figura 5.7Difusor de la Variable Ángulo: Triángulo.Nombre de la Variable de Entrada 2: Delta ÁnguloUniverso de Discurso de la Variable Velocidad Angular: [-1,1]Número de Valores Lingüísticos para la Variable Delta Ángulo: 3Nombre de los Valores Lingüísticos para la Variable Delta Ángulo:Negativo, Cero y Positivo.24El archivo correspondiente a este controlador tiene el nombrePENDULO4.DIF


103Funciones de Pertenencia de la Variable Delta Ángulo: ver figura 5.8Difusor de la Variable Delta Ángulo: Triángulo.5.1.2.4.2.Universo de SalidaNúmero de Variables de Salida: 1Nombre de la Variable de Salida 1: ControlUniverso de Discurso de la Variable Control: [-1,1]Número de Valores Lingüísticos para la Variable Control: 5Nombre de los Valores Lingüísticos para la Variable Control: NegativoMediano, Negativo Pequeño, Cero y Positivo Pequeño, PositivoMediano.Funciones de Pertenencia de la Variable Control: ver figura 5.9Concresor de la Variable Control: Centro de Gravedad.5.1.2.4.3.Máquina de InferenciaOperador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo5.1.2.4.4.Base de ReglasNúmero de reglas: 15Las reglas pueden visualizarse en la siguiente tabla; los valores en cada casillacorresponden a los consecuentes de cada regla. Nótese que la Base de Reglasse ha completado.<strong>DE</strong>LTAÁNGULONegativoCeroPositivoNegativoMedianoNegativoMedianoNegativoMedianoNegativoPequeñoÁNGULONegativo Cero Positivo PositivoPequeñoPequeño MedianoNegativo Cero Cero PositivoPequeñoPequeñoNegativo CeroPositivo PositivoPequeñoPequeño MedianoCero Cero Positivo PositivoPequeño MedianoTabla 5.35.1.2.4.5.Relación Entrada-Salida


104La relación Entrada-Salida obtenida con UNFUZZY se muestra en la figura5.11.Figura 5.11 Relación Entrada-Salida Controlador 45.1.3. Software de simulaciónPara evaluar el comportamiento de los controladores diseñados se implementóun sencillo programa de simulación para ambiente Windows 3.1. El programatiene por nombre PENDULO.EXE, y el código fuente se entrega con el discoque acompaña este texto, y se explica en el numeral 5.1.2.4.PENDULO ofrece al usuario tres opciones de menú distintas: Planta,Controlador y Simulador, que se detallan a continuación.5.1.3.1.PlantaAl seleccionar la opción Planta, se despliega el cuadro de diálogo que semuestra en la figura 5.12. En ese cuadro de diálogo el usuario podráseleccionar los valores de los parámetros que definen el sistema del PénduloInvertido.


105Figura 5.12 Cuadro de Diálogo Planta5.1.3.2.ControladorAl seleccionar la opción Controlador, se despliega el cuadro de diálogo que semuestra en la figura 5.13. En ese cuadro de diálogo el usuario podráseleccionar el tipo de controlador que desea emplear, y los valores de algunosparémetros descritos en la tabla 5.4. Los Controladores disponibles son lossiguientes :1. Libre : Corresponde a la planta sin Controlador1. Proporcional : Corresponde a un controlador Proporcional1. 1 Entrada ; Altura : Corresponde al Controlador 1 descrito en el numeral5.1.2.1.1. 1 Entrada ; C.G. : Corresponde al Controlador 2 descrito en el numeral5.1.2.2.1. 2 Entradas ; Incompleto : Corresponde al Controlador 3 descrito en elnumeral 5.1.2.3.1. 2 Entradas ; Completo : Corresponde al Controlador 4 descrito en elnumeral 5.1.2.4.Controlador Escala Ángulo Escala Velocidad Escala FuerzaLibre N.A. N.A. N.A.Proporcional N.A. N.A. Factor de1 Entrada ; Altura Escala de la VariableLingüística Ángulo1 Entrada ; C.G Escala de la VariableLingüística Ángulo2 Entradas ; Incompleto Escala de la VariableLingüística Ángulo2 Entradas ; Completo Escala de la VariableLingüística ÁnguloN.A.N.A.Escala de la VariableLingüística DeltaÁnguloEscala de la VariableLingüística DeltaÁnguloProporcionalidadEscala de la VariableLingüística ControlEscala de la VariableLingüística ControlEscala de la VariableLingüística ControlEscala de la VariableLingüística Control


106ÁnguloTabla 5.4Figura 5.13 Cuadro de Diálogo Controlador5.1.3.3.SimuladorAl seleccionar la opción Simulador, se despliega el cuadro de diálogo que semuestra en la figura 5.14. En ese cuadro de diálogo el usuario podrá visualizarel comportamiento de las principales variables que describen la planta(Ángulo, Velocidad Angular, Posición, Velocidad Lineal y Fuerza deControl), bajo diferentes condiciones iniciales, y seleccionando los siguientesparámetros de simulación :1. Intervalo de Iteración : Corresponde a el periodo de muestreo empleadopara convertir el sistema continuo en uno discreto, para simularlo mediantemétodos iterativos.1. Intervalo de Aplicación de la Fuerza : La Fuerza de control se puede aplicaren forma discontinua ; este parámetro corresponde al periodo de aplicaciónde dicha fuerza, y debe ser un múltiplo del Intervalo de Iteración (Si no esun múltiplo, el programa lo aproxima al múltiplo más cercano).1. Tiempo de Simulación : Máximo tiempo que se quiere simular.Las escalas de las gráficas son las siguientes :


107Ángulo : [-a,a], donde a es Escala Ángulo seleccionada en el Cuadro deDiálogo ControladorVelocidad Angular: [-a,a], donde a es Escala Velocidad seleccionada en elCuadro de Diálogo ControladorPosición : [-a,a], donde a es 60 mVelocidad Lineal : [-a,a], donde a es 30 (m/s)Fuerza: [-a,a], donde a es Escala Fuerza seleccionada en el Cuadro de DiálogoControladorFigura 5.14 Cuadro de Diálogo Simulador5.1.3.4.Código Fuente de PENDULO.EXELa extensión del código fuente empleado para compilar el programaPENDULO.EXE no permitió que fuera incluido en un único archivo. Losarchivos con código fuente empleados fueron los siguientes :pendulo.cpp : Contiene el cuerpo principal del programapendulo.rc : Contiene el archivo de recursos


108fuzzy.hpp : Archivo que acompaña a UNFUZZYfuzzy.cpp : Archivo que acompaña a UNFUZZYdif.hpp : Contiene los encabezados de las clases controlador1, controlador2,controlador3 y controlador4.dif1.cpp : Contiene el constructor de la clase controlador1.dif2.cpp : Contiene el constructor de la clase controlador2.dif3.cpp : Contiene el constructor de la clase controlador3.dif4.cpp : Contiene el constructor de la clase controlador4.De esos archivos, sólo fue necesario digitar pendulo.cpp, y crear pendulo.rc,ya que fuzzy.hpp y fuzzy.cpp se entregan junto con UNFUZZY, en tanto quedif.hpp, dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp contienen código que fuecreado con la opción Generar Código de UNFUZZY.El procedimiento para crear los archivos dif.hpp, dif1.cpp, dif2.cpp, dif3.cpp ydif4.cpp fue el siguiente :1. Empleando UNFUZZY, se diseñaron los cuatro controladores presentadosen el numeral 5.1.2.1. Para cada uno de los cuatro controladores, se empleó la opción GenerarCódigo para generar código C++ ; las clases generadas tienen por nombrecontrolador1, controlador2, controlador3 y controlador4; El códigogenerado se salvó en los archivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp.1. De cada uno de los archivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp se retiróla función main(), que se incluye en ellos como ejemplo de utilización.1. De cada uno de los archivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp se tomóel prototipo de las clases controlador1, controlador2, controlador3 ycontrolador4, y se trasladó a un nuevo archivo dif.hpp1. Se modificó la instrucción #include que originalmente estabaen los archivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp, por la instrucción#include.1. En el archivo dif.hpp se incluyó la instrucción #include5.1.4. Resultados


109Para efectos de comparación, se seleccionaron como parámetros de loscontroladores los siguientes 25ControladorEscalaÁngulo (rad)EscalaVelocidad(rad/s)Escala Fuerza(N)Libre N.A. N.A. N.A. N.A.Proporcional N.A. N.A. 10 11 Entrada ; Altura 0.1 N.A. 10 11 Entrada ; C.G 0.1 N.A. 10 12 Entradas ; Incompleto 0.1 0.5 10 12 Entradas ; Completo 0.1 0.5 10 1Tabla 5.5Intervalo de Aplicaciónde la Fuerza (ms)En la figura 5.15 se muestran los resultados de las simulaciones (Ángulo yVelocidad Angular) de la planta con los distintos controladores, para lassiguientes Condiciones Iniciales 26 :Ángulo : 0.05 rad (2º 52´)Velocidad Angular : 0 rad/s25 En todas las simulaciones se seleccionó como Intervalo de Iteración 1ms26 El tiempo de simulación es de 10s.


110Figura 5.15 Comportamiento de la Planta con distintos controladoresLos Controladores que evalúan únicamente el ángulo no pueden estabilizar elPéndulo, lo cual es un resultado conocido 27 . Por otra parte, El mejorcomportamiento corresponde al Controlador 4 28 , que evalúa el ángulo y lavelocidad angular, con un conjunto completo de reglas. Por esta razón,presentamos ahora algunos de los resultados obtenidos con este controlador :5.1.4.1.Variación de la Escala de FuerzaEl controlador 4 con los parámetros definidos en la Tabla 5.5, logra estabilizarel péndulo si las condiciones iniciales son27 Ver Oppenheim & Willsky, “Signals and Systems”, Prentice Hall, 1983, pag738-74028 El Controlador 3 (de Yamakawa) funciona muy bien con una escala defuerza de 100N


111Ángulo : menor que 0.65 rad (º´)Velocidad Angular : 0 rad/sSin embargo, este comportamiento puede modificarse si se altera la Escala deFuerza. La tabla 5.6 presenta cuál es el máximo valor de la Condición Inicialdel Ángulo para que el controlador logre estabilizar el Péndulo, ante distintosvalores de la Escala de Fuerza, suponiendo que la condición inicial develocidad es cero.Escala de Fuerza (N)Ángulo máximo(rad))5 0.35 (20º3´)10 0.65 (37º15´)20 0.99 (56º43´)100 1.44 (82º30´)500 1.54 (88º14´)Tabla 5.65.1.4.2.Variación del Intervalo de Aplicación de laFuerzaEn general, puede afirmarse que incrementar el Intervalo de aplicación de lafuerza equivale a disminuir la acción del controlador, y Por tanto, el tiempode asentamiento del sistema se ve afectado. La tabla 5.7 muestra el efecto decambiar el Intervalo de Aplicación de la Fuerza sobre el tiempo deasentamiento, para el controlador 4 definido con los parámetros de la tabla5.5, y condiciones iniciales :Ángulo : 0.05 rad (2º 52´)Velocidad Angular : 0 rad/sIntervalo de Aplicación dela Fuerza (s)Tiempo de Asentamiento (s)1 2.55 510 No estabiliza el sistemaTabla 5.75.1.5. ConclusionesLas simulaciones efectuadas no pretenden ser una exploración exhaustiva delos posibles controladores que pueden emplearse para estabilizar el Péndulo


112Invertido. Ni siquiera pretenden ser un estudio riguroso sobre elcomportamiento de los pocos controladores diseñados. El único objetivo deeste ejemplo es el de ilustrar la utilización de UNFUZZY para el diseño eimplementación en software de controladores difusos.En este sentido, e independientemente de los análisis que puedan hacersesobre el péndulo y los controladores, puede concluirse que :1. El código C++ generado por UNFUZZY para los cuatro controladores fuesuficiente para poder implementarlos en software.1. La extensión del código generado por UNFUZZY, más el código escritopara simular el péndulo, obligó a fraccionar el código total en variosarchivos, lo cual es una práctica común en el desarrollo de software.5.2. Identificación de plantasOtra de las aplicaciones comunes de los Sistemas de Lógica Difusa es laidentificación de plantas, es decir, la determinación de un modelo matemáticoque reproduzca lo más exactamente posible el comportamiento de una ciertaplanta, de la cual se conocen sus respuestas ante estímulos conocidos.5.2.1. Planteamiento del problemaComo planta desconocida seleccionamos dos sistemas de orden cero, cuyasrespuestas y 1 , y 2 ante una entrada u están dadas por 29y1( u) = 0. 7 . 6sen( a π u) + . 3sen( bπ u) + . 1sen( cπu)[ π π π ]y2 ( u) = 0. 7 0. 6sen( a u) + 0. 3Signo( b u) + 01 . sen( c u)⎧1;α > 0Signo( α)= ⎨ −1;α ≤ 0[1][2]Y la entrada conocida u varía con el tiempo discreto k de la siguiente forma :u( k) = sen( dπ k)[3]29 En las ecuaciones [1], [2] y [3] los parámetros a,b,c,d son seleccionables.


113El problema de Identificación de estos sistemas puede plantearse en lossiguientes términos:Se necesita diseñar un controlador que reproduzca lo más exactamenteposible el sistema descrito por la ecuación [1] (o [2]) , teniendo comoinformación únicamente :1. Un conjunto finito de datos producidos por las ecuaciones [1] y [3] (o [2] y[3]), correspondientes a k=0,1,2,....w1. El sistema es de orden cero 30 .5.2.2. Diseño del Sistema de lógica difusaComo modelos de la planta se diseñaron cuatro Sistemas de Lógica Difusadiferentes, con las siguientes características generales:Conjuntos delUniverso deEntradaConjuntos delUniverso deSalidaAlgoritmo deEntrenamientoModelo 1 Modelo 2 Modelo 3 Modelo 49 12 25 19 12 25 1Universos Fijos Universos Fijos Universos Fijos UniversosVariablesTabla 5.8En los numerales siguientes se describen con detalle los cuatro controladoresdiseñados.5.2.2.1.Modelo 1 315.2.2.1.1.Universo de EntradaNúmero de Variables de Entrada: 1Nombre de la Variable de Entrada 1: Entrada30 El orden del sistema típicamente se ignora, sin embargo, se ha buscado unejemplo sencillo de identificación de plantas, por lo tanto aquí se consideraeste dato como conocido.31El archivo correspondiente a este controlador tiene el nombreMO<strong>DE</strong>LO1.DIF


114Universo de Discurso de la Variable Entrada: [-1,1]Número de Valores Lingüísticos para la Variable Entrada: 9Funciones de Pertenencia de la Variable Entrada: ver figura 5.16Difusor de la Variable Entrada: Singlenton.Figura 5.16 Funciones de Pertenencia para las Variable Entrada y Salida,Modelo 15.2.2.1.2.Universo de SalidaNúmero de Variables de Salida: 1Nombre de la Variable de Salida 1: SalidaUniverso de Discurso de la Variable Salida: [-1,1]Número de Valores Lingüísticos para la Variable salida: 9Funciones de Pertenencia de la Variable Control: ver figura 5.16Concresor de la Variable Control: Altura.5.2.2.1.3.Máquina de InferenciaOperador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo5.2.2.1.4.Base de ReglasSe define con el algoritmo de Entrenamiento de Universos Fijos5.2.2.2.Modelo 2 325.2.2.2.1.Universo de Entrada32El archivo correspondiente a este controlador tiene el nombreMO<strong>DE</strong>LO2.DIF


115Número de Variables de Entrada: 1Nombre de la Variable de Entrada 1: EntradaUniverso de Discurso de la Variable Entrada: [-1,1]Número de Valores Lingüísticos para la Variable Entrada: 12Funciones de Pertenencia de la Variable Entrada: ver figura 5.17Difusor de la Variable Entrada: Singlenton.Figura 5.17 Funciones de Pertenencia para las Variable Entrada y Salida,Modelo 25.2.2.2.2.Universo de SalidaNúmero de Variables de Salida: 1Nombre de la Variable de Salida 1: SalidaUniverso de Discurso de la Variable Salida: [-1,1]Número de Valores Lingüísticos para la Variable salida: 12Funciones de Pertenencia de la Variable Control: ver figura 5.17Concresor de la Variable Control: Altura.5.2.2.2.3.Máquina de InferenciaOperador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo5.2.2.2.4.Base de ReglasSe define con el algoritmo de Entrenamiento de Universos Fijos5.2.2.3.Modelo 3 335.2.2.3.1.Universo de Entrada33El archivo correspondiente a este controlador tiene el nombreMO<strong>DE</strong>LO3.DIF


116Número de Variables de Entrada: 1Nombre de la Variable de Entrada 1: EntradaUniverso de Discurso de la Variable Entrada: [-1,1]Número de Valores Lingüísticos para la Variable Entrada: 25Funciones de Pertenencia de la Variable Entrada: ver figura 5.18Difusor de la Variable Entrada: Singlenton.Figura 5.18 Funciones de Pertenencia para las Variable Entrada y Salida,Modelo 35.2.2.3.2.Universo de SalidaNúmero de Variables de Salida: 1Nombre de la Variable de Salida 1: SalidaUniverso de Discurso de la Variable Salida: [-1,1]Número de Valores Lingüísticos para la Variable salida: 25Funciones de Pertenencia de la Variable Control: ver figura 5.16Concresor de la Variable Control: Altura.5.2.2.3.3.Máquina de InferenciaOperador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo5.2.2.3.4.Base de ReglasSe define con el algoritmo de Entrenamiento de Universos Fijos


1175.2.2.4.Modelo 4 345.2.2.4.1.Universo de EntradaNúmero de Variables de Entrada: 1Nombre de la Variable de Entrada 1: EntradaUniverso de Discurso de la Variable Entrada: [-1,1]Número de Valores Lingüísticos para la Variable Entrada: A definir conel algoritmo de Entrenamiento de Universos Variables, tomandocomo modelo el conjunto mostrado en la figura 5.19Difusor de la Variable Entrada: Singlenton.Figura 5.19 Conjunto modelo para las Variable Entrada y Salida, Modelo 45.2.2.4.2.Universo de SalidaNúmero de Variables de Salida: 1Nombre de la Variable de Salida 1: SalidaUniverso de Discurso de la Variable Salida: [-1,1]Número de Valores Lingüísticos para la Variable salida: A definir con elalgoritmo de Entrenamiento de Universos Variables, tomando comomodelo el conjunto mostrado en la figura 5.19Concresor de la Variable Control: Altura.5.2.2.4.3.Máquina de InferenciaOperador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo5.2.2.4.4.Base de Reglas34El archivo correspondiente a este controlador tiene el nombreMO<strong>DE</strong>LO4.DIF


118Se define con el algoritmo de Entrenamiento de Universos Variables5.2.3. Software de simulaciónPara evaluar el comportamiento de los Sistemas de Lógica Difusa diseñadosse implementó un sencillo programa de simulación para ambiente Windows3.1. El programa tiene por nombre I<strong>DE</strong>NTI.EXE, y el código fuente se entregacon el disco que acompaña este texto, y se explica en el numeral 5.2.2.4.I<strong>DE</strong>NTI ofrece al usuario tres opciones de menú distintas: Planta, Modelo eIdentificación, que se detallan a continuación.5.2.3.1.PlantaAl seleccionar la opción Planta, se despliega el cuadro de diálogo que semuestra en la figura 5.20. En ese cuadro de diálogo el usuario podráseleccionar cuál de las dos plantas explicadas en el numeral 5.2.1 deseaidentificar, y especificar los parámetros a,b,c,d, a que hace referencia dichonumeralFigura 5.20 Cuadro de Diálogo Planta5.2.3.2.Modelo


119Al seleccionar la opción Modelo, se despliega el cuadro de diálogo que semuestra en la figura 5.21. En ese cuadro de diálogo el usuario podráseleccionar el tipo de modelo que desea emplear, dentro de los explicados enel numeral 5.2.3Figura 5.21 Cuadro de Diálogo Modelo5.2.3.3.IdentificaciónAl seleccionar la opción Identificación, se despliega el cuadro de diálogo quese muestra en la figura 5.22. En ese cuadro de diálogo el usuario podrávisualizar el comportamiento de la planta y del modelo que seleccionó, asícomo la diferencia (error) entre éstos dos, seleccionando los siguientesparámetros de simulación :1. Datos de Entrenamiento : tamaño del conjunto finito de datos producidospor las ecuaciones [1] y [3] (o [2] y [3]), correspondientes a k=0,1,2,....w,del numeral 5.2.2.1. Datos de Validación : tamaño del conjunto finito de datos con el que secompararán los resultados de la planta y los del modelo1. Número Total de Datos : tamaño de la muestra total de datos disponibles1. Error Máximo : valor absoluto de la máxima diferencia entre los resultadosproducidos por la planta y por el modelo1. Error Acumulado : suma de los valores absolutos de las diferencias entre losresultados producidos por la planta y por el modeloLa escala de las tres gráficas es [-1,1]


120Figura 5.22 Cuadro de Diálogo Identificación5.2.3.4.Código Fuente de I<strong>DE</strong>NTI.EXELa extensión del código fuente empleado para compilar el programaI<strong>DE</strong>NTI.EXE no permitió que fuera incluido en un único archivo. Losarchivos con código fuente empleados fueron los siguientes :identi.cpp : Contiene el cuerpo principal del programaidenti.rc : Contiene el archivo de recursosfuzzy.hpp : Archivo que acompaña a UNFUZZYfuzzy.cpp : Archivo que acompaña a UNFUZZYdif.hpp : Contiene los encabezados de las clases modelo1, modelo2, modelo3 ymodelo4.dif1.cpp : Contiene el constructor de la clase modelo1.dif2.cpp : Contiene el constructor de la clase modelo2.dif3.cpp : Contiene el constructor de la clase modelo3.dif4.cpp : Contiene el constructor de la clase modelo4.De esos archivos, sólo fue necesario digitar pendulo.cpp, y crear pendulo.rc,ya que fuzzy.hpp y fuzzy.cpp se entregan junto con UNFUZZY, en tanto que


121dif.hpp, dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp contienen código que fuecreado con la opción Generar Código de UNFUZZY.El procedimiento para crear los archivos dif.hpp, dif1.cpp, dif2.cpp, dif3.cpp ydif4.cpp fue el siguiente 35 :1. Empleando UNFUZZY, se diseñaron los cuatro Sistemas de Lógica Difusapresentados en el numeral 5.2.2.1. Para cada uno de los cuatro controladores, se empleó la opción GenerarCódigo para generar código C++ ; las clases generadas tienen por nombremodelo1, modelo2, modelo3 y modelo4; El código generado se salvó en losarchivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp.1. De cada uno de los archivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp se retiróla función main(), que se incluye en ellos como ejemplo de utilización.1. De cada uno de los archivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp se tomóel prototipo de las clases modelo1, modelo2, modelo3 y modelo4, y setrasladó a un nuevo archivo dif.hpp1. Se modificó la instrucción #include que originalmente estabaen los archivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp, por la instrucción#include.1. En el archivo dif.hpp se incluyó la instrucción #include5.2.4. ResultadosPara las simulaciones se seleccionaron como parámetros de las acuaciones dela Planta los siguientes valores :a=1b=3c=5d=0.008La figura 5.23 compara los resultados obtenidos con los cuatro modelos,tomando 200 Datos de Entrenamiento y 500 de Validación. La tabla 5.9muestra los errores máximos producidos en cada caso.35 Nótese que es el mismo procedimiento empleado en el ejemplo del PénduloInvertido


122Figura 5.23 Resultados de los cuatro modelosModelo Error Máximo Error AcumuladoModelo 1 0.455 85.624Modelo 2 0.371 51.554Modelo 3 0.299 30.152Modelo 4 0.111 13.383Tabla 5.9Claramente, el cuarto modelo es el que mejor reproduce el comportamiento dela planta. Nótese que éste modelo emplea el algoritmo de entrenamiento deUniversos Variables, lo que hace que el modelo final sea más complejo quelos otros tres 36 . Al emplear el algoritmo de entrenamiento de Universos Fijos,la exactitud del modelo se ve afectada por el diseño previo de los Universos.Para observar el efecto del entrenamiento en el modelo final, la figura 5.24muestra el comportamiento del modelo 4, cuando éste se entrena con 50, 100,150 y 200 datos. La tabla 5.10 muestra los errores de cada caso36 En las simulaciones puede notarse que éste modelo requiere un mayortiempo de cálculo.


123Figura 5.24 Efecto de alterar el número de datos de entrenamientoDatos de Entrenamiento Error Máximo50 0.456 84.718100 0.455 77.951150 0.455 41.071200 0.111 13.383Tabla 5.95.2.5. ConclusionesError AcumuladoComo en el caso del Péndulo Invertido, las simulaciones efectuadas nopretenden ser una exploración exhaustiva de los posibles modelos basados enSistemas de Lógica Difusa que pueden emplearse para modelar la planta delejemplo. Tampoco pretenden ser un estudio riguroso sobre el comportamientode los pocos modelos diseñados. El objetivo principal de este ejemplo es el deilustrar la utilización de UNFUZZY para el diseño e implementación ensoftware de estos Sistemas de Lógica Difusa, que emplean las opciones deentrenamiento mediante los algoritmos presentados en el numeral 1.3.En este sentido, puede concluirse que :1. El código C++ generado por UNFUZZY para los cuatro Sistemas de LógicaDifusa fue suficiente para poder implementarlos en software.


1241. La extensión del código generado por UNFUZZY, más el código escritopara simular la planta, obligó a fraccionar el código total en varios archivos,lo cual es una práctica común en el desarrollo de software.1. El código C++ generado por UNFUZZY incluye las opciones deentrenamiento mediante los algoritmos presentados en el numeral 1.35.3. Predicción de series de tiempoEn forma general, el problema de predecir una serie de tiempo puedeasimilarse al de identificar una planta cuya dinámica es muy compleja, y de lacuál sólo se conocen sus salidas, y no sus entradas, de forma tal que losmodelos posibles sólo pueden incluir las salidas anteriores de la planta parapredecir las salidas futuras.Se ha seleccionado como problema la serie de los caudales medios mensualesdel Río Bogotá medidos en la población de Tocaima 37 (Cundinamarca),suministrados por el I<strong>DE</strong>AM (Instituto de Hidrología, Metereología yEstudios Ambientales), y que se consignan en la Tabla 5.10, y que abarcan 22años (264 meses)I<strong>DE</strong>AM INSTITUTO <strong>DE</strong> HIDROLOGÍA, METEREOLOGÍA Y ESTUDIOSAMBIENTALESVALORES MEDIOS MENSUALES <strong>DE</strong> CAUDALES (m3/seg)LATITUD 0428 N TIPO EST LG DPTO C/MARCA FECHA INST 1965-ABRLONGITUD 7436 W ENTIDAD I<strong>DE</strong>AM MUNICIPIO TOCAIMAELEVACION 0361msnm REGIONAL TOLIMA CORRIENTE BOGOTÁAÑO ENE FEB MAR ABR MAY JUN JUL AGO SEP OCT NOV DIC ANU1974 36.84 56.89 63.17 46.58 47.63 29.98 23.51 21.76 23.32 35.99 56.35 40.35 40.201975 20.59 28.11 38.21 39.39 55.08 34.94 54.89 28.79 32.73 52.35 73.77 81.57 45.041976 31.60 33.90 59.80 87.20 58.30 46.20 57.40 39.20 39.30 71.50 66.10 40.60 52.591977 33.08 28.55 29.76 43.49 34.54 29.22 19.91 16.30 22.00 37.52 77.13 16.12 32.301978 13.22 12.04 14.67 54.91 22.71 31.87 20.26 11.27 16.69 21.83 28.39 19.63 22.2937 Este caudal está afectado no únicamente por la hidrología de la Cuenca delrío, sino también por la regulación que de él efectúa la Empresa de Energía deBogotá en el embalse del Muña, lo que incide en la complejidad del problema.


1251979 15.95 14.64 31.39 33.36 44.33 50.03 22.30 18.11 23.87 74.29 159.9 53.05 45.101980 30.82 40.89 26.83 27.91 25.89 36.92 26.10 23.59 29.65 37.56 37.73 33.36 31.441981 24.95 26.52 22.45 51.47 102.0 52.49 23.39 21.45 21.48 39.23 78.80 34.21 41.541982 43.23 41.56 60.57 141.1 86.30 35.21 27.12 20.43 20.90 32.90 39.92 51.84 50.091983 37.68 35.04 40.53 68.49 54.16 37.12 33.17 26.76 31.88 34.92 42.25 45.03 40.591984 42.22 26.05 18.27 28.73 54.15 41.77 23.44 26.05 30.96 35.11 94.76 46.16 38.971985 18.02 13.30 13.53 30.86 44.59 26.57 23.31 24.57 31.49 54.02 71.17 47.08 33.211986 37.73 49.83 73.90 52.77 55.55 63.75 54.85 43.57 39.84 91.72 87.16 50.72 58.451987 40.60 35.50 34.70 46.30 50.40 35.90 37.10 32.50 30.20 62.40 56.90 44.20 42.231988 32.33 35.38 33.72 39.47 32.09 36.69 40.95 36.32 37.22 48.81 82.45 67.25 43.561989 29.50 42.99 52.44 28.96 42.22 35.58 31.49 28.16 30.67 39.57 41.04 28.59 35.931990 28.73 39.83 30.73 37.57 56.94 35.03 28.64 26.54 24.79 34.10 40.98 51.30 36.271991 36.49 30.49 45.35 60.20 34.10 24.00 27.31 36.25 29.55 28.01 53.96 39.71 37.121992 41.07 42.91 38.95 33.49 29.68 25.12 23.38 33.43 25.83 21.26 32.78 58.44 33.861993 34.85 36.85 24.17 45.23 64.13 35.86 17.59 18.66 24.62 26.57 57.94 27.11 34.471994 32.53 37.01 41.92 52.45 55.01 40.16 37.64 33.93 29.73 51.44 72.76 25.67 42.521995 19.70 17.10 40.10 43.90 47.70 48.90 27.70 41.60 24.70 61.10 38.90 42.40 37.82med 30.99 32.97 37.96 49.72 49.89 37.88 30.98 27.69 28.25 45.10 63.23 42.93 39.80max 43.23 56.89 73.90 141.1 102.0 63.75 57.40 43.57 39.84 91.72 159.9 81.57 159.9min 13.22 12.04 13.53 27.91 22.71 24.00 17.59 11.27 16.69 21.26 28.39 16.12 11.27Tabla 5.105.3.1. Planteamiento del problemaEl problema puede plantearse en los siguientes términos:Se desea diseñar un Sistema de Lógica Difusa que prediga lo másexactamente posible la serie mensual de la tabla 5.10. Para predecir el caudalmedio del mes K el Sistema sólo puede contar con la información disponibleen la tabla hasta el mes K-1.5.3.2. Diseño del Sistema de lógica difusaSe diseñaron cinco modelos basados en lógica difusa, cada uno de ellos concinco entradas (salvo el modelo 5, que utiliza 4 entradas) y una salida,descritas a continuación:Salida :x(k+1) : Predicción del caudal medio del mes k+1,Entradas :


1261. Promedio (k+1,P) : Promedio de los caudales medios anteriores ak+1, con periodicidad P; si P=12, y se quiere predecir el caudal medio deMayo de 1995, esta variable será el promedio de los caudales mensualesmedios de los meses de Mayo hasta antes de Mayo de 1995.2. x(k+1-P) : si P=12, y se quiere predecir el caudal medio de Mayo de1995, esta variable será el caudal medio mensual de Mayo de 1994. El modelo5 no emplea esta variable.3. x(k-1): si se quiere predecir el caudal medio de Mayo de 1995, estavariable será el caudal medio mensual de Abril de 1995.4. x(k-2): si se quiere predecir el caudal medio de Mayo de 1995, estavariable será el caudal medio mensual de Marzo de 1995.5. x(k-3): si se quiere predecir el caudal medio de Mayo de 1995, estavariable será el caudal medio mensual de Febrero de 1995.Conjuntos delUniverso deEntradaConjuntos delUniverso deSalidaUniverso deDiscurso delpromedioUniverso deDiscurso delas demásvariablesAlgoritmo deEntrenamientoModelo 1 Modelo 2 Modelo 3 Modelo 4 Modelo 520 9 9 1 920 9 9 1 925-70(m3/s) 25-70(m3/s) 25-70(m3/s) 25-70(m3/s) 25-70(m3/s)0-180 (m3/s) 0-180 (m3/s) 0-100 (m3/s) 0-180 (m3/s) 0-180 (m3/s)Universos Fijos Universos Fijos UniversosFijosTabla 5.11UniversosVariablesUniversosFijosLos demás parámetros de las variables de entrada y salida son similares a losdel ejemplo de aplicación Identificación de Plantas 385.3.2.1.1.Máquina de InferenciaOperador AND: MínimoOperador de Implicación: MínimoOperador de Composición: MínimoOperador de Unión: Máximo38 Ver numeral 5.2


1275.3.3. Software de simulaciónPara evaluar el comportamiento de los Sistemas de Lógica Difusa diseñadosse implementó un sencillo programa de simulación para ambiente Windows95 o NT. El programa tiene por nombre SERIE.EXE, y el código fuente seentrega con el disco que acompaña este texto, y se explica en el numeral5.3.2.4.SERIE ofrece al usuario tres opciones de menú distintas: Serie, Modelo yPredicción, que se detallan a continuación.5.3.3.1.SerieAl seleccionar la opción Serie, se despliega el cuadro de diálogo que semuestra en la figura 5.25. En ese cuadro de diálogo el usuario podrá excribir laserie (un dato por línea), o leerla desde un archivo de texto. La serie del rioBogotá se encuentra en el archivo RIOBOGOT.TXT. Una vez escritos oleidos los datos, el usuario debe emplear la opción Validar, para comprobar elformato de la serie.Figura 5.25 Cuadro de Diálogo Serie


1285.3.3.2.ModeloAl seleccionar la opción Modelo, se despliega el cuadro de diálogo que semuestra en la figura 5.26. En ese cuadro de diálogo el usuario podráseleccionar el tipo de modelo que desea emplear, dentro de los explicados enel numeral 5.3.3Figura 5.26 Cuadro de Diálogo Modelo5.3.3.3.PredicciónAl seleccionar la opción Predicción, se despliega el cuadro de diálogo que semuestra en la figura 5.27. En ese cuadro de diálogo el usuario podrá visualizarel comportamiento de la serie y del modelo que seleccionó, así como ladiferencia (error) entre éstos dos, seleccionando los siguientes parámetros desimulación :1. Datos de Entrenamiento : tamaño del conjunto finito de datos tomados de laserie1. Datos de Validación : tamaño del conjunto finito de datos con el que secomparararán los resultados de la planta y los del modelo1. Número Total de Datos : tamaño de la muestra total de datos disponibles1. Error Máximo : valor absoluto de la máxima diferencia entre los resultadosproducidos por la planta y por el modeloLa escala de las tres gráficas es [0,100 (m3/s)]


129Figura 5.27 Cuadro de Diálogo Predicción5.3.3.4.Código Fuente de SERIE.EXELa extensión del código fuente empleado para compilar el programaSERIE.EXE no permitió que fuera incluido en un único archivo. El códigoC++ generado por UNFUZZY para implementar el modelo 1 también resultómuy extenso, y debió ser dividido en dos archivos. Los archivos con códigofuente empleados fueron los siguientes :identi.cpp : Contiene el cuerpo principal del programaidenti.rc : Contiene el archivo de recursosfuzzy.hpp : Archivo que acompaña a UNFUZZYfuzzy.cpp : Archivo que acompaña a UNFUZZYdif.hpp : Contiene los encabezados de las clases modelo1, modelo2, modelo3 ymodelo4.dif1.cpp : Contiene parte del constructor de la clase modelo1.dif1a.cpp : Contiene parte del constructor de la clase modelo1.dif2.cpp : Contiene el constructor de la clase modelo2.dif3.cpp : Contiene el constructor de la clase modelo3.dif4.cpp : Contiene el constructor de la clase modelo4.dif5.cpp : Contiene el constructor de la clase modelo5.


130De esos archivos, sólo fue necesario digitar pendulo.cpp, y crear pendulo.rc,ya que fuzzy.hpp y fuzzy.cpp se entregan junto con UNFUZZY, en tanto quedif.hpp, dif1.cpp, dif1a.cpp, dif2.cpp, dif3.cpp y dif4.cpp contienen códigoque fue creado con la opción Generar Código de UNFUZZY.El procedimiento para crear los archivos dif.hpp, dif1.cpp, dif2.cpp, dif3.cpp ydif4.cpp fue el siguiente 39 :1. Empleando UNFUZZY, se diseñaron los cuatro Sistemas de Lógica Difusapresentados en el numeral 5.3.2.1. Para cada uno de los cuatro controladores, se empleó la opción GenerarCódigo para generar código C++ ; las clases generadas tienen por nombremodelo1, modelo2, modelo3, modelo4 y modelo5; El código generado sesalvó en los archivos dif1.cpp, dif2.cpp, dif3.cpp y dif4.cpp.1. De cada uno de los archivos dif1.cpp, dif2.cpp, dif3.cpp , dif4.cpp ydif5.cpp se retiró la función main(), que se incluye en ellos como ejemplode utilización.1. De cada uno de los archivos dif1.cpp, dif2.cpp, dif3.cpp, dif4.cpp y dif5.cppse tomó el prototipo de las clases modelo1, modelo2, modelo3, modelo4 ymodelo5, y se trasladó a un nuevo archivo dif.hpp1. Se modificó la instrucción #include que originalmente estabaen los archivos dif1.cpp, dif2.cpp, dif3.cpp, dif4.cpp y dif54.cpp, por lainstrucción #include.1. En el archivo dif.hpp se incluyó la instrucción #include1. Al compilar el programa el archivo dif1.cpp resultó muy extenso, por locual fue necesario proceder de la siguiente forma1. Se subdividió el constructor de la clase modelo1 en dos funciones: elconstructor mismo y una clase auxiliar adicional(), en la que se copió partedel código del constructor, y que era llamada por éste.1. La clase auxiliar() se escribió en el archivo dif1a.cpp, para hacer que elarchivo dif1.cpp tuviera un tamaño adecuado.1. Se modificó el prototipo de la clase modelo1, en el archivo dif.hpp paraincluir la nueva función auxiliar().39 Nótese que es el mismo procedimiento empleado en el ejemplo del PénduloInvertido y de la Identificación de plantas, hasta el paso 6.


1315.3.4. ResultadosLa figura 5.28 compara los resultados obtenidos con los cuatro modelos,tomando 240 Datos de Entrenamiento (20 años) y 24 de Validación (2 años)definiendo un periodo de 12 meses. La tabla 5.12 muestra los errores máximosproducidos en cada caso.Figura 5.28 Resultados de los cuatro modelosModelo Error Máximo(m3/s)Modelo 1 61.10Modelo 2 46.55Modelo 3 61.10Modelo 4 61.10Modelo 5 33.10Tabla 5.12Claramente, los modelos 2 y 5 son los que mejor reproducen elcomportamiento de la serie.Se efectuó una prueba consistente en cambiar el periodo P que define lasvariables de entrada 1 y 2, cuyo valor fue de 12 para los resultados de la figura5.28. La figura 5.29 y la tabla 5.13 resumen los resultados de esta prueba,sobre el modelo 2.


132Figura 5.29 Efecto de modificar el periodo P sobre el modelo 2Periodo P Error Máximo(m3/s)24 47.7018 30.7412 46.556 47.703 30.37Tabla 5.13Para observar el efecto del entrenamiento en el modelo final, la figura 5.30muestra el comportamiento del modelo 2, para una predicción de 20 años. Adiferencia del entrenamiento utilizado en la Identificación de plantas, en esteejemplo cada nuevo dato se emplea para entrenar el sistema. En la figura 5.30se observa que el error del modelo disminuye (aún cuando no desaparece) paralos últimos datos, debido a que el entrenamiento es mayor para ellos.


133Figura 5.30 Efecto de alterar el número de datos de entrenamiento5.3.5. ConclusionesComo en los casos del Péndulo Invertido y de la Identificación de Plantas, lassimulaciones efectuadas no pretenden ser una exploración exhaustiva de losposibles modelos basados en Sistemas de Lógica Difusa que puedenemplearse para modelar la serie 40 . Tampoco pretenden ser un estudio rigurososobre el comportamiento de los pocos modelos diseñados. El objetivoprincipal de este ejemplo es el de ilustrar la utilización de UNFUZZY para eldiseño e implementación en software de estos Sistemas de Lógica Difusa, queemplean las opciones de entrenamiento mediante los algoritmos presentadosen el numeral 1.3.En este sentido, puede concluirse que :1. El código C++ generado por UNFUZZY para los cuatro Sistemas de LógicaDifusa fue suficiente para poder implementarlos en software.1. La extensión del código generado por UNFUZZY, más el código escritopara simular la planta, obligó a fraccionar el código total en varios archivos,lo cual es una práctica común en el desarrollo de software.1. El código C++ generado por UNFUZZY incluye las opciones deentrenamiento mediante los algoritmos presentados en el numeral 1.340 En realidad debe anotarse que el diseño de este ejemplo hace gala de unaignortancia total en el área de la Hidrología, y por tanto no creo que resistauna crítica seria de los conocedores del tema.


1346. CRÍTICA AL PROYECTO Y CONCLUSIONESEste capítulo final tiene por propósito presentar una visión crítica del proyecto, mirándolo desde una perspectiva más global, alejada de los detalles deimplementación y utilización a los que se dedican los capítulos anteriores. Sepretende con esto proponer trabajos posteriores en el área de Lógica Difusa.6.1. Alcance de UNFUZZYEl objetivo inicial del proyecto 41 era el diseño e implementación de unsoftware que permitiera diseñar Sistemas de Lógica Difusa, y analizar sucomportamiento. UNFUZZY cumple con tales objetivos, y además los supera,ya que incluye dos funciones adicionales que le dan un potencial muchomayor:1. La generación de Código fuente en lenguaje C y C++2. La opción de entrenamiento de Sistemas de Lógica Difusa mediante TablasLa posibilidad de disponer de un código fuente probado permite al usuarioImplementar en software el Sistema de Lógica Difusa diseñado. Dicho de otraforma, no sólo puede analizar el comportamiento del Sistema, sino queademás puede disponer de él para su utilización particular, sin tener quepreocuparse por cuáles son los algoritmos internos del Sistema. El usuariosólo debe utilizar una herramienta gráfica de diseño, y ésta pone en sus manosel código fuente 42 .La opción de entrenar Sistemas de Lógica Difusa amplía el tipo deaplicaciones en los que éstos son utilizables. Los ejemplos de Identificación de41 Véase la propuesta aprobada por el Comité Asesor de la Maestría deAutomatización Industrial42 A manera de referencia, la siguiente información: Para el desarrollo delprograma de predicción de la serie de tiempo del río Bogotá las actividadesinvolucradas requirieron el siguiente tiempo1. Consecución de la serie y digitalización: 5 horas2. Diseño de los modelos con UNFUZZY 30 minutos3. Adecuación del código generado por UNFUZZY 15 minutos4. Diseño e implementación del resto de código 10 horas


135Plantas y Predicción de Series de Tiempo son sólo dos de éstos casos. Vale lapena resaltar que el código C++ que genera UNFUZZY incluye la opción deentrenamiento, y por lo tanto el usuario dispone de ella en su aplicaciónparticular.En forma resumida, pueden destacarse las siguientes características deUNFUZZY:1. Permite el diseño gráfico de los Universos de Entrada y Salida2. Permite seleccionar algoritmos de Difusión, Concreción, Implicación,Composición, Unión-Intersección y operadores AND, dentro de unconjunto amplio de opciones.3. Permite el diseño de Bases de Reglas Completas o Incompletas, como laopción de Incluir Modificadores Lingüísticos.4. Provee herramientas de diseño rápido para los Universos de Entrada ySalida, las variables Lingüísticas y la Base de Reglas5. Permite analizar el comportamiento global del Sistema mediante Gráficos yTablas Entrada-Salida6. Permite analizar el comportamiento del Sistema a entradas particularesmediante la presentación Paso a Paso de los resultados intermedios de cadaAlgoritmo7. Permite entrenar Sistemas de Lógica Difusa mediante el uso de Tablas, através de dos algoritmos diferentes8. Provee el código fuente C y C++ del Sistema diseñado.6.2. Limitaciones de UNFUZZYLa siguiente es una lista de las principales funciones que NO puedenefectuarse con UNFUZZY, y que quizás algún usuario desearía tenerdisponibles 43 . Con UNFUZZY usted no puede:1. Emplear opciones de diseño distintas a las especificadas en el numeral 4.2.2. Trabajar con Conjuntos Difusos Discretos.3. Diseñar Sistemas de Lógica Difusa tipo Takagi-Sugeno 44 .4. Diseñar Sistemas de Lógica Difusa tipo ANFIS 45 .43 Todo software es susceptible de ser mejorado, y más aún las versiones 1.044 En estos sistemas los consecuentes de las reglas no son Valores lingüísticossino funciones de los valores concretos de entrada


1365. Trabajar con Reglas que incluyan operadores OR, NOT, XOR ysentencias 46 .De estas limitaciones quizás la más fuerte es la segunda, ya que los conjuntosdiscretos pueden ser muy útiles en aplicaciones como la de Toma deDecisiones, en las que las variables involucradas pueden ser algunas contínuasy otras discretas.La primera limitación llegará a ser importante en el momento en que aparezcauna metodología de diseño en la que se justifique por qué razón puede serconveniente o no escoger un determinado operador matemático para laImplicación, la Composición, etc. Mientras tanto, nada se gana con disponerde un enorme conjunto de opciones, si no se sabe cuáles son las diferenciasentre ellas. No obstante lo anterior, UNFUZZY incluye los operadores másutilizados y mencionados en la literatura.Los Sistemas tipo Takagi-Sugeno, así como los ANFIS, presentancaracterísticas particulares muy llamativas, que ameritan un trabajo posteriorde investigación antes de intentar incluirlas en una herramienta comoUNFUZZY 47 .Si el usuario desea trabajar con reglas que incluyan operadores distintos alAND, debe convertir tales reglas primero a combinaciones de reglas tipoAND 48 . En este sentido la quinta limitación es más una "molestia" que unalimitación verdadera.6.3. Otras herramientas de diseño45 En estos sistemas parte de su estructura se implementa con una RedNeuronal, lo que brinda otras opciones de Entrenamiento46 Sin embargo, estas reglas pueden escribirse como combinaciones de reglasque sólo incluyen el operador AND, con el que trabaja UNFUZZY47 Además, el programa MatLab incluye una herramienta para trabajo consistemas tipo ANFIS (ver numeral 6.3), que deben estudiarse para evaluar sivale la pena desarrollar un software adicional.48 Véase Mendel, Jerry "Fuzzy Logic Systems for Engineering: A Tutorial",Proceedings of the IEEE, V 83 N 3 Marzo 1995, pag 365.


137Los programas de computador disponibles como herramientas de desarrollopara Lógica Difusa pueden en general clasificarse en los siguientes tresgrupos:1. Programas para aplicaciones específicas: Estos son programasdemostrativos en los que se muestra cómo un Sistema de Lógica Difusapuede resolver uno o más problemas específicos (generalmente de Control).Pueden considerarse como programas de diseño, porque el usuario puedeseleccionar varios parámetros del Sistema, pero no son de aplicabilidadpráctica. Como ejemplo de este grupo está el SCD14 desarrollado en laUniversidad de Granada (España), para mostrar el control del PénduloInvertido y otras dos plantas más.2. Programas para hardware específico: Estos programas permiten diseñarSistemas de Lógica Difusa para implementarlos en algún Hardwareespecífico. Como ejemplo están FuzzyTech, que produce código C paramicrocontroladores de la familia PIC de Microchip, y SieFuzzy, que generaprogramas para ser implementados en PLC's de Siemens.3. Programas de propósito general: En este grupo podría clasificarseUNFUZZY, ya que se trata de programas que no están diseñados para unaaplicación específica, ni para un Hardware específico. Pese a una busquedaintensa a través de Internet, sólo fue posible encontrar un software con estascaracterísticas 49 : la herramienta para Lógica Difusa de MatLab.De acuerdo a lo anterior, parecería conveniente comparar las ventajas ydesventajas de UNFUZZY frente a MatLab. Desafortunadamente lainformación disponible sobre MatLab es sólo parcial 50 , no obstante puedenanotarse como grandes diferencias:1. MatLab emplea Sistemas de Lógica Difusa tipo ANFIS, distintos a losempleados por UNFUZZY, con algoritmos de entrenamiento diferentes.2. Al parecer, MatLab sólo emplea una estrategia de difusión, el Singlenton,mientras que UNFUZZY ofrece otras tres más.49 Está fue una de las principales motivaciones para ejecutar el proyectoUNFUZZY50 El ToolBox de Lógica Difusa ha sido soliicitado por la U.N. para la sala decómputo de Automatización Industrial, pero hasta la fecha no ha llegado, detal manera que sólo se cuenta con la información de catálogos y de algunosdemos.


1383. MatLab es un programa mucho más amplio que UNFUZZY, ya queincorpora muchas otras herramientas matemáticas, y por lo tanto resultasencillo emplear los Sistemas de Lógica Difusa como parte de un sistemamás complejo.6.4. Hacia dónde continuar?Aunque el origen de la Lógica Difusa data del trabajo de Zadeh de 1965 51 , losprogresos alcanzados desde finales de los años 80's hacen pensar que aúnestamos empleando Sistemas de Lógica Difusa de Primera Generación 52 . Eneste sentido, el aporte que puede hacerse a la comunidad tecnológica nacionale internacional es grande, ya que el terreno ofrece vastas zonas donde laexploración efectuada aún es insuficiente.A continuación se señalan algunas de las áreas de trabajo que podríanabordarse desde la perspectiva de la Universidad Nacional de Colombia y suentorno. No deben entenderse las líneas siguientes como un Plan deInvestigación. Todo lo contrario, buscan justificar la necesidad de un Plancoherente de Trabajo que incluya la mayoría de los tópicos allí incluidos.6.4.1. Empleando UNFUZZYUNFUZZY pone a disposición de los usuarios una herramienta de diseño eimplementación de sistemas de Lógica Difusa. Su utilización está abierta a lasdistintas áreas en las que la Lógica Difusa tiene algo que aportar, como porejemplo:1. Control de Sistemas no Lineales2. Modelamiento de Plantas3. Predicción de series4. Toma de decisiones5. Planeamiento estratégico6. Mantenimiento predictivo51 L.A. Zadeh, "Fuzzy Sets", en Informat. Control, Vol 8, 1965, pp 338-35352 Driankov y otros, "An Introduction to Fuzzy Control", Springer Verlag,1993, pag 11,12


1396.4.2. Mejorando UNFUZZYLas versiones posteriores de UNFUZZY deben buscar mejorar esta versiónInicial en los siguientes aspectos:1. Interfaz: Aún cuando se ha buscado diseñar una Interfaz lo más amigableposible, son los usuarios los que deben determinar si ésta es o no adecuada,y sugerir los cambios necesarios2. Diseño de la Base de Reglas: La experiencia del diseñador se plasma en lasreglas, lo que amerita que versiones posteriores incorporen módulos quepermitan capturar dicha experiencia en una mejor forma3. Eliminar (o al menos disminuir) las limitaciones señaladas en el numeral6.26.4.3. Diseño con MicrocontroladoresQuizás la forma más rápida de pasar del diseño de Sistemas de Lógica Difusaen Software a Hardware sea através de los microcontroladores 53 , ya que laUniversidad cuenta con experiencia suficiente para ello. Una evaluación de lasbondades y limitaciones de esta implementación debe orientar trabajosposteriores.6.4.4. Diseño con PLC'sOtra vía rápida consiste en la utilización de las opciones de Lógica Difusa queincorporan algunos PLC's. Por este camino pueden desarrollarse aplicacionessencillas con poco desarrollo de Hardware.6.4.5. Diseño con procesadores difusosExisten en el mercado algunos procesadores que manejan lógica difusa,disponibles ya como un integrado. Los costos de éstos, así como el hecho deque aún están en fases experimentales, hacen que esta opción no sea tan53 Actualmente se desarrolla como proyecto de grado en Ingeniería Eléctricaun trabajo en esta línea.


140atractiva como las otras dos, al menos desde la perspectiva de la UniversidadNacional.6.4.6. Trabajo TeóricoEn este campo las áreas de trabajo son muchas y muy variadas, y casi todasapuntan a resolver el problema principal: Cómo obtener una metodología dediseño adecuada a todas las opciones que ofrece la lógica DifusaDentro de estas áreas podemos enumerar:1. Búsqueda de criterios de Estabilidad.2. Diseño de mejores algoritmos de entrenamiento3. Estudio del efecto de la selección de cada parámetro del Sistema de LógicaDifusa en el desempeño global del mismo.4. Búsqueda de aplicaciones de Lógica Difusa.6.5. Conclusiones FinalesRecogiendo lo dicho hasta este punto, puede concluirse que:1. UNFUZZY es una herramienta para el diseño y la implementación ensoftware de Sistemas de Lógica Difusa como los descritos en el numeral1.2, que incluye la opción de entrenamiento mediante los algoritmosdescritos en el numeral 1.32. La posibilidad de disponer de código fuente para los sistemas diseñados conUNFUZZY hace que la implementación en software de éstos sea rápida ysencilla.3. Las principales limitaciones de UNFUZZY son las reseñadas en el numeral6.24. UNFUZZY es una herramienta generalizada, ya que los Sistemas de LógicaDifusa que se pueden diseñar e implementar con ella son de propósitogeneral y no específico. Prueba de ello son los tres ejemplos de aplicación.5. Mediante los tres ejemplos de aplicación presentados en el capítulo 5 semuestra cómo pueden implementarse en software los Sistemas de LógicaDifusa diseñados con UNFUZZY6. En ninguno de los tres ejemplos de aplicación se efectuó un análisisdetallado de los posibles Sistemas de Lógica Difusa, ni de su


141comportamiento frente a otras posibles soluciones, ya que el objetivo deestos ejemplos era tan sólo el de mostrar la utilización de UNFUZZY.


142BibliografíaÁlvarez, Hernán D. “Control Difuso y Sistemas de Control Inteligentes” en Memorias delSegundo Congreso de la Asociación Colombiana de Automática, Bucaramanga,Colombia, marzo de 1997, pp 331-340Angasana,A. & Passino,K. “Distributed fuzzy control of flexible manufacturing systems”en IEEE Transactions on Control Systems Technology, Vol 2, No.4, dic-94 ,pp 423-435Antasklis, P.J. & Passino, K, “Introduction to intelligent control with high degrees ofautonomy” en An Introduction to Intelligent Control and Autonomous Systems,Kluwer Academic Publishers, 1993, pp 1-26Driankov, Dimiter & otros. “An Introduction to Fuzzy Control” Springer Verlag, Berlin,1993Klir, George & Yuan, Bo. “Fuzzy Sets and Fuzzy Logic” Prentice Hall, New Jersey, 1995Kwong, W. et al. “Expert supervision of fuzzy learning systems for fault tolerant aircraftcontrol” en Proceedings of the IEEE, vol 83, No.3, mar 95, pp 466-483Kwong,W. & Passino, K. “Dynamically focused fuzzy learning control” en IEEETransactions on Systems, Man and Cybernetics - Part B :Cybernetics, Vol 26 No.1,feb 96 pp53-74Laukonen,E. & Passino,K. “Training Fuzzy Systems to perform estimation andidentification”, Engng. Appl. Artif. Intell. Vol 8, No 5, Elsevier Science Ltd. GranBretaña, pp 449-514Laukonen,E. et al. “Fault detection and isolation for an experimental internalcombustion engine via Fuzzy identification” en IEEE Transactions on ControlSystems Technology, Vol 3 No. 3, sep 95, pp 347-355Layne, J. & Passino, K. “Fuzzy model reference learning control for cargo ship steering”en IEEE Control Systems Magazine, Vol 13, No. 6, dic 93, pp 23-24Lee, Chuen Chien. “Fuzzy Logic in Control Systems: Fuzzy Logic Controller-Part I” enIEEE Transactions on Systems, Man, and Cibernetics, V 20, No. 3 Marzo/Abril1990, pp 404-418Lee, Chuen Chien. “Fuzzy Logic in Control Systems: Fuzzy Logic Controller-Part II” enIEEE Transactions on Systems, Man, and Cibernetics, V 20, No. 3 Marzo/Abril1990, pp 419-435


143Lin, Chin-Teng & Lee, George. “Neural Fuzzy Systems. A NeuroFuzzy Synergism toIntelligent Systems” Prentice Hall, 1996López, José F. & otros. “Comparación entre sistemas difusos para el control de unabanda transportadora dentro de un proceso de manufactura flexible” enMemorias del Segundo Congreso de la Asociación Colombiana de Automática,Bucaramanga, Colombia, marzo de 1997, pp 280-288Mendel, Jerry. “Fuzzy Logic Systems for Engineering: A Tutorial” en Procceedingos ofthe IEEE, V 83, No. 3 Marzo 1995, pp 345-377Meneses, Jorge E. & otros, “Control Fuzzy basado en microcontrolador aplicado a laoperación de un válvula remota” en Memorias del Segundo Congreso de laAsociación Colombiana de Automática, Bucaramanga, Colombia, marzo de 1997,pp 175-181Moudgal,V & Passino,K. “Rule-based control for a flexible-link robot” en IEEETransactions on Control Systems Technology, Vol 2, No 4, dic 94, pp 392-405Ordoñez, R. et al. “Stable Multiple-Input Multiple-Output adaptative fuzzy control” enProceedings of the 35 th conference on Decision and Control, Kobe, Japan, dec-96,pp 610-615Passino, Kevin, “Intelligent Control” en The Control Handbook, IEEE pp 994-1001Passino, Kevin, “Fuzzy Control” en The Control Handbook, IEEE pp 1001-1017Passino, Kevin, “Intelligent Control for Autonomous Systems” en IEEE Spectrum, Junio1995 pp 55-62Passino, K. & Lunardhi,A. “Qualitative Analysis of Expert Control systems” en IntelligentControl Systems : Theory and Applications, IEEE press N.Y. 1996Solano, Karim & otros, “Controladores adaptables basados en mecanismos de inferenciaDifusa” en Memorias del Segundo Congreso de la Asociación Colombiana deAutomática, Bucaramanga, Colombia, marzo de 1997, pp 104-113Wang, Li-Xin “ Adaptative Fuzzy Systems and Control. Design and Stability Analysis”Prentice Hall, New Jersey, 1994Wang, Li-Xin “Fuzzy Systemes are Universal Approxximators” en Proceedings of theIEEE International Conference on Fuzzy Systems, San Diego, California 1992, pp1163-1170Wang, Li-Xin & Mendel, Jerry. “Back Propagation Fuzzy System as Nonlinear DynamicSystems Identifiers” en Proceedings of the IEEE International Conference onFuzzy Systems, Sna Diego, California, 1992 pp 1409-1418


144Wang, Li-Xin & Mendel, Jerry. “Fuzzy Basis Functions, Universal Approximation, angOrthogonal Least-Squares Learning” en IEEE Transactions on Neural Networks,Vol 3, No 5, Septiembre 1992, pp 807-814Wang, Li-Xin & Mendel, Jerry. “Generating Fuzzy Rules by Learning from Examples” enProceedings of the IEEE 1991 International Symposium on Intelligent Control 13-15 August, Arlington, Virginia, U.S.A. pp 263-268Yamakawa, T. “A Fuzzy Inference Engine in Nonlinear Analog mode andits applications to a fuzzy logic control” en IEEE Transactions on NeuralNetworks, Mayo 1993.


145TABLA <strong>DE</strong> CONTENIDO0. introducción ________________________________________________________ 11. conceptos básicos ____________________________________________________ 31.1. Conjuntos Difusos y Lógica Difusa _______________________________________31.1.1. T-Normas _______________________________________________________________ 41.1.2. S-Normas _______________________________________________________________ 41.1.3. Complemento ________________________________ ____________________________ 51.1.4. Modificadores____________________________________________________________ 51.1.5. Relación ________________________________ ________________________________ 61.1.6. Composición de Relaciones y Conjuntos _______________________________________ 61.1.7. Implicación ________________________________ ______________________________ 71.1.7.1. Implicación IF-THEN ________________________________________________ 71.1.7.2. Implicación AND ___________________________________________________ 71.2. Estructura de un Sistema de Lógica Difusa ________________________________71.2.1. Variables Lingüísticas______________________________________________________ 81.2.1.1. Nombre de la Variable________________________________________________ 81.2.1.2. Universo de Discurso_________________________________________________ 81.2.1.3. Valores Lingüísticos _________________________________________________ 81.2.2. Difusor ________________________________________________________________ _ 91.2.3. Base de Reglas ___________________________________________________________ 91.2.4. Motor de Inferencia ______________________________________________________ 101.2.5. Concresor ______________________________________________________________ 121.3. Entrenamiento de Sistemas de Lógica Difusa mediante Tablas_______________121.3.1. Algoritmo de entrenamiento con los Universos Fijos_____________________________ 141.3.2. Algoritmo de entrenamiento con los Universos Variables _________________________ 142. unfuzzy - análisis del software _________________________________________ 162.1. Propósito del programa _______________________________________________162.1.1. Diseño de Sistemas de Lógica Difusa_________________________________________ 162.1.2. Simulación y Análisis de Sistemas de Lógica Difusa_____________________________ 182.1.3. Implementación de Sistemas de Lógica Difusa _________________________________ 192.2. Análisis del software__________________________________________________192.2.1. Módulo del Problema _____________________________________________________ 202.2.1.1. Universo de Entrada ________________________________________________ 212.2.1.2. Universo de Salida__________________________________________________ 222.2.1.3. Máquina de Inferencia _______________________________________________ 222.2.1.4. Bloque de Concreción _______________________________________________ 232.2.2. Módulo de Consulta ______________________________________________________ 232.2.3. Módulo de Edición _______________________________________________________ 243. UNFUZZY - diseño del software _______________________________________ 263.1. Clases Semánticas____________________________________________________263.1.1. Clase ConjuntoDifuso y derivadas ___________________________________________ 263.1.2. Clase Difusor y derivadas __________________________________________________ 293.1.3. Clase Norma y derivadas __________________________________________________ 303.1.4. Clase Implicacion y derivadas ______________________________________________ 313.1.5. Clase Variable___________________________________________________________ 333.1.6. Clase Universo __________________________________________________________ 34


1463.1.7. Clase Regla _____________________________________________________________ 353.1.8. Clase MaquinaInferencia __________________________________________________ 363.1.9. Clase Concresor y derivadas________________________________________________ 373.1.10. Clase BloqueConcrecion________________________________ ___________________ 393.2. Clases de Consulta ___________________________________________________413.3. Clases de Edición ____________________________________________________413.4. Otras Clases ________________________________________________________434. unfuzzy - manual del usuario__________________________________________ 444.1. Generalidades _______________________________________________________444.1.1. Requerimientos__________________________________________________________ 444.1.2. Instalación________________________________ ______________________________ 454.1.3. Un primer ejemplo ________________________________ _______________________ 464.1.3.1. Primeros cálculos___________________________________________________ 484.1.3.2. Cálculo Paso a Paso________________________________ _________________ 494.1.3.3. Modificaciones al Universo de Entrada__________________________________ 514.1.3.4. Modificaciones a la Base de Reglas ____________________________________ 534.1.3.5. Modificaciones a la Máquina de Inferencia_______________________________ 554.1.3.6. Generación de Tablas _______________________________________________ 564.1.3.7. Generación de Código Fuente _________________________________________ 574.2. Opciones de Diseño___________________________________________________584.3. Diseño de un Sistema de Lógica Difusa __________________________________624.3.1. Paso 1 : Diseño del Universo de Entrada ______________________________________ 634.3.1.1. Autodefinición de Universo Recto: _____________________________________ 644.3.1.2. Autodefinición de Universo Curvo:_____________________________________ 654.3.1.3. Definición de cada Variable Lingüística _________________________________ 654.3.2. Paso 2: Diseño del Universo de Salida: _______________________________________ 714.3.2.1. Autodefinición de Universos Rectos o Curvos ____________________________ 714.3.2.2. Intervalos de Evaluación ________________________________ _____________ 724.3.2.3. Concresores en lugar de Difusores _____________________________________ 724.3.3. Paso 3: Diseño de la Base de Reglas _________________________________________ 724.3.3.1. Definición Rápida __________________________________________________ 724.3.3.2. Definición de Cada Regla ____________________________________________ 744.3.4. Paso 4: Diseño del Motor de Inferencia _______________________________________ 774.3.5. Paso 5: Comentario Descriptivo ________________________________ _____________ 784.4. Análisis e implementación de un Sistema de Lógica Difusa __________________794.4.1. Cálculo de Salidas________________________________________________________ 794.4.2. Cálculo Paso a Paso ________________________________ ______________________ 804.4.3. Función de Transferencia __________________________________________________ 824.4.3.1. Selección de Entrada ________________________________________________ 834.4.3.2. Selección de Salida _________________________________________________ 834.4.3.3. Entradas fijas ______________________________________________________ 834.4.3.4. Calcular __________________________________________________________ 844.4.3.5. Limpiar __________________________________________________________ 844.4.4. Generación de Tablas Entrada-Salida_________________________________________ 844.4.5. Generación de Código Fuente_______________________________________________ 854.5. Entrenamiento de un Sistema de Lógica Difusa ___________________________864.6. Utilización del Código Fuente generado por UNFUZZY ____________________884.6.1. Código C_______________________________________________________________ 894.6.1.1. Estructuras y variables globales: _______________________________________ 894.6.1.2. funciones: ________________________________________________________ 90


1474.6.2. Código C++ ____________________________________________________________ 905. unfuzzy - ejemplos de aplicacion _______________________________________ 925.1. Controlador difuso para el péndulo invertido _____________________________925.1.1. Planteamiento del problema ________________________________________________ 925.1.2. Diseño del controlador difuso_______________________________________________ 955.1.2.1. Controlador 1______________________________________________________ 955.1.2.2. Controlador 2______________________________________________________ 975.1.2.3. Controlador 3______________________________________________________ 995.1.2.4. Controlador 4_____________________________________________________ 1025.1.3. Software de simulación________________________________ ___________________ 1045.1.3.1. Planta ___________________________________________________________ 1045.1.3.2. Controlador ______________________________________________________ 1055.1.3.3. Simulador _______________________________________________________ 1065.1.3.4. Código Fuente de PENDULO.EXE____________________________________ 1075.1.4. Resultados_____________________________________________________________ 1085.1.4.1. Variación de la Escala de Fuerza______________________________________ 1105.1.4.2. Variación del Intervalo de Aplicación de la Fuerza________________________ 1115.1.5. Conclusiones___________________________________________________________ 1115.2. Identificación de plantas _____________________________________________1125.2.1. Planteamiento del problema _______________________________________________ 1125.2.2. Diseño del Sistema de lógica difusa _________________________________________ 1135.2.2.1. Modelo 1 ________________________________________________________ 1135.2.2.2. Modelo 2 ________________________________________________________ 1145.2.2.3. Modelo 3 ________________________________________________________ 1155.2.2.4. Modelo 4 ________________________________________________________ 1175.2.3. Software de simulación________________________________ ___________________ 1185.2.3.1. Planta ___________________________________________________________ 1185.2.3.2. Modelo__________________________________________________________ 1185.2.3.3. Identificación________________________________ _____________________ 1195.2.3.4. Código Fuente de I<strong>DE</strong>NTI.EXE ______________________________________ 1205.2.4. Resultados_____________________________________________________________ 1215.2.5. Conclusiones___________________________________________________________ 1235.3. Predicción de series de tiempo_________________________________________1245.3.1. Planteamiento del problema _______________________________________________ 1255.3.2. Diseño del Sistema de lógica difusa _________________________________________ 1255.3.3. Software de simulación________________________________ ___________________ 1275.3.3.1. Serie____________________________________________________________ 1275.3.3.2. Modelo__________________________________________________________ 1285.3.3.3. Predicción _______________________________________________________ 1285.3.3.4. Código Fuente de SERIE.EXE _______________________________________ 1295.3.4. Resultados_____________________________________________________________ 1315.3.5. Conclusiones___________________________________________________________ 1336. Crítica al Proyecto y Conclusiones ____________________________________ 1346.1. Alcance de UNFUZZY _______________________________________________1346.2. Limitaciones de UNFUZZY___________________________________________1356.3. Otras herramientas de diseño _________________________________________1366.4. Hacia dónde continuar? ______________________________________________1386.4.1. Empleando UNFUZZY___________________________________________________ 1386.4.2. Mejorando UNFUZZY ___________________________________________________ 1396.4.3. Diseño con Microcontroladores ____________________________________________ 139


1486.4.4. Diseño con PLC's _______________________________________________________ 1396.4.5. Diseño con procesadores difusos ___________________________________________ 1396.4.6. Trabajo Teórico ________________________________________________________ 1406.5. Conclusiones Finales_________________________________________________140


149LISTA <strong>DE</strong> FIGURASFigura 1.1 Funciones de Pertenencia________________________________________________________ 4Figura 1.2 Sistema de Lógica Difusa ________________________________ ________________________ 8Figura 1.3 Valores Lingüísticos ____________________________________________________________ 9Figura 1.4Difusor________________________________________________________________ _______ 9Figura 1.5 Máquina de Inferencia _________________________________________________________ 10Figura 1.6 Concresor ________________________________________________________________ ___ 12Figura 2.1 Estructura del programa ________________________________ _______________________ 20Figura 2.2 Módulo del problema ________________________________ __________________________ 20Figura 2.3 Universo ________________________________ ________________________________ ____ 21Figura 2.4 Variable Lingüística ________________________________ ___________________________ 21Figura 2.5 Valor Lingüístico _____________________________________________________________ 22Figura 2.6 Máquina de Inferencia _________________________________________________________ 22Figura 2.7 Regla________________________________________________________________ _______ 23Figura 2.8 Concresor ________________________________________________________________ ___ 23Figura 2.9 Módulo de Consulta ________________________________ ___________________________ 24Figura 2.10 Módulo de Edición ________________________________ ___________________________ 25Figura 4.1 Ícono de UNFUZZY ___________________________________________________________ 45Figura 4.2 Ventana de UNFUZZY _________________________________________________________ 46Figura 4.3 Ventana de Trabajo - Archivo EJEMPLO.DIF ______________________________________ 47Figura 4.4 Barra de Herramientas de UNFUZZY _____________________________________________ 48Figura 4.5 Cuadro de Diálogo Calcular ____________________________________________________ 49Figura 4.6 Cuadro de Diálogo Calcular Paso A Paso__________________________________________ 51Figura 4.7 Cuadro de Diálogo Definir Variable de Entrada_____________________________________ 53Figura 4.8 Cuadro de Diálogo Definir Base de Reglas _________________________________________ 54Figura 4.9 Cuadro de Diálogo ________________________________ ____________________________ 55Figura 4.10 Cuadro de Diálogo Generar Tabla ______________________________________________ 56Figura 4.11 Cuadro de Diálogo Generar Código _____________________________________________ 57Figura 4.12 Ventana de UNFUZZY para un Nuevo Sistema de Lógica Difusa _______________________ 63Figura 4.13 Cuadro de Diálogo Autodefinición de Universos____________________________________ 64Figura 4.14 Cuadro de Diálogo Definir Variable de Entrada________________________________ ____ 66Figura 4.15 Cuadro de Diálogo Definción de Variable_________________________________________ 67Figura 4.16 Cuadro de Diálogo Definir Difusor ______________________________________________ 68Figura 4.17 Cuadro de Diálogo Puntos de Evaluación _________________________________________ 69Figura 4.18 Cuadro de Diálogo Insertar Conjunto ____________________________________________ 70Figura 4.19 Cuadro de Diálogo Autodefinición de Variables ____________________________________ 71Figura 4.20 Cuadro de Diálogo Definición Rápida de Reglas ___________________________________ 73Figura 4.21 Cuadro de Diálogo Definición de Reglas__________________________________________ 75Figura 4.22 Cuadro de Diálogo Ir A...______________________________________________________ 76Figura 4.23 Cuadro de Diálogo Opciones Matemáticas ________________________________________ 78Figura 4.24 Cuadro de Diálogo Calcular ___________________________________________________ 80Figura 4.25 Cuadro de Diálogo Calcular Paso A Paso_________________________________________ 82Figura 4.26 Cuadro de Diálogo Función de Transferencia________________________________ ______ 83Figura 4.27 Cuadro de Diálogo Generar Tabla ______________________________________________ 85Figura 4.28 Cuadro de Diálogo Generar Código _____________________________________________ 86Figura 4.29 Cuadro de Diálogo Entrenamiento_______________________________________________ 87Figura 5.1 Péndulo Invertido _____________________________________________________________ 93Figura 5.2 Modelo del péndulo ________________________________ ___________________________ 93Figura 5.3 Funciones de Pertenencia para la Variable Ángulo, Controladores 1 y 2__________________ 96Figura 5.4 Funciones de Pertenencia para la Variable Control, Controladores 1 y 2 _________________ 96Figura 5.5 Relación Entrada-Salida Controlador 1____________________________________________ 97


150Figura 5.6 Relación Entrada-Salida Controlador 1____________________________________________ 99Figura 5.7 Funciones de Pertenencia para la Variable Ángulo, Controladores 3 y 4__________________ 99Figura 5.8 Funciones de Pertenencia para la Variable Delta Ángulo_____________________________ 100Figura 5.9 Funciones de Pertenencia para la Variable Control, Controladores 3 y 4 ________________ 100Figura 5.10 Relación Entrada-Salida Controlador 3__________________________________________ 102Figura 5.11 Relación Entrada-Salida Controlador 4__________________________________________ 104Figura 5.12 Cuadro de Diálogo Planta ____________________________________________________ 105Figura 5.13 Cuadro de Diálogo Controlador _______________________________________________ 106Figura 5.14 Cuadro de Diálogo Simulador _________________________________________________ 107Figura 5.15 Comportamiento de la Planta con distintos controladores ___________________________ 110Figura 5.16 Funciones de Pertenencia para las Variable Entrada y Salida, Modelo 1________________ 114Figura 5.17 Funciones de Pertenencia para las Variable Entrada y Salida, Modelo 2________________ 115Figura 5.18 Funciones de Pertenencia para las Variable Entrada y Salida, Modelo 3________________ 116Figura 5.19 Conjunto modelo para las Variable Entrada y Salida, Modelo 4_______________________ 117Figura 5.20 Cuadro de Diálogo Planta ____________________________________________________ 118Figura 5.21 Cuadro de Diálogo Modelo ___________________________________________________ 119Figura 5.22 Cuadro de Diálogo Identificación ______________________________________________ 120Figura 5.23 Resultados de los cuatro modelos_______________________________________________ 122Figura 5.24 Efecto de alterar el número de datos de entrenamiento ______________________________ 123Figura 5.25 Cuadro de Diálogo Serie _____________________________________________________ 127Figura 5.26 Cuadro de Diálogo Modelo ___________________________________________________ 128Figura 5.27 Cuadro de Diálogo Predicción_________________________________________________ 129Figura 5.28 Resultados de los cuatro modelos_______________________________________________ 131Figura 5.29 Efecto de modificar el periodo P sobre el modelo 2_________________________________ 132Figura 5.30 Efecto de alterar el número de datos de entrenamiento ______________________________ 133

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!