En este video, vamos a ilustrar cómo pueden ayudarnos los algoritmos genéticos al diseño de los sistemas basados en reglas. Es una aplicación del aprendizaje de máquina, lo que estamos ahora es intentando optimizar un diseño que tenemos de un sistema para mejorar ese desempeño. Mejorar en el sentido de hacer mejor una aproximación de una función. Entonces, recordemos nuestros problema de aproximación de funciones. Hay una función f de x, y yo lo que tengo son datos para construir un sistema basado en reglas que me ayude a imitar ese comportamiento de la función. Y hay una forma de determinar qué tan bien o qué tan mal lo estoy haciendo, que es el error que cometo a la hora de utilizar mi sistema basado en reglas. Ese es el objetivo de diseño, disminuir el error. La función objetivo es entonces el error y el propósito es disminuir ese error, minimizarlo. Lo que necesitamos ahora es modificar en algo el diseño de un sistema basado en reglas. Vamos a cambiar unos parámetros del sistema. Necesitamos definir entonces ahora una colección de datos con los que define nuestro sistema, que vamos a ir ajustando para ver si el sistema se comporta mejor. Esos datos que vamos a ajustar serán los parámetros de diseño, los llamaremos tetha1, tetha2, etcétera, y tetha será un vector que contiene esos parámetros de diseño. Para ilustrarlo, vamos a ver cómo funcionaría un algoritmo de mejoramiento que tuviéramos a nuestra disposición. Ese algoritmo de mejoramiento recibiría unos parámetros de diseño y, de alguna manera, logra entregarnos unos mejores parámetros de diseño. Hay muchas heurísticas que lo hacen, los algoritmos genéticos son una de esas. Pero las heurísticas necesitan que nosotros le digamos qué es lo que hay que mejorar. Nosotros tenemos que establecer cuál es la función objetivo. En nuestro caso, la función objetivo, you lo dijimos, es el error que se comete al aproximar una función. Y ese error depende de los parámetros de diseño. Para calcular, además, ese error, tenemos unos ejemplos de comportamiento. Vamos a utilizar esos ejemplos de comportamiento para calcular la función objetivo y el algoritmo de entrenamiento tiene que alimentarse de alguna manera de esa función objetivo. Esto lo metemos en un ciclo de mejoramiento para que en cada iteración de ese ciclo obtengamos mejores parámetros, con algún criterio para parar. Por ejemplo, you el mejoramiento es insignificante, entonces hemos terminado. O hemos estado muchas veces iterando, terminemos por un número de paradas. Vamos a mostrar dos ejemplos de esta idea del uso de heurísticas para mejorar los sistemas basados en reglas. En este video, presentaremos el primero. Vamos a ajustar modificadores lingüísticos y en un segundo video haremos un ejercicio distinto, más ambicioso, que son los modificadores lingüísticos. Aprovechemos para presentar ese concepto. Nuestros sistemas basados en reglas requieren el diseño de variables lingüísticas, requieren el diseño de una base de reglas, requieren la selección de unos operadores matemáticos, pero todavía no hemos hablado de esos modificadores lingüísticos. Son unos números que nos van a ayudar a ajustar el desempeño de nuestro sistema. Para eso, imaginemos un sistema de múltiples entradas y el difusor tiene la tarea de generar distintos conjuntos difusos para cada una de las entradas. Y el paso siguiente, una vez tenemos los conjuntos difusos, es hacer la operación AND de los grados de pertenencia como tal. Los modificadores lingüísticos son unos exponentes que adicionamos a este proceso. Normalmente utilizamos el valor 1, que es lo mismo que no hacer nada. Elevar a la 1 es no cambiar el dato. Pero imaginen ustedes si ahora cada uno de los grados de pertenencia los elevamos por algún número. Eso cambia el valor numérico y podemos estar ajustando el desempeño de nuestro sistema cambiando adecuadamente cada uno de esos valores. ¿Pero qué efecto tiene elevar a la determinada potencia una función de pertenencia? ¿Cómo cambian esas funciones de pertenencia? Imaginen una función triangular, que es la que está en el centro de esta diapositiva. Es como tomar esa función y elevarla a la alguna cosa. Si la elevo a la 1, no la he cambiado para nada y lo que tengo es el valor que está en la mitad de la transparencia. En la parte superior, he elevado a números menores que 1 y en la parte inferior, a números mayores que 1. El efecto de elevar a valores menores es expandir la función de pertenencia mientras que se contrae si elevo a valores mayores que 1. Ese es el cambio matemático. Hay algunos autores que interpretan esto en términos lingüísticos. Y al comprimir la función de pertenencia, lo interpretan como que es una situación más restrictiva y al expandir, una situación menos restrictiva y, por tanto, sugieren utilizar adverbios como muy y poco para ilustrar el efecto del modificador lingüístico. Yo en particular creo que al menos en castellano el uso de esos adverbios no representa lo que entendemos por poco o por muy, entonces no los sugiero. Bueno, lo que tenemos entonces ahora entre manos es la pregunta, ¿cuáles serán los mejores modificadores lingüísticos para poder aproximar una determinada función? Y vamos a ilustrarlo con esta función de ejemplo. La función la he tomado del texto clásico de [INAUDIBLE], quien fue además quien propuso el método de universos fijos. Entonces, la vamos a utilizar. Es una combinación de tres sinusoidales de frecuencias distintas. Y vamos a intentar aproximar nuestro sistema teniendo una colección de 1000 ejemplos de comportamiento. Tenemos 1000 datos. Los datos los hemos obtenido porque hemos puesto en la entrada una función x de k, que también varía sinusoidalmente. Esta es la curva entrada-salida de esa función que tiene tres sinusoides. Es la que queremos encontrar con nuestro sistema basado en reglas. Y vamos a ayudarnos de algoritmos genéticos para encontrarlo. Ese es el plan. Lo primero que vamos a hacer es encontrar las reglas con el algoritmo de universos fijos y vamos a utilizar tres etiquetas a la entrada, tres etiquetas a la salida. Y una definición estándar de todos los demás parámetros de diseño. Lo que se encuentra es lo que está en este momento dibujado. La curva punteada es la deseada, yo quiero esa curva entrada-salida. La que encontré con el sistema basado en reglas utilizando entrenamiento de universos fijos es la que está en azul. Está lejos de ser la deseada. Y ahora apliquemos algoritmos genéticos para ver si ajustando los modificadores logramos acercarnos a esa función deseada. El resultado de aplicar algoritmos genéticos se muestra en rojo. Y he graficado el error que se va a cometiendo en esa estimación conforme va avanzando el algoritmo genético, y el error va disminuyendo. Va disminuyendo y al final el resultado todavía está lejos de la función que queremos aproximar. Mejoró pero todavía estamos lejos. Recordamos que los sistemas basados en reglas son interpoladores y que para poder aproximar bien una función, necesitamos un número suficiente de reglas. Eso significa ampliar el número de etiquetas para poder tener más reglas de comportamiento. Entonces, en lugar de tres, utilicemos cinco. En azul está el comportamiento que nos arroja universos fijos y ahora vamos a aplicar algoritmos genéticos. Y bueno, mejora en algo pero todavía estamos lejos. Entonces, probemos con más etiquetas. Vamos a utilizar siete etiquetas a la entrada, siete etiquetas a la salida, y ahora por lo menos you logramos representar ese comportamiento cambiante a la altura más o menos de -0.5 y 0.5. Aplicamos algoritmos genéticos y nos vamos acercando cada vez más a la función deseada. Como esto va bien, entonces aumentemos el número de etiquetas. Vámonos a nueve etiquetas. Tenemos el comportamiento que arroja universos fijos y ahora lo optimizamos con algoritmos genéticos, y nos vamos acercando cada vez más a la función deseada. Demos un salto, vámonos con 25 etiquetas. Y ahora aplicamos algoritmos genéticos sobre esas 25 etiquetas y cada vez tenemos una mejor aproximación. Por supuesto que podríamos probar otros cambios en el sistema basado en reglas, pero esto es únicamente una forma de ilustrar el impacto que puede tener una heurística, como la de los algoritmos genéticos, para mejorar el desempeño de nuestros sistemas. En un segundo video, vamos a ser más ambiciosos, vamos a querer diseñar más cosas, no solo los modificadores lingüísticos. you habrá un tercer video de acceso opcional en donde mostramos cómo hicimos la implementación en software para lograr esta optimización con algoritmos genéticos. Gracias.