Desarrollos Inteligentes Algoritmos Genéticos CAPÍTULO 3 ALGORITMOS GENÉTICOS “Y creó Dios al ser humano a su imagen, a imagen de Dios los creó, varón y mujer los creó, y los bendijo diciéndoles: Crezcan y multiplíquense..” Génesis 1.27. “A esta conservación de las variaciones y diferencias individualmente favorables y a la destrucción de las que son perjudiciales, la he llamado selección natural o supervivencia de los más aptos” Charles Darwin. Objetivo: El estudiante comprenderá los conceptos fundamentales de algoritmos genéticos, así como sus aplicaciones. 1 Desarrollos Inteligentes Algoritmos Genéticos 3.1 Fundamentos de genética y evolución. Una manera de ubicar la técnica de los algoritmos genéticos puede ser en el campo de la computación bio-inspirada (Mateos, 2003), la cual se basa en establecer analogías con sistemas naturales o sociales para diseñar métodos heurísticos no determinísticos de “búsqueda”, de “aprendizaje”, de imitación de “comportamiento”, etc. Los algoritmos bio-inpirados (ABs) permiten resolver problemas modelando un fenómeno de la naturaleza, presentan con frecuencia una estructura paralela (múltiples agentes), y son adaptativos (tienen realimentación con el entorno). Algunos modelos de computación bio-inspirada son: - Algoritmos evolutivos - Redes neuronales - Algoritmos inmunológicos - Algoritmos basados en inteligencia de enjambres La computación evolutiva es la rama de la inteligencia artificial que engloba a todas aquellas técnicas de resolución de problemas basadas en la evolución de las especies y la supervivencia del más apto, parte del hecho observado en la naturaleza en que los seres vivos presentan una capacidad de resolver los problemas de supervivencia mediante el mecanismo de la evolución natural, la cual se produce casi en la generalidad como consecuencia de dos procesos primarios: la selección natural y la reproducción (cruce). En la computación evolutiva encontramos a los algoritmos genéticos (genetic algorithms), las estrategias evolutivas (evolution strategies) y la programación evolutiva (evolutionary programming) entre otros. 2 Desarrollos Inteligentes Algoritmos Genéticos Los algoritmos genéticos (AGs), se basan en el proceso genético de los seres vivos, por lo cual resulta conveniente revisar algunos aspectos fundamentales de la evolución y la genética necesarios para clarificar los principios de los AGs. Se considera que la evolución biológica es una derivación de las especies de organismos vivientes, de otras ya existentes, a través de un proceso de cambio más o menos gradual y continuo. (http://www.molwick.com/es/evolution/140-genetica-evolucion.html). La teoría de la evolución biológica en su forma macroscópica ( es decir de los seres vivos como el hombre) que sirve como base para los AGs es la Darwinista, considera como motor de la evolución la adaptación de los seres al medio ambiente, derivado del efecto combinado de la selección natural y de las mutaciones aleatorias. Casi todas las especies están formadas por una o más poblaciones de individuos que se cruzan entre sí, formando una comunidad de intercambio de material genético (genes). En el interior de esas poblaciones se da el hecho de que ciertos individuos dejan más descendientes que otros, lo que implica que sus genes o alelos estarán mejor representados en la siguiente generación, en conjunto habrá ocurrido un cambio generacional en la frecuencia de aparición de los genes, es decir una evolución. ¿Qué procesos hacen que unos alelos cambien de frecuencia entre generaciones?, esos son los factores de evolución como la mutación, la deriva genética, la migración y la selección natural. (http://biologia.uab.es/divulgacio/genpob.html#factores) La mutación es un cambio estable y heredable en el material genético, altera la secuencia del ADN introduciendo nuevas variantes y aumentando la diversidad de los genes, la tasa de mutación es la frecuencia en la que se producen nuevas mutaciones en ese gen en cada generación, una alta tasa de mutación implica un mayor potencial de adaptación a un cierto cambio ambiental, pues permite explorar más variantes genéticas aumentando la probabilidad de obtener la 3 Desarrollos Inteligentes Algoritmos Genéticos variante más adecuada para ese nuevo ambiente. Las mutaciones en sí no tienen dirección alguna en relación al cambio, se pueden considerar por ejemplo como la alteración al azar de una letra por otra en un texto. Cada especie tiene una tasa de mutación propia que ha sido establecida por la selección natural, para que la especie pueda enfrentar de una mejor manera los compromisos contrapuestos de estabilidad- cambio que le impone su ambiente. Para una cierta población, en cada generación se produce un sorteo de genes durante la transmisión de gametos de los padres a los hijos conocida como deriva genética, el que un individuo de la nueva generación posea un alelo u otro es una cuestión de azar, durante este proceso cambiante bien podría suceder que un tipo de alelo no se transmita de una generación a otra, esto produciría una pérdida definitiva de ese alelo, lo cual constituye un efecto contrario a la mutación. El intercambio de individuos de una población a otra constituye la migración de genes entre dos poblaciones, integrando así otro factor de cambio genético. La selección natural es la reproducción diferencial de unas variantes genéticas respecto de otras, se puede establecer como el proceso que resulta del cumplimiento de las tres condiciones siguientes: (1) variación fenotípica entre los individuos de una población, (2) supervivencia o reproducción diferencial asociada a la variación, y (3) herencia de la variación. Esto se puede clarificar mediante un ejemplo, suponga que hay una población de polillas cuyos miembros pueden ser de color oscuro o claro, hay por tanto variación fenotípica, el fenotipo es el conjunto de características que determinan a un individuo en particular, a la información que contiene el fenotipo se denomina genotipo. Al seguir a ambos tipos de polilla a lo largo de su vida, se ve que en promedio las formas oscuras dejan más descendientes que las claras, es decir que tienen mayor éxito reproductor que las claras lo que constituye la segunda condición. Pero esta ventaja de la forma oscura no tendría ninguna trascendencia 4 Desarrollos Inteligentes Algoritmos Genéticos si la variante oscura no fuera hereditaria, por lo cual es necesario agregar la tercera condición que es la herencia. 3.2 Fundamentos de algoritmos genéticos. Los principios básicos de los algoritmos genéticos fueron establecidos por J. Holland en 1975, son métodos adaptivos que pueden usarse para resolver diferentes tipos de problemas como pueden ser los de búsqueda y optimización. Su operación esta basada en los procesos genéticos de la evolución de las especies naturales, según se vio en la sección anterior, utilizan una analogía en su accionar con estos, a continuación se describirá con mayor detalle esta correspondencia. (http://www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/temageneticos.pdf) En la naturaleza se pueden observar poblaciones de individuos que compiten entre sí en la búsqueda de recursos, como son el agua, la comida, y un territorio, tratan de preservarse en un ambiente cambiante, y para ello se reproducen produciendo así una nueva generación a partir de la población actual. Los individuos que tienen más éxito en sobrevivir y atraer compañeros, tienen una mayor probabilidad de generar un mayor número de descendientes, la combinación entre buenas características de los ancestros producirá individuos que se adapten en forma más eficiente al medio ambiente, produciendo así la evolución de la población con individuos mejor preparados para superar los cambios que llegase a presentar el medio en que viven. De esta manera, las especies evolucionan logrando obtener unas características (genes) que permiten a los organismos adaptarse mejor al entorno en que viven. En la técnica de la solución de problemas mediante AGs, de forma muy similar a la naturaleza, se trabaja con una población de individuos, cada uno de los cuales representa una solución para el problema a resolver, se tiene una función de efectividad o rendimiento que permite evaluar a cada individuo en relación con la bondad de esa solución, en la evolución biológica esto equivaldría al grado que tiene un organismo para competir por un recurso o bien para adaptarse 5 Desarrollos Inteligentes Algoritmos Genéticos a un medio. Cuanto mejor sea la evaluación de un individuo según su función de efectividad, mayor deberá ser la probabilidad de ser seleccionado para reproducirse, de manera similar a la selección natural, cruzando material genético con otro individuo seleccionado de igual forma, emulando así la deriva genética en organismos vivos. Como resultado de este cruce se obtienen descendientes que comparten algunas de las características de sus padres (herencia), conformando así individuos que integrarán una nueva generación. Obviamente que los individuos que observan un valor bajo en su evaluación, tendrán una probabilidad también baja de ser seleccionados para la reproducción, sin embargo podrán ser seleccionados aunque con menos frecuencia, ya que el material genético que contienen pudiera ser una parte importante de una buena solución y no debiera perderse. Continuando con el proceso descrito anteriormente, se produce una nueva población, la cual sustituye a la anterior conformando otra generación, la que se espera la integren individuos o soluciones con características mejores. A lo largo de las generaciones, se van mejorando las características de la población cuyos individuos representan diferentes alternativas de solución, explorando así el espacio solución, acercándose cada vez más a una óptima. Si a medida que se avanza en el proceso de operación de un algoritmo genético, se tiene que la población no mejora, pudiera ser necesario aplicar mutación o migración, la primera mediante la modificación aleatoria de los valores de algunas características (genes) de los individuos, la segunda permitiendo de alguna manera que individuos de otras poblaciones reemplacen a algunos de la población actual. Es conveniente destacar el hecho de que independientemente de que se degenere o no la población se puede aplicar sistemáticamente los dos últimos factores de evolución mencionados. No se garantiza que un algoritmo genético encuentre la solución óptima de un problema, sin embargo de acuerdo a la experiencia, se obtienen soluciones con cierto grado de acercamiento a la óptima en un tiempo razonablemente 6 Desarrollos Inteligentes Algoritmos Genéticos aceptable, sobre todo para aquellos problemas en los que no se tienen métodos específicos de solución. Los algoritmos genéticos codifican las posibles soluciones en estructuras llamadas cromosomas, que representan el material genético de un individuo, es necesario un método que permita obtener ese código, de tal manera que pueda ser procesada la información genética en una computadora, es común utilizar secuencias de dígitos binarios para representar los cromosomas, en donde el valor de cada dígito es la información de una característica de la solución. Otro método consiste en usar cadenas de números enteros, ó decimales en donde cada posición representa un aspecto particular de la solución, así mismo se pueden utilizar cadenas de letras. Mediante la aplicación de un conjunto de operadores genéticos sobre la población se va refinando gradualmente la solución hasta alcanzar un resultado que cumpla con las condiciones requeridas. Los AGs se diferencian de otros algoritmos de optimización o búsqueda en cuatro aspectos (Goldberg David E., 1989): 1. Trabajan con la codificación del conjunto de parámetros, no con los parámetros mismos. 2. Manejan una población de puntos solución, no un solo punto. 3. Utilizan información de eficiencia (función objetivo), no derivadas o conocimiento auxiliar. 4 Usan reglas de transición probabilísticas, no determinísticas. 7 Desarrollos Inteligentes Algoritmos Genéticos 3.3 Descripción de un algoritmo genético. Hasta ahora se ha establecido un conjunto de fundamentos o principios de los algoritmos genéticos, que permiten crear un modelo conceptual de ellos, a efecto de estar en posibilidad de comprender su actuación o proceso, siendo ahora necesario entrar a un nivel mayor de detalle para su implementación computacional, en la presente sección se aborda esta situación. La mejor manera para describir un algoritmo genético es utilizando un modelo general, que incluya los pasos y sus estructuras de control principales, al cual se le denomina algoritmo genético canónico, como se ilustra en la figura 3.3.1. Figura 3.3.1 Algoritmo genético canónico 8 Desarrollos Inteligentes Algoritmos Genéticos El primer paso en la aplicación de un AG consiste en la generación de una población inicial. En general esta población se genera de manera aleatoria, y el tamaño de dicha población (la cantidad de individuos que la compone) es un parámetro que se define al inicio. Una vez generada esta población se debe evaluar la aptitud (fitness) de cada individuo, la cual de alguna manera indica el logro del objetivo. Si el criterio de optimización es alcanzado, se termina el proceso obteniendo la solución con el mejor individuo, si no se logra cumplir con tal criterio se continúa aplicando los operadores de selección, cruce y mutación. El operador de selección es el encargado de decidir cuales individuos contribuirán en la formación de la próxima generación de individuos. Este mecanismo como ya se indicó simula el proceso de selección natural, forma una población intermedia, que esta compuesta por los individuos con mayor aptitud de la generación actual. El siguiente operador es el de cruce o cruza, su función es recombinar el material genético. Se toman aleatoriamente dos individuos que hayan sobrevivido al proceso de selección y se recombina su material genético creando uno o más descendientes, que pasan a la siguiente población. Este operador se aplica tantas veces como sea necesario para formar la nueva población. La última tarea en este paso consiste en la aplicación del operador de mutación. Este operador, que en general actúa con muy baja probabilidad, modifica algunos genes del cromosoma, posibilitando de esta manera la búsqueda de soluciones alternativas. Una vez finalizado el proceso de selección, cruza y mutación se obtiene la siguiente generación, la cual será evaluada, repitiéndose el ciclo descrito previamente. Tras cada iteración la calidad de la solución generalmente va incrementándose, y los individuos representan mejores soluciones al problema. 9 Desarrollos Inteligentes Algoritmos Genéticos Al algoritmo detallado anteriormente se lo conoce como algoritmo genético canónico o sencillo, y es la forma más utilizada. Sin embargo, en algunas implementaciones particulares de AGs se pueden agregar nuevos operadores. En todos los casos, la forma en que se implementen esos operadores variará de acuerdo a las características propias del problema. A continuación se ilustra la aplicación del algoritmo genético canónico con un ejemplo adaptado de (Goldberg David E., 1989). El problema consiste en encontrar el valor de la variable x que produce el máximo valor de la función f(x) =40x- x2, sobre el intervalo para x en [0,1,2,...,31]. Para empezar es necesario generar una población inicial integrada por un cierto número de individuos, nos encontramos con el problema de la representación del cromosoma de cada individuo, supongamos que decidimos utilizar un código binario (0,1), de longitud 5, pues el máximo valor de x es 31 , cuyo código sería el tren de bits 11111, considerando una población de cuatro individuos, y obteniendo al azar los cromosomas de los individuos, podemos evaluarlos y determinar su probabilidad de selección para la reproducción, como se muestra en la tabla 3.3.1. ________________________________________________________________ Individuo cadena valor de x evaluación probabilidad probabilidad No. (fenotipo) (genotipo) f(x) selección acumulada 1 00111 7 231 0.196 0.196 2 11101 29 319 0.270 0.466 3 11001 25 375 0.318 0.784 4 01000 8 256 0.216 1.0 Tabla 3.3.1 Población inicial obtenida en el ejemplo del algoritmo canónico. En la tabla 3.3.1 se obtuvieron los valores de la probabilidad de selección, dividiendo el valor específico de f(x) para cada individuo, entre la sumatoria de los cuatro valores de f(x). De acuerdo con el algoritmo, y observando que ningún integrante de la población actual es el óptimo, se continúa con la selección de los individuos 10 Desarrollos Inteligentes Algoritmos Genéticos para la reproducción, es decir dos parejas. Para esto solamente es requerido generar cuatro números aleatorios entre [0,1], suponiendo que los números 0.41, 0.18, 0.63, y 0.26 son los obtenidos, los cuales a partir de la última columna de la tabla 3.3.1, corresponden a los individuos 2, 1, 3, 2 respectivamente, por lo que la primera pareja la integrarían los individuos 2 y 1, la segunda pareja la forman los individuos 3 y 2. Con estas dos parejas se puede generar la población 1, o sea la generación siguiente. El algoritmo indica que se debe aplicar el operador cruza, para ello es necesario determinar los puntos de cruce, es decir la posición del bit en donde se efectuará el corte de los cromosomas de los padres, procediendo de la misma manera que en la selección se generarán dos enteros aleatorios en el rango [1,4], sean por ejemplo los enteros 2 y 3. Finalmente se aplicará la mutación, se debe definir una probabilidad de mutar Pm cercana a cero, sea por ejemplo 0.01, generando 20 números aleatorios entre [0,1], uno para cada bit de la población, para este caso se tienen los números: 0.82, 0.84, 0.12, 0.60, 0.57, 0.51, 0.16, 0.59, 0.37, 0.01, 0.24, 0.03, 0.85, 0.17, 0.39, 0.16, 0.88, 0.72, 0.13, 0.75. Se observa que solamente se debe mutar el último bit del segundo individuo. _____________________________________________________________ Individuo Punto Descendiente Nueva población x f(x) seleccionado de cruce Descend. mutados 2 11101 2 11111 11111 31 279 1 00111 2 00101 10101 21 399 3 11001 3 11101 11101 29 319 2 11101 3 11001 11001 25 375 ____________________________________________________________ Tabla 3.3.2 Población en tiempo 1. En la tabla 3.3.2 se muestra la nueva población obtenida, con sus integrantes ya evaluados. Si se comparan ambas poblaciones, se podrá observar que en cada una se tiene un mayor valor de bondad de 375, sin embargo en la población inicial la suma de retribuciones es de 1181, mientras que en la nueva se obtiene 11 Desarrollos Inteligentes Algoritmos Genéticos una suma de 1372, lo que indica que en términos generales se ha mejorado el rendimiento de la población. Este proceso se debiera continuar por un cierto número de generaciones, hasta llegar a un valor de convergencia del máximo valor de f(x), el que debiera aproximarse al valor óptimo de la función. 3.4 Componentes de un algoritmo genético. En este momento el lector ya puede tener un concepto más claro sobre los AGs, sin embargo se requiere ahora efectuar un estudio más completo de sus componentes, de tal manera que se haga factible la posibilidad de resolver problemas mediante su implementación en una computadora. Los componentes característicos de los algoritmos genéticos son los siguientes: - La definición del problema - La representación de la solución del problema - La decodificación del cromosoma - La evaluación de un individuo - Los operadores evolutivos: Selección, cruce y mutación (Mateos Alfonso, 2003) Los cuatro primeros se tratarán en esta sección, el último se verá en la siguiente sección. 3.4.1 Definición del problema. Los problemas complejos de búsqueda y optimización, en donde se tienen diferentes conjuntos de variables que deben ser combinadas para su solución, y aquellos de múltiples restricciones con espacios de búsqueda muy grandes, conforman el campo de aplicación de los AGs. No requieren información 12 Desarrollos Inteligentes Algoritmos Genéticos adicional sobre optimización, por lo que pueden tomar diferentes tipos de funciones objetivo y todo tipo de restricciones lineales o no lineales definidas sobre espacios discretos, continuos o combinados (Mateos Alfonso, 2003). La flexibilidad que muestran en su estructura y su forma de operar, los AGs se significan como una alternativa excelente para la resolución de problemas, sobre todo en los que no se tiene una técnica específica de solución, o bien se desea explorar soluciones globales en espacios demasiado grandes. 3.4.2 Representación de la solución. Los algoritmos genéticos trabajan manipulando cromosomas, que son estructuras que codifican las distintas soluciones de un determinado problema. La forma en que se codifican los cromosomas es dependiente de cada problema en particular, y suele variar de problema en problema. Un cromosoma esta compuesto por un conjunto de genes. Cada gen representa una característica particular del individuo y ocupa una posición determinada en el cromosoma, llamada locus. A cada uno de los valores que puede tomar un gen se lo conoce como alelo. Es importante destacar dos conceptos que muchas veces suelen confundirse: genotipo y fenotipo. El genotipo es el conjunto de genes de un individuo, que representan la descripción genética del individuo. El fenotipo es la forma en que se expresa el genotipo, como resultado de la interacción con su entorno. La morfogénesis es el proceso de decodificar el genotipo para producir un fenotipo. Una cuestión a resolver cuando se diseñan algoritmos evolutivos es la forma de codificar los genes. Estos se pueden representar como cadenas binarias, números enteros, números reales, etc. En general se utilizan las cadenas binarias por varios motivos: 13 Desarrollos Inteligentes a) Algoritmos Genéticos Cualquier parámetro se puede codificar como una cadena de bits. Una cadena de bits permite expresar valores booleanos, enteros, reales, etc. b) motivo la mayor parte de los trabajos teóricos se basa en este esquema de codificación. c) El uso de cadenas de bits permite contar con gran cantidad de herramientas de análisis. Las cadenas de bits son fáciles de manipular. El desarrollo de operadores genéticos es simple y eficiente. Sin embargo, las características propias del problema podrían llevar a la utilización de otro esquema de codificación. En dicho caso será necesario desarrollar operadores genéticos que se adapten al esquema seleccionado. Los algoritmos genéticos trabajan sobre una población de individuos, en donde cada uno representa una posible solución. La población es un concepto muy importante en los algoritmos genéticos y existen dos cuestiones fundamentales a resolver: como generar la primera población, y cual debe ser el tamaño de la población. La población inicial debe poseer la mayor diversidad posible. Idealmente, la población inicial debería contener todos los posibles valores (alelos) que pueda tomar un gen. De esta manera se aseguraría una exploración completa del espacio de búsqueda. En la práctica, esta situación no suele ser factible por lo que la primera población se genera comúnmente de manera azarosa, asignándole aleatoriamente a cada gen uno de los posibles alelos. De esta manera se asegura la diversidad de alelo por gen. En algunos casos se pueden utilizar heurísticas para la generación de la población inicial, las que permiten obtener un punto de partida más próximo a la solución del problema. En estos casos, es importante que la heurística asegure la diversidad mencionada. De lo contrario el algoritmo 14 Desarrollos Inteligentes Algoritmos Genéticos genético no será capaz de realizar una búsqueda completa sobre el espacio de soluciones. El tamaño de la población no es problema crítico. Si el tamaño de la población es muy grande se realizará una exploración del espacio de búsqueda más rápida en términos de generaciones. Sin embargo, el tiempo necesario para obtener una nueva generación a partir de la generaron actual será mayor, dado que se estarán procesando individuos innecesarios. Si el tamaño de la población es muy chico podría llegar a darse el caso en que la población converja rápidamente a una solución que no sea lo suficientemente buena. En la practica se suelen utilizar poblaciones de 20 individuos, pudiéndose aumentar el mismo en base a la complejidad del problema o a la calidad de la solución requerida. En algunos casos se utiliza un tamaño de población inicial, el cual se va incrementando a medida que la población tiende a ser homogénea. 3.4.3 Decodificación del cromosoma. La cadena binaria de caracteres del cromosoma representa un valor real candidato a ser una solución para el problema, dicho valor debe ser obtenido a partir de esta cadena que etiqueta un número dentro del intervalo fijado inicialmente. La decodificación es el proceso inverso al de la codificación, de tal manera que dado un método, automáticamente se define el otro. 3.4.4 Evaluación de un individuo. El uso de los conceptos de función de evaluación y función de aptitud se suelen utilizar como sinónimos. Sin embargo, ambos conceptos son diferentes, y es conveniente hacer una distinción entre ellos. La función de evaluación, o función objetivo, provee una medida de la ejecución del conjunto de parámetros. Indica que tan buena es la solución obtenida tras la aplicación de un conjunto de parámetros, independientemente de 15 Desarrollos Inteligentes Algoritmos Genéticos la aplicación de esta función sobre otro conjunto de parámetros. En general, esta medida se obtiene tras la decodificación de un cromosoma en el conjunto de parámetros que representa. Por su parte, la función de adaptación siempre esta definida con respecto al resto de los individuos de la población. Indica que tan buena (o mala) es una solución comparada con el resto de las soluciones obtenidas hasta el momento. El valor obtenido por esta función se traduce, tras la aplicación del operador de selección, en oportunidades de reproducción. Aquellos que tengan mayor aptitud tendrán mayores posibilidades de reproducirse y transmitir su material genético a la próxima generación. 3.5 Operadores evolutivos. La selección es el operador evolutivo por naturaleza, mediante él se seleccionan a los individuos más aptos que deben copiarse o reproducirse para la siguiente generación. El siguiente operador genético se llama cruce o cruza, que consiste en tomar a dos individuos ya seleccionados e intercambiar entre ellos segmentos de su código genético, produciendo una descendencia de hijos heredando características de sus padres y mejorando así su aptitud. El tercer operador es la mutación, que al igual que una mutación en los seres vivos, cambia un gen por otro, o bien alterando puntos concretos del código de un individuo. En las siguientes secciones se estudiarán estos operadores con mayor profundidad. 16 Desarrollos Inteligentes Algoritmos Genéticos 3.5.1 Selección. Este proceso de selección de candidatos a reproducirse suele realizarse de forma probabilística, lo cual implica que todos los individuos tienen posibilidades de ser seleccionados (aún los menos aptos). En los AGs las técnicas de selección pueden clasificarse en tres grandes grupos (Coello, 2001): - Selección proporcional - Selección mediante torneo - Selección de estado uniforme La selección proporcional Describe a un grupo de esquemas de selección propuestos por Holland, en los cuales se eligen individuos de acuerdo a su contribución de aptitud con respecto al total de la población, los grupos que incluye son: - La ruleta - Sobrante estocástico - Universal estocástica - Muestreo determinístico Solamente se estudiará la ruleta ya que permite ilustrar la manera de realizar esta operación genética. La selección por ruleta Esta técnica fue propuesta por DeJong, la cual ha sido más frecuentemente utilizada debido a su simplicidad y popularidad, ya que es la referencia inicial dada por Goldberg en su texto (Goldberg, 1998). Los pasos de este algoritmo son los siguientes: 1. Calcular la suma T de los valores esperados (Ve) de la aptitud de los individuos 17 Desarrollos Inteligentes Algoritmos Genéticos 2. Repetir N veces (N es el tamaño de la población) - Generar un número aleatorio r entre 0 y T - Ciclar a través de los individuos de la población sumando los valores esperados hasta que la suma sea mayor o igual a r. - El individuo que haga que ésta suma exceda el límite es el seleccionado. Cada individuo tiene un valor de aptitud obtenido en el paso de evaluación de la función objetivo: f ( i) para i = 1 hasta N. Se calcula la suma de aptitudes: N Suma aptitudes = ∑ f (i) i=1 _ Se obtiene el valor f = Suma aptitudes / N Se calcula el valor esperado Ve(i): _ Ve(i) = f(i) / f Se obtiene la suma de los valores esperados Ve(i): N T = ∑ Ve(i) i =1 Se genera un número aleatorio r є [0.0, T] El individuo seleccionado pasa a la siguiente generación, repitiéndose el procedimiento tantas veces como sea necesario hasta completar la siguiente generación. Al contener una componente aleatoria, la cantidad de copias de un individuo que efectivamente pasan a la siguiente generación puede variar de la cantidad de copias esperadas. 18 Desarrollos Inteligentes 3.5.2 Algoritmos Genéticos Cruce. Las técnicas de cruza básicas suelen diseñarse para aplicarse a la representación binaria, pero pueden generalizarse a otro tipo de representación mediante algunas adaptaciones, las tres técnicas básicas son (Coello, 2001) - Cruza de un punto - Cruza de dos puntos (o multipunto) - Cruza uniforme Cruza de un punto En esta variante del operador de cruza se toma un punto de cruza, luego, a un hijo se le asignan todos los genes del padre ubicados a la izquierda del punto de cruza, y todos los genes de la madre ubicados a la derecha del punto de cruza. El segundo hijo es el complemento del primero. La Figura 3.5.1 muestra un ejemplo de cruza simple en el cual se toma como punto de cruza el primero de ellos. 19 Desarrollos Inteligentes Algoritmos Genéticos Figura 3.5.1 Cruza de un punto Cruza Multipunto Esta variante del operador de cruza es similar al operador de cruza simple, sólo que se toman n puntos de cruza, El valor de n = 2 es el más común. Cada hijo recibe los genes entre dos puntos de cruza sucesivos de cada uno de los padres, de manera intercalada. Cabe destacar que la cruza simple es un caso particular de la cruza multipunto, con un único punto de cruza. Cruza Uniforme Se trata de una cruza de n puntos, pero el número de puntos no se fija previamente. También se puede optar por asignar aleatoriamente los pesos. Cada hijo tiene una probabilidad de 0.5 de recibir los genes de su padre y por ende de recibirlos de su madre. 20 Desarrollos Inteligentes 3.5.3 Algoritmos Genéticos Mutación. Este operador en los algoritmos genéticos canónicos se suele considerar como de menor importancia, es tema de debate e investigación en la comunidad de computación evolutiva. La mutación binaria es el tipo de mutación tradicionalmente utilizado en el algoritmo genético canónico, y consiste en invertir un gen seleccionado aleatoriamente. Dada la representación binaria del gen, se invierte el bit que lo representa con una determinada probabilidad llamada probabilidad de mutación. Por ejemplo: Antes 10101010 Después 10111010 Mutación por inserción Se selecciona un gen en forma arbitraria y se le inserta en una posición arbitraria. Por ejemplo: Sea el individuo: 8 7 6 0 4 3 2 5 Si elegimos la posición 6 de izquierda a derecha y movemos ese valor a la posición 2, entonces se tendrá el individuo mutado de la siguiente forma: Individuo mutado: 8 3 7 6 0 4 2 5 Mutación por desplazamiento Es una generalización de la mutación por inserción, en vez de mover un solo valor se mueven varios. Mutación adaptativa por temperatura ascendente La probabilidad de mutación se va incrementando a medida que transcurren las generaciones. El objetivo de este aumento es mantener la diversidad de 21 Desarrollos Inteligentes Algoritmos Genéticos individuos en la población, que tiende a hacerse homogénea con el transcurso de las generaciones. Mutación adaptativa por temperatura descendente La probabilidad de mutación va decreciendo a medida que transcurren las generaciones. De esta manera se asegura una alta diversidad de individuos en las generaciones iniciales. La probabilidad mínima debe ser mayor a cero para permitir continuar la exploración del espacio de búsqueda a medida que las generaciones avanzan. 3.6 Ventajas y limitaciones de los algoritmos genéticos. Es conveniente considerar las ventajas y desventajas que presentan los AGs, al igual que toda herramienta, ya que de esta manera se puede estar en condiciones de aprovechar sus bondades, y así mismo, atender las desventajas que pudiera presentar. Algunas de las ventajas pueden ser las siguientes: - Una ventaja muy importante y quizás la principal, la constituye el hecho de que los AGs son paralelos, es decir, permiten explorar el espacio de soluciones en muy diversas direcciones a la vez, lo que posibilita encontrar una solución cercana a la óptima en un tiempo relativamente corto. El AG puede dirigirse hacia el espacio con los individuos más aptos y encontrar el mejor de ese grupo. En el contexto de los algoritmos evolutivos, esto se conoce como teorema del esquema, y es la ventaja principal de los AGs sobre otros métodos de resolución de problemas - Debido al paralelismo que les permite evaluar implícitamente muchos esquemas a la vez, los algoritmos genéticos funcionan particularmente bien resolviendo problemas cuyo espacio de soluciones potenciales es realmente grande demasiado vasto para hacer una búsqueda exhaustiva 22 Desarrollos Inteligentes Algoritmos Genéticos en un tiempo razonable. La mayoría de los problemas que caen en esta categoría se conocen como ``no lineales''. En un problema lineal, la aptitud de cada componente es independiente, por lo que cualquier mejora en alguna parte dará como resultado una mejora en el sistema completo. - La mayoría de los problemas prácticos tienen un espacio de soluciones enorme, imposible de explorar exhaustivamente; el reto se convierte entonces en cómo evitar los óptimos locales, soluciones que son mejores que todas las que son similares a ella, pero que no son mejores que otras soluciones distintas situadas en algún otro lugar del espacio de soluciones. Muchos algoritmos de búsqueda pueden quedar atrapados en los óptimos locales: si llegan a lo alto de una colina del paisaje adaptativo, descubrirán que no existen soluciones mejores en las cercanías y concluirán que han alcanzado la mejor de todas, aunque existan picos más altos en algún otro lugar del mapa. Los algoritmos evolutivos, por otro lado, han demostrado su efectividad al escapar de los óptimos locales y descubrir el óptimo global incluso en paisajes adaptativos muy escabrosos y complejos. (Debe decirse que, en la realidad, a menudo no hay manera de decir si una cierta solución a un problema es el óptimo global o sólo un óptimo local muy alto. Sin embargo, aunque un AG no devuelva siempre una solución perfecta y demostrable a un problema, casi siempre puede devolver al menos una muy buena solución). - Muchos problemas de la vida real no pueden definirse en términos de un único valor que hay que minimizar o maximizar, sino que deben expresarse en términos de múltiples objetivos, a menudo involucrando contrapartidas: uno sólo puede mejorar a expensas de otro. Los AGs son muy buenos resolviendo estos problemas: en particular, su uso del paralelismo les permite producir múltiples soluciones, igualmente buenas, al mismo problema, donde posiblemente una solución candidata optimiza un parámetro y otra candidata optimiza uno distinto, y luego un supervisor humano puede seleccionar una de esas candidatas para su 23 Desarrollos Inteligentes Algoritmos Genéticos utilización. Si una solución particular a un problema con múltiples objetivos optimiza un parámetro hasta el punto en el que ese parámetro no puede mejorarse más sin causar una correspondiente pérdida de calidad en algún otro parámetro, esa solución se llama óptimo paretiano o no dominada. - Los AGs no saben nada de los problemas que deben resolver. En lugar de utilizar información específica conocida a priori para guiar cada paso y realizar cambios con un ojo puesto en el mejoramiento, como hacen los diseñadores humanos; realizan cambios aleatorios en sus soluciones candidatas y luego utilizan la función de aptitud para determinar si esos cambios producen una mejora. Por otra parte, algunas de las desventajas pueden ser: - Definir una representación del problema. El lenguaje utilizado para especificar soluciones candidatas debe ser robusto; es decir, debe ser capaz de tolerar cambios aleatorios que no produzcan constantemente errores fatales o resultados sin sentido. Hay dos maneras principales para conseguir esto. La primera, utilizada por la mayoría de los algoritmos genéticos, es definir a los individuos como listas de números -binarios, enteros o reales- donde cada número representa algún aspecto de la solución candidata. Si los individuos son cadenas binarias, un 0 o 1 podría significar la ausencia o presencia de una cierta característica. Si son listas de números, estos números podrían representar muchas cosas distintas: los pesos de las conexiones en una red neuronal, el orden de las ciudades visitadas en un recorrido dado, la situación espacial de componentes electrónicos, los valores con los que se alimenta a un controlador, los ángulos de torsión de los enlaces péptidos de una proteína, etcétera. Así, la mutación implica cambiar estos números, cambiar bits o sumar o restar valores aleatorios. En este caso, el propio código del programa no cambia; el código es lo que dirige la simulación y hace un seguimiento de los individuos, evaluando sus 24 Desarrollos Inteligentes Algoritmos Genéticos aptitudes y quizá asegurando que sólo se producen valores realistas y posibles para el problema dado. El problema de representar a las soluciones candidatas de manera robusta no surge en la naturaleza, porque el método de representación utilizado por la evolución, a saber, el código genético, es inherentemente robusto: con muy pocas excepciones, como una cadena de codones de parada, no existe una secuencia de bases de ADN que no pueda traducirse en una proteína. Por lo tanto, virtualmente, cualquier cambio en los genes de un individuo siempre producirá un resultado inteligible, y por tanto las mutaciones en la evolución tienen mayor probabilidad de producir una mejora. Esto entra en contraste con los lenguajes creados por el hombre como el inglés, donde el número de palabras con significado es pequeño comparado con el número total de formas en las que se pueden combinar las letras del alfabeto, y por tanto, es probable que un cambio aleatorio en una frase en inglés produzca un sinsentido. - El problema de cómo escribir la función de aptitud debe considerarse cuidadosamente para que se pueda alcanzar una mayor aptitud y verdaderamente signifique una solución mejor para el problema dado. Si se elige mal una función de aptitud o se define de manera inexacta, puede que el algoritmo genético sea incapaz de encontrar una solución al problema, o puede acabar resolviendo el problema equivocado. (Esta última situación se describe a veces como la tendencia del AG a ``engañar'', aunque en realidad lo que está pasando es que el AG está haciendo lo que se le pidió hacer, no lo que sus creadores pretendían que hiciera). Unos investigadores utilizaron un algoritmo evolutivo en conjunción con una serie de chips reprogramables, haciendo que la función de aptitud recompensara al circuito en evolución por dar como salida una señal oscilatoria. Al final del experimento, se producía efectivamente una señal oscilatoria -pero en lugar de actuar como un osculador, como pretendían los investigadores, ¡descubrieron que el circuito se había convertido en un receptor de radio que estaba recibiendo 25 Desarrollos Inteligentes Algoritmos Genéticos y retransmitiendo una señal oscilatoria de un componente electrónico cercano. - Además de elegir bien la función de aptitud, también deben elegirse cuidadosamente los otros parámetros de un AG, el tamaño de la población, el ritmo de mutación y cruzamiento, el tipo y fuerza de la selección. Si el tamaño de la población es demasiado pequeño, puede que el algoritmo genético no explore suficientemente el espacio de soluciones para encontrar buenas soluciones consistentemente. Si el ritmo de cambio genético es demasiado alto o el sistema de selección se escoge inadecuadamente, puede alterarse el desarrollo de esquemas beneficiosos y la población puede entrar en catástrofe de errores, al cambiar demasiado rápido para que la selección llegue a producir convergencia. - Un problema muy conocido que puede surgir con un AG se conoce como convergencia prematura. Si un individuo que es más apto que la mayoría de sus competidores emerge muy pronto en el curso de la ejecución, se puede reproducir tan abundantemente que merme la diversidad de la población demasiado pronto, provocando que el algoritmo converja hacia el óptimo local que representa ese individuo, en lugar de rastrear el paisaje adaptativo lo bastante a fondo para encontrar el óptimo global. Esto es un problema especialmente común en las poblaciones pequeñas, donde incluso una variación aleatoria en el ritmo de reproducción puede provocar que un genotipo se haga dominante sobre los otros. - Finalmente, varios investigadores aconsejan no utilizar algoritmos genéticos en problemas resolubles de manera analítica. No es que los algoritmos genéticos no puedan encontrar soluciones buenas para estos problemas; simplemente es que los métodos analíticos tradicionales consumen mucho menos tiempo y potencia computacional que los AGs y, a diferencia de los AGs, a menudo está demostrado matemáticamente que ofrecen la única solución exacta. Por supuesto, como no existe una 26 Desarrollos Inteligentes Algoritmos Genéticos solución matemática perfecta para ningún problema de adaptación biológica, este problema no aparece en la naturaleza. 3.7 Aplicaciones diversas. Esta sección se orientará a revisar algunas de las aplicaciones de los AGs, las cuales se incrementan en forma explosiva en el tiempo, cada vez surgen nuevos campos y aumenta la diversidad de soluciones. Por ello solamente con el fin de ilustrar al lector, se considerarán varias de ellas, para terminar la presente sección con la ejemplificación de un caso específico. Predicción. Una aplicación en mercados financieros lo constituye el algoritmo genético utilizado para predecir el rendimiento futuro de 1.600 acciones ofertadas públicamente, al AG se le asignó la tarea de predecir el beneficio relativo de cada acción, definido como el beneficio de esa acción menos el beneficio medio de las 1.600 acciones a lo largo del periodo de tiempo en cuestión, 12 semanas (un cuarto del calendario) en el futuro. Como entrada, al AG se le proporcionaron datos históricos de cada acción en forma de una lista de 15 atributos, como la relación precio-beneficio y el ritmo de crecimiento, medidos en varios puntos del tiempo pasado; se le pidió al AG que evolucionara un conjunto de reglas si/entonces para clasificar cada acción y proporcionar, como salida, una recomendación sobre qué hacer con respecto a la acción (comprar, vender o ninguna predicción) y un pronóstico numérico del beneficio relativo. Los resultados del AG fueron comparados con los de un sistema establecido, basado en una red neuronal, que los autores habían estado utilizando para pronosticar los precios de las acciones y administrar las carteras de valores durante tres años. Por supuesto, el mercado de valores es un sistema extremadamente ruidoso y no lineal, y ningún mecanismo predictivo puede ser 27 Desarrollos Inteligentes Algoritmos Genéticos correcto el 100% del tiempo; el reto consiste en encontrar un predictor que sea preciso más de la mitad de las veces. En el experimento, el AG y la red neuronal hicieron pronósticos al final de la semana para cada una de las 1.600 acciones, durante doce semanas consecutivas. Doce semanas después de cada predicción, se comparó el rendimiento verdadero con el beneficio relativo predicho. Globalmente, el AG superó significativamente a la red neuronal: en una ejecución de prueba, el AG predijo correctamente la dirección de una acción el 47,6% de las veces, no hizo predicción el 45,8% de las veces y realizó una predicción incorrecta sólo un 6.6% de las veces, una precisión predictiva total de un 87,8%. El AG también superó significativamente a tres índices bursátiles importantes -el S&P 500, el S&P 400 y el Russell 2000- en este periodo; la casualidad fue excluida como causa de este resultado con un margen de confianza de un 95%. Los autores atribuyen este convincente éxito a la capacidad del algoritmo genético de percatarse de relaciones no lineales difícilmente evidentes para los observadores humanos, además del hecho de que carece del ‘prejuicio’ contra las reglas anti intuitivas y contradictorias'' de los expertos humanos. (http://www.molwick.com/es/evolucion/140-genetica-evolucion.html) Otro caso en esta categoría de aplicaciones, lo es el sistema Omega, desarrollado por la empresa Holandesa Cap Gemini, y la británica KiQ Ltd (Coello, 2001), que usa un portafolio del comportamiento pasado de un cliente, genera un modelo matemático que puede usarse para predecir los comportamientos de clientes que se encuentran fuera de los portafolios conocidos. Omega se puede usar para evaluar solicitudes de crédito, generar listas de correo, modelar lealtad de los consumidores a un producto, y para detectar fraudes. 28 Desarrollos Inteligentes Algoritmos Genéticos Reconocimiento de patrones. Este tipo de aplicación es una de las más generalmente utilizadas, se verán a continuación algunas de ellas. El reconocimiento de criminales, es una solución en la que a un testigo se le presentan una serie de caras seleccionadas aleatoriamente, el testigo asigna un valor de aptitud a cada una de las caras, se continúa generando nuevas poblaciones de caras mediante cruce y mutación, hasta lograr la identificación de una cara muy similar a la del criminal. En la industria de las telecomunicaciones se ha establecido el término ``fuga'' para describir la velocidad a la que los usuarios se cambian de un proveedor de servicios a otro. La fuga le cuesta a las compañías de telecomunicaciones una gran cantidad de dinero cada año, y reducir las fugas es un factor importante para aumentar la rentabilidad. Si las compañías pueden contactar con los clientes que tienen probabilidad de cambiar y ofrecerles incentivos especiales para que se queden, puede reducirse la tasa de fugas; pero ninguna compañía tiene los recursos para contactar a más de un pequeño porcentaje de sus clientes. El problema es, por tanto, cómo identificar a los clientes que más piensen fugarse con mayor probabilidad. Todas las compañías tienen grandes bases de datos con información de los clientes que teóricamente puede utilizarse para este propósito; pero ¿qué método funciona mejor para examinar esta enorme cantidad de datos e identificar los sutiles patrones y tendencias que indican la probabilidad de fuga de un cliente? Au, Chan y Yao aplicaron algoritmos genéticos a este problema para generar un conjunto de reglas de tipo si-entonces para predecir la probabilidad de fuga de distintos grupos de clientes. En su AG, la primera generación de reglas, todas las cuales tenían una condición, fue generada utilizando una técnica de inducción probabilística. Las generaciones posteriores las refinaron, combinando sencillas reglas de una condición con reglas más complejas con varias condiciones. Para la medición de la aptitud se utilizó una medida de correlación objetiva de la ``interesantitud'', que no necesitaba información de entrada subjetiva. El algoritmo evolutivo de explotación de datos se probó sobre una base de datos 29 Desarrollos Inteligentes Algoritmos Genéticos real de 100.000 clientes proporcionada por una compañía de Malasia, y su rendimiento se comparó con el de dos métodos alternativos: una red neuronal multicapa y un algoritmo basado en árbol de decisiones ampliamente utilizado, el C4.5. Los autores afirman que su AG fue capaz de descubrir regularidades ocultas en la base de datos y ``efectuó predicciones precisas de fuga con distintas tasas de fuga'', superando al C4.5 bajo todas las circunstancias, superando a la red neuronal en tasas mensuales de fuga bajas e igualándola en tasas de fuga mayores y, en ambos casos, alcanzando las conclusiones más rápidamente. Algunas ventajas más del enfoque evolutivo son que puede funcionar eficientemente incluso cuando faltan algunos campos de datos, y que puede expresar sus descubrimientos en conjuntos de reglas fácilmente comprensibles, al contrario que la red neuronal. Entre algunas de las reglas más interesantes halladas por el AG se encuentran las siguientes: los clientes tienen más probabilidad de fugarse si se han suscrito personalmente al plan de servicios y no han sido admitidos en ningún plan de bonificación (una solución potencial sería admitir a todos esos clientes en planes de bonificación); los clientes tienen más probabilidad de fugarse si viven en Kuala Lumpur, tienen entre 36 y 44 años y pagan sus facturas en efectivo (supuestamente porque es más fácil cambiarse de proveedor para los clientes que pagan al contado, a diferencia de los que cargan en cuenta automáticamente); y los clientes que viven en Penang y contrataron a través de un cierto vendedor tienen más probabilidades de fugarse (este vendedor puede estar proporcionando un mal servicio al cliente y debería ser investigado). Optimización y Matemáticas. La optimización de losas de concreto prefabricadas es un problema abordado en el Engineering Design Centre de la Universidad de Plymouth en Inglaterra (Coello, 2001), la losa se representa como una placa sujeta a diversos tipos de cargas. En el problema se tienen unas 400 variables continuas de decisión, el costo computacional asociado a esta solución es muy alto, una sola evaluación 30 Desarrollos Inteligentes Algoritmos Genéticos de la función de aptitud toma aproximadamente 10 minutos en una estación de trabajo Sun Spark con 6 procesadores. Se recurrió a un esquema distribuido para evaluar la función de aptitud, se logró obtener un ahorro del 3% al 5% en relación con el mejor resultado obtenido por expertos humanos utilizando técnicas tradicionales de optimización. La empresa Escocesa Quadstone, usó AGs para resolver un problema de optimización de estrategias de producción de British Petrol. El objetivo era maximizar el rendimiento financiero de un grupo de campos petrolíferos y de gas interdependientes, con un sinnúmero de restricciones complejas de compromisos y penalizaciones. El uso de AGs produjo retornos netos substancialmente mejores que los obtenidos por planeadores humanos o por cualquier otra técnica de optimización. También los AGs se han enfocado a la optimización de las estrategias de acceso a una gran base de datos, para mejorar los tiempos de respuesta en las consultas. Algunos problemas clásicos en Informática como el ordenamiento de una lista de elementos, han sido direccionados mediante algoritmos genéticos. Igualmente en Matemáticas se han utilizado AGs, para resolver ecuaciones de derivadas parciales no lineales de alto orden, normalmente encontrando los valores para los que las ecuaciones se hacen cero, y dan como ejemplo una solución casi perfecta para los coeficientes de la ecuación de quinto orden conocida como Super Korteweg-de Vries. Diseño. Muy diversas aplicaciones se han abordado en el campo del diseño, en diferentes disciplinas, se mencionarán a continuación algunas de estas. 31 Desarrollos Inteligentes Algoritmos Genéticos Diseño de un sistema de suspensión para un automóvil realizado por investigadores del KanGAL, que es un laboratorio de Algoritmos Genéticos de Kanpur en la India (Coello, 2001). Burke y Newall utilizaron algoritmos genéticos para diseñar los horarios de los exámenes universitarios. Se sabe que, en general, el problema del horario es NPcompleto, lo que significa que no se conoce un método para hallar con garantías una solución óptima en un tiempo razonable. En un problema así, hay restricciones duras -no puede asignarse el mismo aula a dos exámenes a la vez- y restricciones suaves -si es posible, no deben asignarse varios exámenes en sucesión a un mismo estudiante, para minimizar la fatiga. Las restricciones duras deben satisfacerse, mientras que las restricciones suaves deben satisfacerse lo máximo posible. GAnet es uno de los tres productos principales de software de la empresa Optimal Solutions, que es una biblioteca de clases para desarrollar algoritmos genéticos, incluye rutinas para simular redes hidráulicas y permite el manejo de restricciones duras y blandas. Se aplicó esta solución en el diseño de una red de agua potable para la región de York (Ontario, Canadá) (Coello, 2001). He y Mort aplicaron algoritmos genéticos al problema de hallar rutas óptimas en las redes de telecomunicaciones (como las redes de telefonía e Internet), que se usan para transmitir datos desde los remitentes hasta los destinatarios. Esto es un problema NP-difícil, un tipo de problema para el que los AGs son ``extremadamente aptos... y han encontrado una enorme variedad de aplicaciones exitosas en esos campos''. Es además un problema multiobjetivo, en el que hay que equilibrar objetivos en conflicto como maximizar el caudal de datos, minimizar los retrasos en la transmisión y la pérdida de datos, encontrar caminos de bajo coste y distribuir la carga uniformemente entre los encaminadores o conmutadores de la red. Cualquier algoritmo real satisfactorio debe también ser capaz de redirigir el tráfico de las rutas principales que fallen o estén congestionadas. Los AGs combinados con redes neuronales fueron utilizados por un grupo de Unilever Research, para diseñar nuevos péptidos bactericidas para usarse en 32 Desarrollos Inteligentes Algoritmos Genéticos limpiadores anti-bacterianos y preservativos de alimentos. El resultado fue la generación de 400 bactericidas virtuales potencialmente activos, de los cuales cinco fueron sintetizados (Coello, 2001). Otras investigaciones plantean la utilización de un AG para auxiliar en la selección de los diversos parámetros que deben considerarse en el diseño de una aeronave. A continuación se ejemplificará la aplicación de los AGs con la descripción del problema del agente viajero, se recomienda al lector tomarse su tiempo para revisar esta solución. El problema del agente viajero. Se trata de un problema muy conocido referenciado como TSP (Travelling Salesman Problem), pero también de mucha aplicabilidad, y sobre todo fácil de entender, por lo que resulta un caso paradigmático. Es la situación de un agente viajero (Travelling Salesman), que debe planear su recorrido por n ciudades (n>=3), pasando solo una vez por cada una, y regresando a la ciudad en donde inició su viaje, de tal manera que la distancia recorrida sea mínima. Sea Cij la distancia de la ciudad “i” a la “j”. Es decir, se debe obtener una permutación de n elementos Cij que minimiza la sumatoria: n ∑ Cij i=1 Sin repetir ciudades a visitar. El número de soluciones posibles es del orden de n!. Existen diferentes formas de representar una gira, y por tanto una solución al problema, los operadores de cruce y mutación dependerán fuertemente de tal representación, a efecto de mostrar esta situación se verá a continuación unas maneras de hacerlo. Una forma muy natural de representación es la que se basa en la trayectoria, una gira se representa como una lista de n ciudades, si se observa la figura 3.7.1, la gira 1-2-3-6-5-8-7-4 se puede indicar mediante (1 2 3 6 5 8 7 4). 33 Desarrollos Inteligentes Algoritmos Genéticos Figura 3.7.1 Representación de un mapa de 8 ciudades con sus comunicaciones. Operador de cruce PMX (Partially Mapped Crossover) (Bukcland Mat, 2002), En él, una parte de la ristra representando a uno de los padres, se hace corresponder con una parte, de igual tamaño, de la ristra del otro padre, intercambiándose la información restante. Por ejemplo si se consideran los padres: Padre 1 (3 2 5 6 8 7 4 1) y Padre 2 (3 1 2 5 6 8 7 4) El operador PMX crea las giras descendientes de la siguiente manera. En primer lugar, selecciona con probabilidad uniforme dos puntos de corte a lo largo de las ristras que representan las giras padres. Supongamos que el primer punto de corte se selecciona entre el tercer y el cuarto elemento de la gira, y el segundo entre el sexto y el séptimo elemento: Padre 1 (3 2 5 | 6 8 7 | 4 1) y Padre 2 (3 1 2 | 5 6 8 | 7 4) Se establece una correspondencia biunívoca entre los elementos comprendidos entre los puntos de corte, en este caso se tienen las correspondencias: 6 <--> 5, 34 Desarrollos Inteligentes Algoritmos Genéticos 8<--> 6, y 7 <--> 8. Posteriormente se copian las subristras del padre 1 en el hijo 1 y la del padre 2 en el hijo 2 quedando así: Hijo 1: ( 3 2 5 | 6 8 7 | 4 1) Hijo 2 : ( 3 1 2 | 5 6 8 | 7 4) A continuación se procede a intercambiar los elementos de los hijos tomando en cuenta los mapeos correspondientes. Considerando el mapeo 6 <--> 5: Hijo 1: ( 3 2 6 | 5 8 7 | 4 1) Hijo 2: ( 3 1 2 | 6 5 8 | 7 4) Se procede con los intercambios de acuerdo al mapeo 8<-->6, de esta manera quedarán los descendientes así: Hijo 1: ( 3 2 8 | 5 6 7 | 4 1) Hijo 2: ( 3 1 2 | 8 5 6 | 7 4) Finalmente se procede con el mapeo 7 <--> 8: Hijo 1: ( 3 2 7 | 5 6 8 | 4 1) Hijo 2: ( 3 1 2 | 7 5 6 | 8 4) Generando finalmente los descendientes: Hijo 1: ( 3 2 7 5 6 8 4 1) Hijo 2: ( 3 1 2 7 5 6 8 4) Operador de mutación basado en desplazamiento (DM), se inicia extrayendo una subcadena al azar y se inserta en otra posición dada aleatoriamente. Por ejemplo sea la cadena (1 2 5 3 6 8 7 4), suponiendo que se selecciona la sublista (3 6 8) y al azar se elige la posición que se encuentra después del elemento con valor 7, 35 Desarrollos Inteligentes Algoritmos Genéticos entonces la cadena resultante ya aplicado el operador de mutación será la siguiente: ( 1 2 5 7 3 6 8 4). Los descendientes obtenidos mediante los operadores PMX y DM, no tienen elementos repetidos, cumpliendo así con esta restricción, sin embargo la factibilidad de conectividad pudiera no ser satisfecha, de tal manera que al final de la obtención de una solución óptima debiera verificarse tal situación. Existen una diversidad de operadores de cruce y de mutación propuestos por diferentes autores, conviene que el lector investigue algunos de ellos con el fin de comparar las formas de codificación y los resultados que arroja cada una. 36 Desarrollos Inteligentes Algoritmos Genéticos PREGUNTAS 1. ¿En qué se basa la computación bio-inspirada?. 2. Mencione algunos modelos de computación bio-inspirada. 3. ¿En qué tipo de proceso de los seres vivos se basan los algoritmos genéticos?. 4. ¿ Cuál es la teoría de la evolución biológica en su forma macroscópica que sirve como base para los Algoritmos genéticos?. 5. ¿Qué procesos hacen que unos alelos cambien de frecuencia entre generaciones de poblaciones de los seres vivos?. 6. ¿Por quién y en qué año fueron establecidos los principios básicos de los algoritmos genéticos?. 7. Un cromosoma ¿Qué codifica y qué representa en un algoritmo genético?. 8. ¿ En qué se diferencian de otros algoritmos de optimización o búsqueda los AGs ?. 9. ¿ Cuáles son los componentes característicos de los algoritmos genéticos? 10. ¿Una ventaja muy importante y quizás la principal de los AGs es? 37 Desarrollos Inteligentes Algoritmos Genéticos RETROALIMENTACIÓN SOBRE LAS PREGUNTAS 1. La computación bio-inspirada se basa en establecer analogías con sistemas naturales o sociales para diseñar métodos heurísticos no determinísticos de “búsqueda”, de “aprendizaje”, de imitación de “comportamiento”, etc. . 2. Algunos modelos de computación bio-inspirada son: - Algoritmos evolutivos - Redes neuronales - Algoritmos inmunológicos - Algoritmos basados en inteligencia de enjambres . 3. Los algoritmos genéticos se basan en el proceso genético de los seres vivos. 4. La teoría de la evolución biológica en su forma macroscópica que sirve como base para los AGs es la Darwinista. 5. Esos procesos son los factores de evolución como la mutación, la deriva genética, la migración y la selección natural. 6. Los principios básicos de los algoritmos genéticos fueron establecidos por J. Holland en 1975. 7. Los algoritmos genéticos codifican las posibles soluciones en estructuras llamadas cromosomas, que representan el material genético de un individuo 8. Los AGs se diferencian de otros algoritmos de optimización o búsqueda en cuatro aspectos: - Trabajan con la codificación del conjunto de parámetros, no con los parámetros mismos. - Manejan una población de puntos solución, no un solo punto. 38 Desarrollos Inteligentes Algoritmos Genéticos - Utilizan información de eficiencia (función objetivo), no derivadas o conocimiento auxiliar. - Usan reglas de transición probabilísticas, no determinísticas. 9. Los componentes característicos de los algoritmos genéticos son los siguientes: - La definición del problema - La representación de la solución del problema - La decodificación del cromosoma - La evaluación de un individuo - Los operadores evolutivos: Selección, cruce y mutación. 10. Una ventaja muy importante y quizás la principal, la constituye el hecho de que los AGs son paralelos, es decir, permiten explorar el espacio de soluciones en muy diversas direcciones a la vez, lo que posibilita encontrar una solución cercana a la óptima en un tiempo relativamente corto. 39 Desarrollos Inteligentes Algoritmos Genéticos EJERCICIOS 1. Considere el siguiente problema: Se tiene una caja negra, la cual consta de 5 interruptores de entrada, para cada configuración de ellos existe una señal de salida f, el objetivo es determinar la posición de los interruptores que genere un valor máximo para f. Suponga que se asocia los valores 0 y 1 a las posiciones apagado y encendido de los interruptores respectivamente. Elabore una codificación del problema de tal manera que pueda ser resuelto mediante un algoritmo genético. 2. Para el problema del ejercicio 1, suponga que se tienen seis configuraciones específicas de los interruptores, y que sus señales de salida son las siguientes: 5, 10, 15, 25, 50, y 100. Bajo el operador de la ruleta sencilla, determine el número esperado de copias de cada configuración en una cierta generación, si el tamaño de la población manejada es de seis. 3. El problema consiste en encontrar el valor de la variable x que produce el máximo valor de la función f(x) = 28x- x2, sobre el intervalo para x en [0,1,2,...,31]. Desarrolle una codificación y ejecute manualmente el algoritmo genético que permita resolver el problema. ¿En cuántas generaciones pudo obtener una solución óptima?. 4. Una población contiene las siguientes cadenas de bits cada una representando una configuración de los cinco interruptores del ejercicio1, sus valores de bondad de adaptación f son los siguientes: Cadena f 10001 20 11100 10 00011 5 01110 15 40 Desarrollos Inteligentes Algoritmos Genéticos La probabilidad de mutación es Pm = 0.001, y la probabilidad de cruce es Pc=1.0 . Calcule el número esperado de esquemas de la forma 1**** en la generación 1. 41 Desarrollos Inteligentes Algoritmos Genéticos BIBLIOGRAFÍA. Bukcland Mat (2002).- A I Techniques for game programming. Premier Press, Cincinnati, Ohio, U.S.A. Coello Coello Carlos (2001).- Introducción a la computación evolutiva (notas del curso). CINVESTAV-IPN, México D.F. Goldberg David E. (1989).- Genetic Algorithms in search, optimization, and machine learning. Addison Wesley publishing Co. Inc.U.S.A. Mateos Alfonso (2003). Algoritmos evolutivos y algoritmos genéticos.- Universidad Carlos III, Madrid. 42 Desarrollos Inteligentes Algoritmos Genéticos REFERENCIAS WEB: http://www.molwick.com/es/evolucion/140-genetica-evolucion.html Fecha de acceso: 7/Mayo/2008 Tema: Fundamentos de genética y evolución. http://biologia.uab.es/divulgacio/genpob.html#factores Fecha de acceso: 15/Mayo/2008 Tema: Fundamentos de genética y evolución. http://www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/temageneticos.pdf Fecha de acceso: 18/Mayo/2008 Tema: Fundamentos de algoritmos genéticos. 43