Algoritmos genéticos y computación evolutiva

Adam Marczyk

2004

Resumen:

Los creacionistas afirman a menudo que el proceso evolutivo no puede crear información nueva, o que la evolución no posee beneficios prácticos. Este artículo refuta esas afirmaciones describiendo el crecimiento explosivo y las extensas aplicaciones de los algoritmos genéticos, una técnica de computación basada en los principios de la evolución biológica.

Introducción

De vez en cuando, los creacionistas acusan a la evolución de que carece de utilidad como teoría científica porque no produce beneficios prácticos y no tiene relevancia en la vida diaria. Sin embargo, tan sólo la evidencia de la biología demuestra que esta afirmación es falsa. Hay numerosos fenómenos naturales para los que la evolución nos ofrece un sólido fundamento teórico. Por nombrar uno, el desarrollo observado de la resistencia -a los insecticidas en las plagas de cultivos, a los antibióticos en las bacterias, a la quimioterapia en las células cancerosas, y a los fármacos antiretrovirales en virus como el VIH- es una consecuencia abierta de las leyes de la mutación y la selección, y comprender estos principios nos ha ayudado a desarrollar estrategias para enfrentarnos a estos nocivos organismos. El postulado evolutivo de la descendencia común ha ayudado al desarrollo de nuevos medicamentos y técnicas, al proporcionar a los investigadores una buena idea de con qué organismos deben experimentar para obtener resultados que probablemente serán relevantes para los seres humanos. Finalmente, el hombre ha utilizado con grandes resultados el principio de cría selectiva para crear organismos personalizados, distintos a cualquiera que se pueda encontrar en la naturaleza, para beneficio propio. El ejemplo canónico, por supuesto, es la diversidad de variedades de perros domésticos (razas tan diversas como los bulldogs, chihuahuas y dachshunds han sido producidas a partir de lobos en sólo unos pocos miles de años), pero ejemplos menos conocidos incluyen al maíz cultivado (muy diferente de sus parientes salvajes, que carecen de las familiares ``orejas'' del maíz cultivado), a los peces de colores (como los perros, hemos criado variedades cuyo aspecto es drásticamente distinto al del tipo salvaje), y a las vacas lecheras (con ubres inmensas, mucho mayores que las necesarias para alimentar a una cría).

Los críticos pueden argumentar que los creacionistas pueden explicar estas cosas sin recurrir a la evolución. Por ejemplo, a menudo los creacionistas explican el desarrollo de la resistencia a los agentes antibióticos en las bacterias, o los cambios forjados en los animales domésticos por selección artificial, asumiendo que Dios decidió crear a los organismos en grupos fijos, llamados ``tipos'' o baramins. Aunque la microevolución natural o la selección artificial dirigida por humanos pueden producir diferentes variedades dentro de los ``tipo-perro'', ``tipo-vaca'' o ``tipo-bacteria'' (!) creados originalmente, ninguna cantidad de tiempo o cambio genético puede transformar un ``tipo'' en otro. Sin embargo, nunca se explica cómo determinan los creacionistas lo que es un ``tipo'', o qué mecanismo impide a los seres vivos evolucionar más allá de sus límites.

Pero en las últimas décadas, el continuo avance de la tecnología moderna ha producido algo nuevo. Ahora la evolución está produciendo beneficios prácticos en un campo muy distinto y, esta vez, los creacionistas no pueden afirmar que su explicación se adapte a los hechos igual de bien. Este campo es la informática, y los beneficios provienen de una estrategia de programación llamada algoritmos genéticos. Este ensayo explicará qué son los algoritmos genéticos y mostrará de qué manera son relevantes en el debate evolución/creacionismo.

¿Qué es un algoritmo genético?

Expuesto concisamente, un algoritmo genético (o AG para abreviar) es una técnica de programación que imita a la evolución biológica como estrategia para resolver problemas. Dado un problema específico a resolver, la entrada del AG es un conjunto de soluciones potenciales a ese problema, codificadas de alguna manera, y una métrica llamada función de aptitud que permite evaluar cuantitativamente a cada candidata. Estas candidatas pueden ser soluciones que ya se sabe que funcionan, con el objetivo de que el AG las mejore, pero se suelen generar aleatoriamente.

Luego el AG evalúa cada candidata de acuerdo con la función de aptitud. En un acervo de candidatas generadas aleatoriamente, por supuesto, la mayoría no funcionarán en absoluto, y serán eliminadas. Sin embargo, por puro azar, unas pocas pueden ser prometedoras -pueden mostrar actividad, aunque sólo sea actividad débil e imperfecta, hacia la solución del problema.

Estas candidatas prometedoras se conservan y se les permite reproducirse. Se realizan múltiples copias de ellas, pero las copias no son perfectas; se introducen cambios aleatorios durante el proceso de copia. Luego, esta descendencia digital prosigue con la siguiente generación, formando un nuevo acervo de soluciones candidatas, y son sometidas a una ronda de evaluación de aptitud. Las candidatas que han empeorado o no han mejorado con los cambios en su código son eliminadas de nuevo; pero, de nuevo, por puro azar, las variaciones aleatorias introducidas en la población pueden haber mejorado a algunos individuos, convirtiéndolos en mejores soluciones del problema, más completas o más eficientes. De nuevo, se selecionan y copian estos individuos vencedores hacia la siguiente generación con cambios aleatorios, y el proceso se repite. Las expectativas son que la aptitud media de la población se incrementará en cada ronda y, por tanto, repitiendo este proceso cientos o miles de rondas, pueden descubrirse soluciones muy buenas del problema.

Aunque a algunos les puede parecer asombroso y antiintuitivo, los algoritmos genéticos han demostrado ser una estrategia enormemente poderosa y exitosa para resolver problemas, demostrando de manera espectacular el poder de los principios evolutivos. Se han utilizado algoritmos genéticos en una amplia variedad de campos para desarrollar soluciones a problemas tan difíciles o más difíciles que los abordados por los diseñadores humanos. Además, las soluciones que consiguen son a menudo más eficientes, más elegantes o más complejas que nada que un ingeniero humano produciría. ¡En algunos casos, los algoritmos genéticos han producido soluciones que dejan perplejos a los programadores que escribieron los algoritmos en primera instancia!

Métodos de representación

Antes de que un algoritmo genético pueda ponerse a trabajar en un problema, se necesita un método para codificar las soluciones potenciales del problema de forma que una computadora pueda procesarlas. Un enfoque común es codificar las soluciones como cadenas binarias: secuencias de 1s y 0s, donde el dígito de cada posición representa el valor de algún aspecto de la solución. Otro método similar consiste en codificar las soluciones como cadenas de enteros o números decimales, donde cada posición, de nuevo, representa algún aspecto particular de la solución. Este método permite una mayor precisión y complejidad que el método comparativamente restringido de utilizar sólo números binarios, y a menudo ``está intuitivamente más cerca del espacio de problemas'' (Fleming y Purshouse 2002[3], p 1.228).

Esta técnica se utilizó, por ejemplo, en el trabajo de Steffen Schulze-Kremer, que escribió un algoritmo genético para predecir la estructura tridimensional de una proteína, basándose en la secuencia de aminoácidos que la componen (Mitchell 1996[47], p. 62). El AG de Schulze-Kremer utilizaba números reales para representar los famosos ``ángulos de torsión'' entre los enlaces peptídicos que conectan a los aminoácidos. (Una proteína está formada por una secuencia de bloques básicos llamados aminoácidos, que se conectan como los eslabones de una cadena. Una vez que todos los aminoácidos están enlazados, la proteína se dobla formando una compleja estructura tridimensional, basada en cuáles aminoácidos se atraen entre ellos y cuáles se repelen. La forma de una proteína determina su función). Los algoritmos genéticos para entrenar a las redes neuronales también utilizan a menudo este método de codificación.

Un tercer método consiste en representar a los individuos de un AG como cadenas de letras, donde cada letra, de nuevo, representa un aspecto específico de la solución. Un ejemplo de esta técnica es el método basado en ``codificación gramática'' de Hiroaki Kitano, en el que a un AG se le encargó la tarea de evolucionar un sencillo conjunto de reglas llamadas gramática libre de contexto, que a su vez se utilizaban para generar redes neuronales para una variedad de problemas (Mitchell 1996[47], p. 74).

La virtud de estos tres métodos es que facilitan la definición de operadores que causen los cambios aleatorios en las candidatas seleccionadas: cambiar un 0 por un 1 o viceversa, sumar o restar al valor de un número una cantidad elegida al azar, o cambiar una letra por otra. (Ver la sección sobre los métodos de cambio para más detalles acerca de los operadores genéticos). Otra estrategia, desarrollada principalmente por John Koza, de la Universidad de Stanford, y denominada programación genética, representa a los programas como estructuras de datos ramificadas llamadas árboles (Koza et al. 2003[42], p. 35). En este método, los cambios aleatorios pueden generarse cambiado el operador o alterando el valor de un cierto nodo del árbol, o sustituyendo un subárbol por otro.

Figure: Tres sencillos árboles de programa del tipo utilizado normalmente en la programación genética. Debajo se proporciona la expresión matemática que representa cada uno.
Image genprogtrees

Es importante señalar que los algoritmos evolutivos no necesitan representar las soluciones candidatas como cadenas de datos de una longitud fija. Algunos las representan de esta manera, pero otros no; por ejemplo, la ``codificación gramatical'' de Kitano, explicada arriba, puede escalarse eficientemente para crear redes neuronales grandes y complejas, y los árboles de programación genética de Koza pueden crecer arbitrariamente tanto como sea necesario para resolver cualquier problema que se les pida.

Métodos de selección

Un algoritmo genético puede utilizar muchas técnicas diferentes para seleccionar a los individuos que deben copiarse hacia la siguiente generación, pero abajo se listan algunos de los más comunes. Algunos de estos métodos son mutuamente exclusivos, pero otros pueden utilizarse en combinación, algo que se hace a menudo.


Métodos de cambio

Una vez que la selección ha elegido a los individuos aptos, éstos deben ser alterados aleatoriamente con la esperanza de mejorar su aptitud para la siguiente generación. Existen dos estrategias básicas para llevar esto a cabo. La primera y más sencilla se llama mutación. Al igual que una mutación en los seres vivos cambia un gen por otro, una mutación en un algoritmo genético también causa pequeñas alteraciones en puntos concretos del código de un idividuo.

El segundo método se llama cruzamiento, e implica elegir a dos individuos para que intercambien segmentos de su código, produciendo una ``descendencia'' artificial cuyos individuos son combinaciones de sus padres. Este proceso pretende simular el proceso análogo de la recombinación que se da en los cromosomas durante la reproducción sexual. Las formas comunes de cruzamiento incluyen al cruzamiento de un punto, en el que se establece un punto de intercambio en un lugar aleatorio del genoma de los dos individuos, y uno de los individuos contribuye todo su código anterior a ese punto y el otro individuo contribuye todo su código a partir de ese punto para producir una descendencia, y al cruzamiento uniforme, en el que el valor de una posición dada en el genoma de la descendencia corresponde al valor en esa posición del genoma de uno de los padres o al valor en esa posición del genoma del otro padre, elegido con un 50% de probabilidad.

Image crossover
Figure: Cruzamiento y mutación. El diagrama de arriba ilustra el efecto de estos dos operadores genéticos en los individuos de una población de cadenas de 8 bits. El diagrama superior muestra a dos individuos llevando a cabo un cruzamiento de un punto; el punto de intercambio se establece entre las posiciones quinta y sexta del genoma, produciendo un nuevo individuo que es híbrido de sus progenitores. El segundo diagrama muestra a un individuo sufriendo una mutación en la posición 4, cambiando el 0 de esa posición de su genoma por un 1.
Image mutation

Otras técnicas de resolución de problemas

Con el auge de la informática de inteligencia artificial y el desarrollo de los métodos heurísticos, han emergido otras técnicas de resolución computerizada de problemas que en algunos aspectos son similares a los algoritmos genéticos. Esta sección explica algunas de estas técnicas, en qué se parecen a los AGs y en qué se diferencian.


Redes neuronales

Una red neuronal es un método de resolución de problemas basado en un modelo informático de la manera en que están conectadas las neuronas del cerebro. Una red neuronal consiste en capas de unidades procesadoras, llamadas nodos, unidas por conexiones direccionales: una capa de entrada, una capa de salida y cero o más capas ocultas enmedio. Se le presenta un patrón inicial de entrada a la capa de entrada, y luego los nodos que se estimulan transmiten una señal a los nodos de la siguiente capa a la que están conectados. Si la suma de todas las entradas que entran en una de estas neuronas virtuales es mayor que el famoso umbral de activación de la neurona, esa neurona se activa, y transmite su propia señal a las neuronas de la siguiente capa. El patrón de activación, por tanto, se propaga hacia delante hasta que alcanza a la capa de salida, donde es devuelto como solución a la entrada presentada. Al igual que en el sistema nervioso de los organismos biológicos, las redes neuronales aprenden y afinan su rendimiento a lo largo del tiempo, mediante la repetición de rondas en las que se ajustan sus umbrales, hasta que la salida real coincide con la salida deseada para cualquier entrada dada. Este proceso puede ser supervisado por un experimentador humano, o puede correr automáticamente utilizando un algoritmo de aprendizaje (Mitchell 1996[47], p. 52). Se han utilizado algoritmos genéticos para construir y entrenar a redes neuronales.

Figure: Una sencilla red neuronal anticipativa (feedforward), con una capa consistente en cuatro neuronas, una capa oculta consistente en tres neuronas y una capa de salida consistente en cuatro neuronas. El número de cada neurona representa su umbral de activación: sólo se excitará si recibe al menos esa cantidad de entradas. El diagrama muestra cómo la red neuronal recibe una cadena de entrada y cómo la activación se extiende por la red hasta producir una salida.
Image nn

Ascenso a colina (Hill Climbing)

Similares a los algoritmos genéticos, aunque más sistemáticos y menos aleatorios. Un algoritmo de ascenso a colina comienza con una solución al problema a mano, normalmente elegida al azar. Luego, la cadena se muta, y si la mutación proporciona una solución con mayor aptitud que la solución anterior, se conserva la nueva solución; en caso contrario, se conserva la solución actual. Luego el algoritmo se repite hasta que no se pueda encontrar una mutación que provoque un incremento en la aptitud de la solución actual, y esta solución se devuelve como resultado (Koza et al. 2003[42], p. 59). (Para entender de dónde viene el nombre de esta técnica, imagine que el espacio de todas las soluciones posibles de un cierto problema se representa como un paisaje tridimensional. Un conjunto de coordenadas en ese paisaje representa una solución particular. Las soluciones mejores están a mayor altitud, formando colinas y picos; las que son peores están a menor altitud, formando valles. Un ``trepacolinas'' es, por tanto, un algoritmo que comienza en un punto dado del paisaje y se mueve inexorablemente colina arriba). El algoritmo de ascenso a colina es lo que se conoce como algoritmo voraz, lo que significa que siempre hace la mejor elección disponible en cada paso, con la esperanza de que de esta manera se puede obtener el mejor resultado global. En contraste, los métodos como los algoritmos genéticos y el recocido simulado, discutido abajo, no son voraces; a veces, estos métodos hacen elecciones menos óptimas al principio con la esperanza de que conducirán hacia una solución mejor más adelante.

Recocido simulado (simulated annealing)

Otra técnica de optimización similar a los algoritmos evolutivos se conoce como recocido simulado. La idea toma prestado su nombre del proceso industrial en el que un material se calienta por encima de su punto de fusión y luego se enfría gradualmente para eliminar defectos en su estructura cristalina, produciendo un entramado de átomos más estable y regular (Haupt y Haupt 1998[34], p. 16). En el recocido simulado, como en los algoritmos genéticos, existe una función de aptitud que define un paisaje adaptativo; sin embargo, en lugar de una población de candidatas como en los AGs, sólo existe una solución candidata. El recocido simulado también añade el concepto de ``temperatura'', una cantidad numérica global que disminuye gradualmente en el tiempo. En cada paso del algoritmo, la solución muta (lo que es equivalente a moverse hacia un punto adyacente en el paisaje adaptativo). Luego, la aptitud de la nueva solución se compara con la aptitud de la solución anterior; si es mayor, se conserva la nueva solución. En caso contrario, el algoritmo toma la decisión de conservarla o descartarla en base a la temperatura. Si la temperatura es alta, como lo es al principio, pueden conservarse incluso cambios que causan decrementos significativos en la aptitud, y utilizarse como base para la siguiente ronda del algoritmo, pero al ir disminuyendo la temperatura, el algoritmo se va haciendo más y más propenso a aceptar sólo los cambios que aumentan la aptitud. Finalmente, la temperatura alzanca el cero y el sistema se ``congela''; cualquiera que sea la configuración que exista en ese punto se convierte en la solución. El recocido simulado tiene a menudo aplicaciones en la ingeniería del diseño, como determinar la disposición física de los componentes en un chip informático (Kirkpatrick, Gelatt y Vecchi 1983[40]).

Una breve historia de los AGs

Los primeros ejemplos de lo que hoy podríamos llamar algoritmos genéticos aparecieron a finales de los 50 y principios de los 60, programados en computadoras por biólogos evolutivos que buscaban explícitamente realizar modelos de aspectos de la evolución natural. A ninguno de ellos se le ocurrió que esta estrategia podría aplicarse de manera más general a los problemas artificiales, pero ese reconocimiento no tardaría en llegar: ``La computación evolutiva estaba definitivamente en el aire en los días formativos de la computadora electrónica'' (Mitchell 1996[47], p.2). En 1962, investigadores como G.E.P. Box, G.J. Friedman, W.W. Bledsoe y H.J. Bremermann habían desarrollado independientemente algoritmos inspirados en la evolución para optimización de funciones y aprendizaje automático, pero sus trabajos generaron poca reacción. En 1965 surgió un desarrollo más exitoso, cuando Ingo Rechenberg, entonces de la Universidad Técnica de Berlín, introdujo una técnica que llamó estrategia evolutiva, aunque se parecía más a los trepacolinas que a los algoritmos genéticos. En esta técnica no había población ni cruzamiento; un padre mutaba para producir un descendiente, y se conservaba el mejor de los dos, convirtiéndose en el padre de la siguiente ronda de mutación (Haupt y Haupt 1998[34], p.146). Versiones posteriores introdujeron la idea de población. Las estrategias evolutivas todavía se emplean hoy en día por ingenieros y científicos, sobre todo en Alemania.

El siguiente desarrollo importante en el campo vino en 1966, cuando L.J. Fogel, A.J. Owens y M.J. Walsh introdujeron en América una técnica que llamaron programación evolutiva. En este método, las soluciones candidatas para los problemas se representaban como máquinas de estado finito sencillas; al igual que en la estrategia evolutiva de Rechenberg, su algoritmo funcionaba mutando aleatoriamente una de estas máquinas simuladas y conservando la mejor de las dos (Mitchell 1996[47], p.2; Goldberg 1989[29], p.105). También al igual que las estrategias evolutivas, hoy en día existe una formulación más amplia de la técnica de programación evolutiva que todavía es un área de investigación en curso. Sin embargo, lo que todavía faltaba en estas dos metodologías era el reconocimiento de la importancia del cruzamiento.

En una fecha tan temprana como 1962, el trabajo de John Holland sobre sistemas adaptativos estableció las bases para desarrollos posteriores; y lo que es más importante, Holland fue también el primero en proponer explícitamente el cruzamiento y otros operadores de recombinación. Sin embargo, el trabajo fundamental en el campo de los algoritmos genéticos apareció en 1975, con la publicación del libro ``Adaptación en Sistemas Naturales y Artificiales''. Basado en investigaciones y papers anteriores del propio Holland y de colegas de la Universidad de Michigan, este libro fue el primero en presentar sistemática y rigurosamente el concepto de sistemas digitales adaptativos utilizando la mutación, la selección y el cruzamiento, simulando el proceso de la evolución biológica como estrategia para resolver problemas. El libro también intentó colocar los algoritmos genéticos sobre una base teórica firme introduciendo el concepto de esquema (Mitchell 1996[47], p.3; Haupt y Haupt 1998[34], p.147). Ese mismo año, la importante tesis de Kenneth De Jong estableció el potencial de los AGs demostrando que podían desenvolverse bien en una gran variedad de funciones de prueba, incluyendo paisajes de búsqueda ruidosos, discontinuos y multimodales (Goldberg 1989[29], p.107).

Estos trabajos fundacionales establecieron un interés más generalizado en la computación evolutiva. Entre principios y mediados de los 80, los algoritmos genéticos se estaban aplicando en una amplia variedad de áreas, desde problemas matemáticos abstractos como el ``problema de la mochila'' (bin-packing) y la coloración de grafos hasta asuntos tangibles de ingeniería como el control de flujo en una línea de ensamble, reconocimiento y clasificación de patrones y optimización estructural (Goldberg 1989[29], p.128).

Al principio, estas aplicaciones eran principalmente teóricas. Sin embargo, al seguir proliferando la investigación, los algoritmos genéticos migraron hacia el sector comercial, al cobrar importancia con el crecimiento exponencial de la potencia de computación y el desarrollo de Internet. Hoy en día, la computación evolutiva es un campo floreciente, y los algoritmos genéticos están ``resolviendo problemas de interés cotidiano'' (Haupt y Haupt 1998[34], p.147) en áreas de estudio tan diversas como la predicción en la bolsa y la planificación de la cartera de valores, ingeniería aeroespacial, diseño de microchips, bioquímica y biología molecular, y diseño de horarios en aeropuertos y líneas de montaje. La potencia de la evolución ha tocado virtualmente cualquier campo que uno pueda nombrar, modelando invisiblemente el mundo que nos rodea de incontables maneras, y siguen descubriéndose nuevos usos mientras la investigación sigue su curso. Y en el corazón de todo esto se halla nada más que la simple y poderosa idea de Charles Darwin: que el azar en la variación, junto con la ley de la selección, es una técnica de resolución de problemas de inmenso poder y de aplicación casi ilimitada.

¿Cuáles son las ventajas de los AGs?

¿Cuáles son las limitaciones de los AGs?

Aunque los algoritmos genéticos han demostrado su eficiencia y potencia como estrategia de resolución de problemas, no son la panacea. Los AGs tienen ciertas limitaciones; sin embargo, se demostrará que todas ellas pueden superarse y que ninguna de ellas afecta a la validez de la evolución biológica.

Algunos ejemplos específicos de AG

Mientras el poder de la evolución gana reconocimiento cada vez más generalizado, los algoritmos genéticos se utilizan para abordar una amplia variedad de problemas en un conjunto de campos sumamente diverso, demostrando claramente su capacidad y su potencial. Esta sección analizará algunos de los usos más notables en los que han tomado parte.

Acústica

Sato et al. 2002[58] utilizaron algoritmos genéticos para diseñar una sala de conciertos con propiedades acústicas óptimas, maximizando la calidad del sonido para la audiencia, para el director y para los músicos del escenario. Esta tarea implica la optimización simultánea de múltiples variables. Comenzando con una sala con forma de caja de zapatos, el AG de los autores produjo dos soluciones no dominadas, ambas descritas como ``con forma de hoja'' (p. 526). Los autores afirman que estas soluciones tienen proporciones similares al Grosser Musikvereinsaal de Viena, el cual está considerado generalmente como una de las mejores -si no la mejor- salas de conciertos del mundo, en términos de propiedades acústicas.

Porto, Fogel y Fogel 1995[51] utilizaron programación evolutiva para adiestrar a redes neuronales para distinguir entre reflexiones sonoras desde distintos tipos de objetos: esferas metálicas hechas por el hombre, montañas submarinas, peces y plantas, y ruido aleatorio de fondo. Tras 500 generaciones, la mejor red neuronal que evolucionó tenía una probabilidad de clasificación correcta que iba desde el 94% al 98%, y una probabilidad de clasificación errónea entre un 7,4% y un 1,5%, que son ``probabilidades razonables de detección y falsa alarma'' (p. 21). Esta red evolucionada igualó las prestaciones de otra red desarrollada mediante recocido simulado, y superó consistentemente a redes entrenadas mediante propagación hacia atrás, las cuales ``se atascaban repetidamente en conjuntos de pesos subóptimos que no producían resultados satisfactorios'' (p. 21). En contraste, ambos métodos estocásticos demostraron su capacidad para superar estos óptimos locales y producir redes más pequeñas, efectivas y robustas; pero los autores sugieren que el algoritmo evolutivo, a diferencia del recocido simulado, opera sobre una población, y por tanto se beneficia de la información global sobre el espacio de búsqueda, conduciendo potencialmente hacia un rendimiento mayor a la larga.

Tang et al. 1996[62] analizan los usos de los algoritmos genéticos en el campo de la acústica y el procesamiento de señales. Un área de interés particular incluye el uso de AGs para diseñar sistemas de Control Activo de Ruido (CAR), que eliminan el sonido no deseado produciendo ondas sonoras que interfieren destructivamente con el ruido. Esto es un problema de múltiples objetivos que requiere el control y la colocación precisa de múltiples altavoces; los AGs se han utilizado en estos sistemas tanto para diseñar los controladores como para encontrar la colocación óptima de los altavoces, dando como resultado una ``atenuación efectiva del ruido'' (p. 33) en pruebas experimentales.

Ingeniería aeroespacial

Obayashi et al. 2000[49] utilizaron un algoritmo genético de múltiples objetivos para diseñar la forma del ala de un avión supersónico. Hay tres consideraciones principales que determinan la configuración del ala -minimizar la resistencia aerodinámica a velocidades de vuelo supersónicas, minimizar la resistencia a velocidades subsónicas y minimizar la carga aerodinámica (la fuerza que tiende a doblar el ala). Estos objetivos son mutuamente exclusivos, y optimizarlos todos simultáneamente requiere realizar contrapartidas.

El cromosoma de este problema es una cadena de 66 números reales, cada uno de los cuales corresponde a un aspecto específico del ala: su forma, su grosor, su torsión, etcétera. Se simuló una evolución con selección elitista durante 70 generaciones, con un tamaño de población de 64 individuos. Al final de este proceso había varios individuos paretianos, cada uno representando una solución no dominada del problema. El artículo comenta que estos individuos ganadores tenían características ``físicamente razonables'', señalando la validez de la técnica de optimización (p. 186). Para evaluar mejor la calidad de las soluciones, las seis mejores fueron comparadas con un diseño de ala supersónica producido por el Equipo de Diseño SST del Laboratorio Aeroespacial Nacional de Japón. Las seis fueron competitivas, con valores de resistencia y carga aproximadamente iguales o menores a los del ala diseñada por humanos; en particular, una de las soluciones evolucionadas superó al diseño del LAN en los tres objetivos. Los autores señalan que las soluciones del AG son similares a un diseño llamado ``ala flecha'', sugerido por primera vez a finales de los años 50, pero que finalmente fue abandonado en favor del diseño más convencional con forma de delta.

En un artículo posterior (Sasaki et al. 2001[57]), los autores repitieron el experimento añadiendo un cuarto objetivo, a saber, minimizar el momento de torsión (un conocido problema en los diseños de alas flecha en el vuelo supersónico). También se añadieron puntos de control adicionales para el grosor al conjunto de variables de diseño. Tras 75 generaciones de evolución, se compararon dos de las mejores soluciones paretianas con el diseño de ala que el Laboratorio Aeroespacial Nacional japonés realizó para el avión supersónico experimental NEXST-1. Se descubrió que ambos diseños (además de un diseño óptimo de la simulación anterior, explicada arriba) eran físicamente razonables y superiores al diseño del LAN en los cuatro objetivos.

Williams, Crossley y Lang 2001[64] aplicaron algoritmos genéticos a la tarea de situar órbitas de satélites para minimizar los apagones de cobertura. Mientras la tecnología de telecomunicaciones sigue progresando, los humanos somos cada vez más dependientes de las funciones vitales que realizan los satélites en órbita alrededor de la Tierra, y uno de los problemas con los que se enfrentan los ingenieros es el diseño de las trayectorias orbitales. Los satélites que se encuentran en una órbita terrestre alta, a unos 35.000 kilómetros de altitud, pueden ver amplias secciones del planeta al mismo tiempo y estar en contacto con las estaciones terrestres, pero son mucho más caros de lanzar y más vulnerables a las radiaciones cósmicas. Es más económico colocar satélites en órbitas bajas, en algunos casos a sólo unos pocos cientos de kilómetros; pero, a causa de la curvatura de la Tierra, es inevitable que estos satélites pierdan durante un tiempo la línea de visión con los receptores terrestres, y por lo tanto se vuelven inútiles. Incluso las constelaciones de varios satélites tienen apagones ineludibles y pérdidas de cobertura por esta razón. El reto consiste en colocar las órbitas de los satélites para minimizar este tiempo muerto. Esto es un problema multi-objetivo que implica la minimización de el tiempo medio de apagón para todas las localizaciones y el tiempo máximo de apagón para cada una de las localizaciones; en la práctica, estos objetivos resultan ser mutuamente exclusivos.

Cuando se utilizó el AG en este problema, los resultados que evolucionaron para constelaciones de tres, cuatro y cinco satélites eran extraños, configuraciones orbitales muy asimétricas, con los satélites colocados alternando huecos grandes y pequeños, en lugar de huecos de igual tamaño como habrían hecho las técnicas convencionales. Sin embargo, esta solución redujo significativamente los tiempos medio y máximo de apagón, en algunos casos hasta en 90 minutos. En un artículo periodístico, el Dr. William Crossley señaló que ``ingenieros con años de experiencia aeroespacial quedaorn sorprendidos con el rendimiento ofrecido por el diseño no convencional''.

Keane y Brown 1996[43] utilizadon un AG para producir un nuevo diseño para un brazo o jirafa para transportar carga que pudiese montarse en órbita y utilizarse con satélites, estaciones espaciales y otros proyectos de construcción aeroespacial. El resultado, una estructura retorcida con aspecto orgánico que se ha comparado con un fémur humano, no utiliza más material que el diseño de brazo estándar, pero es ligera, fuerte y muy superior a la hora de amortiguar las vibraciones perjudiciales, como confirmaron las pruebas reales del producto final. Y sin embargo ``Ninguna inteligencia produjo los diseños. Simplemente evolucionaron'' (Petit 1998[43]). Los autores del artículo comentan además que su AG sólo se ejecutó durante 10 generaciones, debido a la naturaleza computacionalmente costosa de la simulación, y la población no se había estancado todavía. Haber proseguido la ejecución durante más generaciones habría producido indudablemente mayores mejoras de rendimiento.

Figure: Un brazo tridimensional optimizado genéticamente, con una respuesta mejorada a la frecuencia (adaptado de http://www.soton.ac.uk/~ajk/truss/welcome.html).
Image 3dbeam

Finalmente, como informa Gibbs 1996[25], Lockheed Martin ha utilizado un algoritmo genético para producir mediante evolución una serie de maniobras para mover una nave espacial de una orientación a otra, dentro del 2% del tiempo mínimo teórico para tales maniobras. La solución evolucionada era un 10% más rápida que una solución producida manualmente por un experto para el mismo problema.

Astronomía y astrofísica

Charbonneau 1995[12] sugiere la utilidad de los AGs para problemas de astrofísica, aplicándolos a tres problemas de ejemplo: obtener la curva de rotación de una galaxia basándose en las velocidades rotacionales observadas de sus componentes, determinar el periodo de pulsación de una estrella variable basándose en series de datos temporales, y sacar los valores de los parámetros críticos de un modelo magnetohidrodinámico del viento solar. Son tres difíciles problemas no lineales y multidimensionales.

El algoritmo genético de Charbonneau, PIKAIA, utiliza selección generacional y proporcional a la aptitud, junto con elitismo, para asegurar que el mejor individuo se copia una vez hacia la siguiente generación sin ninguna modificación. PIKAIA tiene un ritmo de cruzamiento de 0,65 y un ritmo de mutación variable que se pone a 0,003 inicialmente y luego aumenta gradualmente, mientras la población se aproxima a la convergencia, para mantener la variabilidad en el acervo genético.

En el problema de la curva de rotación galáctica, el AG produjo dos curvas, y ambas estaban bien ajustadas a los datos (un resultado común en este tipo de problema, en el que hay poco contraste entre cimas cercanas); observaciones posteriores pueden distinguir cuál es la preferible. En el problema de la serie temporal, el AG fue impresionantemente exitoso, generando un ajuste de los datos de gran calidad, aunque otros problemas más difíciles no se ajustaron tan bien (aunque, como señala Charbonneau, estos problemas son igualmente difíciles de resolver con técnicas convencionales). El artículo sugiere que un AG híbrido que emplee tanto evolución artificial como técnicas analíticas estándar, podría funcionar mejor. Finalmente, en el problema de obtener los seis parámetros críticos del viento solar, el AG determinó con éxito el valor de tres con una precisión de menos del 0,1% y los otros tres con precisiones entre el 1 y el 10%. (Aunque siempre serían preferibles unos errores experimentales menores para estos tres parámetros, Charbonneau señala que no existe ningún otro método eficiente y robusto para resolver experimentalmente un problema no lineal 6-dimensional de este tipo; un método de gradiente conjugado funciona ``siempre que se pueda proporcionar un valor inicial muy acertado'' (p. 323). En contraste, los AGs no requieren un conocimiento del dominio tan bien afinado).

Basándose en los resultados obtenidos hasta ahora, Charbonneau sugiere que los AGs pueden y deben encontrar uso en otros problemas difíciles de astrofísica, en particular, problemas inversos como las imágenes por Doppler y las inversiones heliosísmicas. Para terminar, Charbonneau sostiene que los AGs son un ``contendiente poderoso y prometedor'' (p. 324) en este campo, del que se puede esperar que complemente (no sustituya) a las técnicas tradicionales de optimización, y concluye que ``el punto decisivo, si es que tiene que haber alguno, es que los algoritmos genéticos funcionan, y a menudo colosalmente bien'' (p. 325).

Química

Un pulso láser ultracorto de alta energía puede romper moléculas complejas en moléculas más sencillas, un proceso con aplicaciones importantes en la química orgánica y la microelectrónica. Los productos específicos de una reacción así pueden controlarse modulando la fase del pulso láser. Sin embargo, para moléculas grandes, obtener la forma del pulso deseado de manera analítica es demasiado difícil: los cálculos son demasiado complejos y las características relevantes (las superficies de energía potencial de las moléculas) no se conocen con suficiente precisión.

Assion et al. 1998[6] resolvieron este problema utilizando un algoritmo evolutivo para diseñar la forma del pulso. En lugar de introducir información compleja, específica del problema, sobre las características cuánticas de las moléculas iniciales, para diseñar el pulso conforme a las especificaciones, el AE dispara un pulso, mide las proporciones de las moléculas producto resultantes, muta aleatoriamente las características del rayo con la esperanza de conseguir que estas proporciones se acerquen a la salida deseada, y el proceso se repite. (En lugar de afinar directamente las características del rayo láser, el AG de los autores representa a los individuos como un conjunto de 128 números, en el que cada número es un valor de voltaje que controla el índice de refracción de uno de los pixeles del modulador láser. De nuevo, no se necesita un conocimiento específico del problema sobre las propiedades del láser o de los productos de la reacción). Los autores afirman que su algoritmo, cuando se aplica a dos sustancias de muestra, ``encuentra automáticamente la mejor configuración... no importa lo complicada que sea la respuesta molecular'' (p. 921), demostrando un ``control coherente automatizado de los productos que son químicamente diferentes uno del otro y de la molécula padre'' (p. 921).

A principios y mediados de los 90, la amplia adopción de una novedosa técnica de diseño de fármacos, llamada química combinatoria, revolucionó la industria farmacéutica. Con este método, en lugar de la síntesis precisa y meticulosa de un sólo compuesto de una vez, los bioquímicos mezclan deliberadamente una gran variedad de reactivos para producir una variedad aún mayor de productos -cientos, miles o millones de compuestos diferentes en cada remesa- que luego pueden aislarse rápidamente para su actividad bioquímica. Hay dos formas de diseñar las bibliotecas de reactivos en esta técnica: diseño basado en los reactivos, que elige grupos optimizados de reactivos sin considerar qué productos saldrán como resultado, y diseño basado en los productos, que selecciona los reactivos que producirán con mayor probabilidad los productos con las propiedades deseadas. El diseño basado en los productos es más difícil y complejo, pero se ha demostrado que genera bibliotecas combinatorias mejores y más diversas, y tiene más probabilidades de ofrecer un resultado útil.

En un artículo patrocinado por el departamento de investigación y desarrollo de GlaxoSmithKline, Gillet 2002[26] describe el uso de un algoritmo genético multiobjetivo para el diseño basado en los productos de bibliotecas combinatorias. Al elegir los componentes que van en una biblioteca particular, deben considerarse características como la diversidad y peso molecular, el coste de los suministros, la toxicidad, la absorción, la distribución y el metabolismo. Si el objetivo es encontrar moléculas similares a una molécula existente con una función conocida (un método común en el diseño de nuevos fármacos), también se puede tener en cuenta la similaridad estructural. Este artículo presenta un enfoque multiobjetivo, donde puede desarrollarse un conjunto de resultados paretianos que maximicen o minimicen cada uno de estos objetivos. El autor concluye diciendo que el AG fue capaz de satisfacer simultáneamente los criterios de diversidad molecular y eficiencia sintética máxima, y también fue capaz de encontrar moléculas parecidas a un fármaco que eran ``muy similares a las moléculas objetivo dadas, tras explorar una fracción muy pequeña del espacio de búsqueda total'' (p. 378).

En un artículo relacionado, Glen y Payne 1995[28] describen el uso de algoritmos genéticos para diseñar automáticamente moléculas nuevas desde cero que se ajustan a un conjunto de especificaciones dado. Dada una población inicial, bien generada aleatoriamente o utilizando la sencilla molécula del etano como semilla, el AG añade, elimina y altera aleatoriamente átomos y fragmentos moleculares con el objetivo de generar moléculas que se ajusten a los requisitos dados. El AG puede optimizar simultáneamente un gran número de objetivos, incluyendo el peso molecular, el volumen molecular, el número de enlaces, el número de centros quirales, el número de átomos, el número de enlaces rotables, la polarizabilidad, el momento dipolar, etcétera, para producer moléculas candidatas con las propiedades deseadas. Basándose en pruebas experimentales, incluyendo un difícil problema de optimización que implicaba la generación de moléculas con propiedades similares a la ribosa (un componente del azúcar imitado a menudo en los fármacos antivirales), los autores concluyen que el AG es un ``excelente generador de ideas'' (p. 199) que ofrece ``propiedades de optimización rápidas y poderosas'' y puede generar ``un conjunto diverso de estructuras posibles'' (p. 182). Continúan afirmando: ``Es de interés especial la poderosa capacidad de optimización del algoritmo genético, incluso con tamaños de población relativamente pequeños'' (p. 200). Como prueba de que estos resultados no son simplemente teóricos, Lemley 2001[45] informa de que la empresa Unilever ha utilizado algoritmos genéticos para diseñar nuevos componentes antimicrobianos para su uso en productos de limpieza, algo que ha patentado.

Ingeniería eléctrica

Una matriz de puertas programable en campo (Field Programmable Gate Array, o FPGA), es un tipo especial de placa de circuito con una matriz de celdas lógicas, cada una de las cuales puede actuar como cualquier tipo de puerta lógica, interconectado con conexiones flexibles que pueden conectar celdas. Estas dos funciones se controlan por software, así que simplemente cargando un programa especial en la placa, puede alterarse al vuelo para realizar las funciones de cualquier dispositivo de hardware de la amplia variedad existente.

El Dr. Adrian Thompson ha explotado este dispositivo, en conjunción con los principios de la evolución, para producir un prototipo de circuito reconocedor de voz que puede distinguir y responder a órdenes habladas utilizando sólo 37 puertas lógicas -una tarea que se habría considerado imposible para cualquier ingeniero humano. Generó cadenas aleatorias de bits de ceros y unos y las utilizó como configuraciones de la FPGA, seleccionando los individuos más aptos de cada generación, reproduciéndolos y mutándolos aleatoriamente, intercambiando secciones de su código y pasándolo hacia la siguiente ronda de selección. Su objetivo era evolucionar un dispositivo que pudiera en principio discriminar entre tonos de frecuencias distintas (1 y 10 kilohercios), y luego distinguir entre las palabras habladas ``go'' (adelante) y ``stop'' (para).

Su objetivo se alcanzó en 3.000 generaciones, pero el éxito fue mayor de lo que había anticipado. El sistema que evolucionó utilizaba muchas menos celdas que cualquier cosa que pudiera haber diseñado un ingeniero humano, y ni siquiera necesita del componente más crítico de los sistemas diseñados por humanos -un reloj. ¿Cómo funcionaba? Thompson no tiene ni idea, aunque ha rastreado la señal de entrada a través de un complejo sistema de bucles realimentados del circuito evolucionado. De hecho, de las 37 puertas lógicas que utiliza el producto final, cinco de ellas ni siquiera están conectadas al resto del circuito de ninguna manera -pero si se les retira la alimentación eléctrica, el circuito deja de funcionar. Parece que la evolución ha explotado algún sutil efecto electromagnético de estas celdas para alcanzar su solución, pero el funcionamiento exacto de la compleja e intrincada estructura evolucionada sigue siendo un misterio (Davidson 1997[19]).

Altshuler y Linden 1997[2] utilizaron un algoritmo genético para evolucionar antenas de alambre con propiedades especificadas a priori. Los autores señalan que el diseño de tales antenas es un proceso impreciso, comenzando con las propiedades deseadas y luego determinando la forma de la antena mediante ``conjeturas... intuición, experiencia, ecuaciones aproximadas o estudios empíricos'' (p. 50). Esta técnica requiere mucho tiempo, a menudo no produce resultados óptimos y tiende a funcionar bien sólo con diseños simétricos y relativamente simples. En contraste, con el método del algoritmo genético, el ingeniero especifica las propiedades electromagnéticas de la antena, y el AG sintetiza automáticamente una configuración que sirva.

Figure: Una antena genética de alambre doblado (de Altshuler y Linden 1997, figura 1).
Image genantenna

Altshuler y Linden utilizaron su AG para diseñar una antena de siete segmentos polarizada circularmente con una cobertura hemisférica; el resultado se muestra a la izquierda. Cada individuo del AG consistía en un cromosoma binario que especificaba las coordenadas tridimensionales de cada extremo final de cada alambre. La aptitud se evaluaba simulando a cada candidato de acuerdo con un código de cableado electromagnético, y el individuo mejor de cada ronda se construía y probaba. Los autores describen la forma de esta antena, que no se parece a las antenas tradicionales y carece de una simetría obvia, como ``inusualmente extraña'' y ``antiintuitiva'' (p. 52), aunque tenía un patrón de radiación casi uniforme y con un gran ancho de banda tanto en la simulación como en la prueba experimental, adecuándose excelentemente a la especificación inicial. Los autores concluyen que un método basado en algoritmos genéticos para diseñar antenas se muestra ``excepcionalmente prometedor''. ``... este nuevo procedimiento de diseño es capaz de encontrar antenas genéticas capaces de resolver de manera efectiva difíciles problemas de antenas, y será especialmente útil en situaciones en las que los diseños existentes no sean adecuados'' (p. 52).

Mercados financieros

Mahfoud y Mani 1996[46] utilizaron un algoritmo genético para predecir el rendimiento futuro de 1.600 acciones ofertadas públicamente. Concretamente, 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 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 experiemnto, 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%. Aunque la red neuronal realizó predicciones precisas más a menudo, también hizo predicciones erróneas más a menudo (de hecho, los autores especulan que la mayor capacidad del AG para no realizar predicciones cuando los datos eran dudosos fue un factor de su éxito; la red neuronal siempre produce una predicción a menos que sea restringida explícitamente por el programador). En el experimento de las 1.600 acciones, el AG produjo un beneficio relativo de un +5,47%, contra el +4,40% de la red neuronal -una diferencia estadísticamente significativa. De hecho, 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 excluída 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 antiintuitivas y contradictorias'' (p. 562) de los expertos humanos.

Andreou, Georgopoulos y Likothanassis 2002[4] lograron un éxito similar utilizando algoritmos genéticos híbridos para evolucionar redes neuronales que predijeran los tipos de cambio de monedas extranjeras hasta un mes en el futuro. Al contrario que en el ejemplo anterior, donde competían AGs y redes neuronales, aquí los dos trabajaron conjuntamente: el AG evolucionó la arquitectura (número de unidades de entrada, número de unidades ocultas y la estructura de enlaces entre ellas) de la red, que luego era entrenada por un algoritmo de filtro.

Se le proporciaron al algoritmo 1.300 valores brutos diarios de cinco divisas como información histórica -el dólar estadounidense, el marco alemán, el franco francés, la libra esterlina y el dracma griego- y se le pidió que predijera sus valores futuros para los 1, 2, 5 y 20 días posteriores. El rendimiento del AG híbrido mostró, en general, un ``nivel excepcional de precisión'' (p. 200) en todos los casos probados, superando a otros varios métodos, incluyendo a las redes neuronales en solitario. Los autores concluyen que ``se ha logrado un excepcional éxito predictivo tanto con un horizonte predictivo de un paso como de varios pasos'' (p. 208) -de hecho, afirman que sus resultados son mejores con diferencia que cualquier estrategia predictiva relacionada que se haya aplicado en esta serie de datos u otras divisas.

La utilización de los AGs en los mercados financieros ha empezado a extenderse en las empresas de corretaje bursátil del mundo real. Naik 1996[48] informa de que LBS Capital Management, una empresa estadounidense cons ede en Florida, utiliza algoritmos genéticos para escoger las acciones de los fondos de pensiones que administra. Coale 1997[17] y Begley y Beals 1995[9] informan de que First Quadrant, una empresa de inversiones de Californa que mueve más de 2.200 millones de dólares, utiliza AGs para tomar decisiones de inversión en todos sus servicios financieros. Su modelo evolucionado gana, de media, 225 dólares por cada 100 dólares invertidos durante seis años, en contraste con los 205 dólares de otros tipos de sistemas de modelos.

Juegos

Una de las demostraciones más novedosas y persuasivas de la potencia de los algoritmos genéticos la presentaron Chellapilla y Fogel 2001[13], que utilizaron un AG para evolucionar redes neuronales que pudieran jugar a las damas. Los autores afirman que una de las mayores dificultades en este tipo de problemas relacionados con estrategias es el problema de la asignación de crédito -en otras palabras, ¿cómo escribir una función de aptitud? Se ha creído ampliamente que los criterios simples de ganar, perder o empatar no proporcionan la suficiente información para que un algoritmo genético averigüe qué constituye el buen juego.

En este artículo, Chellapila y Fogel echan por tierra esa suposición. Dados sólo las posiciones espaciales de las piezas en el tablero y el número total de piezas que posee cada jugador, fueron capaces de evolucionar un programa de damas que jugaba a un nivel competitivo con expertos humanos, sin ninguna información de entrada inteligente acerca de lo que constituye el buen juego -es más, ni siquiera se les dijo a los individuos del algoritmo evolutivo cuál era el criterio para ganar, ni se les dijo el resultado de ningún juego.

En la representación de Chellapilla y Fogel, el estado del juego estaba representado por una lista numérica de 32 elementos, en donde cada posición de la lista correspondía a una posición disponible en el tablero. El valor de cada posición era 0 para una casilla desocupada, -1 si esa casilla estaba ocupada por una pieza enemiga, +1 si la casilla estaba ocupada por una de las piezas del programa, y -K o +K si la casilla estaba ocupada por una dama enemiga o amiga. (El valor de K no se especificaba a priori, sino que, de nuevo, era determinado por la evolución durante el curso del algoritmo). Acompañando a todo esto había una red neuronal con múltiples capas de procesamiento y una capa de entrada con un nodo para cada una de las 4x4, 5x5, 6x6, 7x7 y 8x8 posibles casillas del tablero. La salida de la red neuronal para una colocación de las piezas dada era un valor entre -1 y +1, que indicaba cómo de buena le parecía esa posición. Para cada movimiento, se le presentaba a la red neuronal un árbol de juego que contenía todos los movimientos posibles hasta cuatro turnos en el futuro, y el movimiento se decidía basándose en qué rama del árbol producía los mejores resultados.

El algoritmo evolutivo comenzó con una población de 15 redes neuronales con pesos y tendencias, generados aleatoriamente, asignados a cada nodo y conexión; luego, cada individuo se reprodujo una vez, generando una descendencia con variaciones en los valores de la red. Luego estos 30 individuos compitieron por la supervivencia jugando entre ellos; cada individuo compitió en cada turno con 5 oponentes elegidos aleatoriamente. Se otorgó 1 punto a cada victoria y se descontaban 2 puntos por cada derrota. Se seleccionaron los 15 mejores jugadores en relación a su puntuación total, y el proceso se repitió. La evolución continuó durante 840 generaciones más (aproximadamente seis meses de tiempo de computación).

Clase Puntuación
Gran Maestro +2.400
Maestro 2.200-2.399
Experto 2.000-2.199
Clase A 1.800-1.999
Clase B 1.600-1.799
Clase C 1.400-1.599
Clase J <200

El mejor individuo que surgió de esta selección fue inscrito como competidor en la página web de juegos http://www.zone.com. Durante un periodo de dos meses, jugó contra 165 oponentes humanos que componían una gama de niveles altos, desde clase C a maestros, de acuerdo con el sistema de clasificaciones de la Federación de Ajedrez de Estados Unidos (mostrado a la izquierda, con algunos rangos omitidos en aras de claridad). De estas partidas, la red neuronal ganó 94, perdió 39 y empató 32; en base a las clasificaciones de los oponentes en estas partidas, la red neuronal evolucionada era equivalente a un jugador con una puntuación media de 2.045,85, colocándola en el nivel experto -una clasificación superior a la del 99,61% de los 80.000 jugadores registrados en la página web. Una de las victorias más significativas de la red neuronal fue cuando venció a un jugador clasificado en la posición 98 de todos los jugadores registrados, cuya puntuación estaba tan sólo 27 puntos por debajo del nivel de maestro.

Las pruebas realizadas con un sencillo programa diferencial en las piezas (que basa sus movimientos solamente en la diferencia entre el número de piezas que quedan en cada lado) con una capacidad de anticipación de 8 movimientos demostró que la red neuronal era significativamente superior, con una puntuación de más de 400 puntos por encima. ``Un programa que se basa sólo en el número de piezas y en una búsqueda de ocho capas vencerá a muchas personas, pero no es un experto. La mejor red neuronal evolucionada sí lo es'' (p. 425). Aunque podía buscar posiciones dos movimientos más lejos que la red neuronal, el programa diferencial en las piezas perdió contundentemente 8 de 10 partidas. Esto demuestra concluyentemente que la red neuronal evolucionada no sólo está contando piezas, sino que de alguna manera procesa las características espaciales del tablero para decidir sus movimientos. Los autores señalan que los oponentes de zone.com que los movimientos de la red neuronal eran ``extraños'', pero su nivel global de juego fue descrito como ``muy duro'' o con términos elogiosos similares.

Para probar más a la red neuronal evolucionada (a la que los autores nombraron ``Anaconda'' porque a menudo ganaba restringiendo la movilidad de sus oponentes), jugó contra un programa de damas comercial, el Hoyle Classic Games, distribuído por Sierra Online (Chellapilla y Fogel 2000[14]). Este programa viene con un surtido de personajes incorporados, cada uno con un nivel de juego distinto. Anaconda se puso a prueba con tres personajes (``Beatrice'', ``Natasha'' y ``Leopold'') designados como jugadores expertos, jugando una partida con las rojas y otra partida con las blancas contra cada uno de ellos con una capacidad de anticipación de 6 movimientos. Aunque los autores dudaban de que esta profundidad de anticipación pudiera darla a Anaconda la capacidad de juego experto que demostró anteriormente, consiguió seis victorias seguidas de las seis partidas jugadas. Basándose en este resultado, los autores expresaron escepticismo sobre si el software Hoyle jugaba al nivel que anunciaba, ¡aunque debe señalarse que llegaron a esta conclusión basándose solamente en la facilidad con la que Anaconda le venció!

La prueba definitiva de Anaconda se detalla en Chellapilla y Fogel 2002[15], cuando la red neuronal evolucionada jugó contra el mejor jugador de damas del mundo: Chinook, un programa diseñado principalmente por el Dr. Jonathan Schaeffer, de la Universidad de Alberta. Con una puntuación de 2.814 en 1996 (mientras que sus competidores humanos más cercanos andan por los 2.600), Chinook incorpora un libro de movimientos de apertura proporcionado por grandes maestros humanos, un conjunto sofisticado de algoritmos de juego para la parte central de la partida, y una base de datos completa de todos los movimientos posibles cuando quedan en el tablero 10 piezas o menos, de manera que nunca comete un error durante un final de partida. Se invirtió una cantidad enorme de inteligencia y experiencia humana en el diseño de este programa.

Chellapilla y Fogel enfrentaron a Anaconda y Chinook en un torneo de 10 partidas, con Chinook jugando al nivel de 5 capas de anticipación, aproximándolo más o menos al nivel de maestro. Chinook ganó esta competición, cuatro victorias a dos, con cuatro empates. (Curiosamente, como señalan los autores, en dos de las partidas que acabaron con empate, Anaconda lideraba con cuatro damas mientras que Chinook tenía tres. Además, una de las victorias de Chinook vino tras una serie de movimientos con búsqueda de 10 capas sacados de su base de datos de finales de partida; unos movimientos que Anaconda, con una anticipación de 8 capas, no pudo anticipar. Si Anaconda hubiera tenido acceso a una base de datos de finales de partida de la misma calidad de la de Chinook, el resultado del torneo bien podría haber sido el de victoria para Anaconda, cuatro a tres). Estos resultados ``proporcionan un buen sustento a la puntuación de experto que se ganó Anaconda en www.zone.com'' (p. 76), con una puntuación global de 2.030-2.055, comparable a la puntuación de 2.045 que ganó jugando contra humanos. Aunque Anaconda no es un jugador invulnerable, es capaz de jugar competitivamente en el nivel experto y comportarse ante una variedad de jugadores de damas humanos extremadamente hábiles. Cuando uno considera los criterios de aptitud tan sencillos con los que se obtuvieron estos resultados, el surgimiento de Anaconda proporciona una espectacular corroboración del poder de la evolución.

Geofísica

Sambridge y Gallaguer 1993[56] utilizaron un algoritmo genético para los hipocentros de los terremotos basándose en datos sismológicos. (El hipocentro es el punto bajo la superficie terrestre en el que se origina un terremoto. El epicentro es el punto de la superficie directamente encima del hipocentro). Esto es una tarea sumamente compleja, ya que las propiedades de las ondas sísmicas dependen de las propiedades de las capas de roca a través de las que viajan. El método tradicional para localizar el hipocentro se basa en lo que se conoce como algoritmo de inversión sísmico, que empieza con la mejor estimación de la ubicación, calcula las derivadas del tiempo de viaje de la onda con respecto al punto de origen, y realiza una operación de matriz para proporcionar una ubicación actualizada. Este proceso se repite hasta que se alcanza una solución aceptable. (Este Mensaje del Mes, de noviembre de 2003, proporciona más información). Sin embargo, este método requiere información diferencial y es propenso a quedar atrapado en óptimos locales.

Un algoritmo de localización que no dependa de información diferencial o modelos de velocidad puede evitar esta deficiencia calculando sólo el problema directo -la diferencia entre los tiempos de llegada de la onda observados y predichos para distintas localizaciones del hipocentro. Sin embargo, un método de búsqueda exhaustivo basado en este método sería demasiado costoso computacionalmente. Éste, por supuesto, es precisamente el tipo de problema de optimización en el que destacan los algoritmos genéticos. Como todos los AGs, el propuesto por el artículo citado es paralelo en naturaleza -en lugar de mover un solo hipocentro más y más cerca hacia la solución, comienza con una nube de hipocentros potenciales que encoge con el tiempo hasta converger en una sola solución. Los autores afirman que su método ``puede localizar rápidamente soluciones casi óptimas sin una búsqueda exhaustiva del espacio de parámetros'' (p. 1.467), muestra ``un comportamiento muy organizado que produce una búsqueda eficiente'' y es ``un compromiso entre la eficiencia de los métodos basados en derivadas y la robustez de una búsqueda exhaustiva completamente no lineal'' (p. 1.469). Los autores concluyen que su algoritmo genético es ``eficiente para una verdadera optimización global'' (p. 1.488) y ``una herramienta nueva y poderosa para realizar búsquedas robustas de hipocentros'' (p. 1.489).

Ingeniería de materiales

Giro, Cyrillo y Galvão 2002[27] utilizaron algoritmos genéticos para diseñar polímeros conductores de electricidad basados en el carbono, conocicos como polianilinas. Estos polímeros, un tipo de material sintético inventado recientemente, tienen ``grandes aplicaciones tecnológicas potenciales'' y podrían abrir la puerta a ``nuevos fenómenos físicos fundamentales'' (p. 170). Sin embargo, debido a su alta reactividad, los átomos de carbono pueden formar un número virtualmente infinito de estructuras, haciendo que la búsqueda de nuevas moléculas con propiedades interesantes sea del todo imposible. En este artículo, los autores aplican un enfoque basado en AGs a la tarea de diseñar moléculas nuevas con propiedades especificadas a priori, comenzando con una población de candidatos iniciales generada aleatoriamente. Concluyen que su metodología puede ser una ``herramienta muy efectiva'' (p. 174) para guiar a los investigadores en la búsqueda de nuevos compuestos y es lo suficientemente general para que pueda extenderse al diseño de nuevos materiales que pertenezcan virtualmente a cualquier tipo de molécula.

Weismann, Hammel, y Bäck 1998[63] aplicaron algoritmos evolutivos a un problema industrial ``no trivial'' (p. 162): el diseño de revestimientos ópticos multicapa para filtros que reflejan, transmiten o absorben luz de frecuencias especificadas. Estos revestimientos se utilizan en la fabricación de gafas de sol, por ejemplo, o discos compactos. Su fabricación es una tarea precisa: las capas deben colocarse en una secuencia particular y con un grosor particular para producir el resultado deseado, y las variaciones incontrolables del entorno de fabricación, como la temperatura, la polución o la humedad, pueden afectar al rendimiento del producto acabado. Muchos óptimos locales no son robustos ante estas variaciones, lo que significa que una mayor calidad del producto se paga con una tasa mayor de desviaciones indeseadas. El problema particular considerado en este artículo también tenía múltiples criterios: además de la reflectancia, también se consideró la composición espectral (color) de la luz reflejada.

El AE actuó variando el número de capas de revestimiento y el grosor de cada una de ellas, y produjo diseños que eran ``sustancialmente más robustos a la variación de parámetros'' (p. 166) y tenían un rendimiento medio mayor que los métodos tradicionales. Los autores concluyen que ``los algoritmos evolutivos pueden competir e incluso superar a los métodos tradicionales'' (p. 167) de diseño de revestimientos ópticos multicapa, sin tener que incorporar un conocimiento específico del dominio en la función de búsqueda y sin tener que alimentar a la población con buenos diseños iniciales.

Es digno de mención otro uso de los AGs en el campo de la ingeniería de materiales: Robin et al. 2003[54] utilizaron AGs para diseñar patrones de exposición para un haz de electrones de litografía, utilizado para grabar estructuras a una escala menor a la del micrómetro en circuitos integrados. Diseñar estos patrones es una tarea muy difícil; es pesado y costoso determinarlos experimentalmente, pero la alta dimensionalidad del espacio de búsqueda frustra a la mayoría de los algoritmos de búsqueda. Deben optimizarse simultáneamente hasta 100 parámetros para controlar el haz de electrones y evitar la dispersión y efectos de proximidad que arruinarían las estructuras finas que se estén esculpiendo. El problema directo -determinar la estructura resultante como función de la cantidad de electrones- es sencillo y fácil de simular, pero el problema inverso de determinar la cantidad de electrones para producir una estructura dada, que es lo que se pretende resolver aquí, es mucho más difícil y no existe una solución determinista.

Se aplicaron algoritmos genéticos a este problema, ya que ``se sabe que son capaces de encontrar soluciones buenas a problemas muy complejos de alta dimensionalidad'' (p. 75) sin necesidad de proporcionarles información específica del dominio acerca de la topología del paisaje de búsqueda. Los autores del artículo emplearon un AG de estado estacionario con selección por rueda de ruleta en una simulación por computador, que produjo unos patrones de exposición ``muy bien optimizados'' (p. 77). En contraste, se utilizó un tipo de trepacolinas conocido como algoritmo bajacolinas-simplex (simplex-downhill) en el mismo problema, sin éxito; el método BS quedaba rápidamente atrapado en óptimos locales de los que no podía escapar, produciendo soluciones de poca calidad. Un híbrido entre los métodos del AG y el BS tampoco pudo mejorar los resultados ofrecidos por el AG en solitario.

Matemáticas y algoritmia

Aunque algunas de las aplicaciones más prometedoras y las demostraciones más convincentes de la potencia de los AGs se encuentran en el campo de la ingeniería de diseño, también son relevantes en problemas ``puramente'' matemáticos. Haupt y Haupt 1998[34] (p. 140) describen el uso de 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.

Ordenar una lista de elementos es una tarea importante en la informática, y una red de ordenación es una manera eficiente de conseguirlo. Una red de ordenación es una lista fija de comparaciones realizadas en un conjunto de un tamaño dado; en cada comparación se comparan dos elementos y se intercambian si no están en orden. Koza et al. 1999[41] (p. 952) utilizaron programación genética para evolucionar redes de ordenación mínimas para conjuntos de 7 elementos (16 comparaciones), conjuntos de 8 elementos (19 comparaciones) y conjuntos de 9 elementos (25 comparaciones). Mitchell 1996[47], p. 21, describe el uso de algoritmos genéticos por W. Daniel Hillis para encontrar una red de ordenación de 61 comparaciones para un conjunto de 16 elementos, sólo un paso más allá de la más pequeña conocida. Este último ejemplo es especialmente interesante por las dos innovaciones que utiliza: cromosomas diploides y, más notablemente, coevolución de huésped/parásito. Tanto las redes de búsqueda como los casos de prueba evolucionaron conjuntamente; se les otorgó mayor aptitud a las redes de ordenación que ordenaran correctamente un mayor número de casos de prueba, mientras que se les otorgó mayor aptitud a los casos de prueba que pudieran ``engañar'' a un mayor número de redes de búsqueda para que ordenaran incorrectamente. El AG con coevolución rindió significativamente mejor que el mismo AG sin ella.

Un ejemplo final de AG digno de mención en el campo de la algoritmia puede encontrarse en Koza et al. 1999[41], que utilizó programación genética para descubrir una regla para el problema de clasificación por mayoría en autómatas celulares de una dimensión, una regla mejor que todas las reglas conocidas escritas por humanos. Un autómata celular de una dimensión puede imaginarse como una cinta finita con un número dado de posiciones (celdas) en ella, cada una de las cuales puede contener el estado 0 o el estado 1. El autómata se ejecuta durante un número dado de pasos temporales; en cada paso, cada celda adquiere un nuevo valor basado en su valor anterior y el valor de sus vecinos más cercanos. (El Juego de la Vida es un autómata celular bidimensional). El problema de la clasificación por mayoría implica encontrar una tabla de reglas tal que si más de la mitad de las celdas de la cinta son 1 inicialmente, todas las celdas se ponen a 1; de lo contrario, todas las celdas se ponen a 0. El reto consiste en el hecho de que cualquier celda individual sólo tiene acceso a información acerca de sus vecinos más cercanos; por lo tanto, los conjuntos de reglas buenos deben encontrar de algún modo una manera de transmitir información sobre regiones distantes de la cinta.

Se sabe que no existe una solución perfecta a este problema -ningún conjunto de reglas puede clasificar con precisión todas las configuraciones iniciales posibles-, pero durante los últimos veinte años ha habido una larga sucesión de soluciones cada vez mejores. En 1978, tres investigadores desarrollaron la famosa regla GKL, que clasifica correctamente un 81,6% de los posibles estados iniciales. En 1993, se descubrió una regla mejor con una precisión de un 81,8%; en 1995 se encontró otra regla con una precisión de un 82,178%. Todas estas reglas requirieron para su desarrollo de un esfuerzo significativo por parte de humanos inteligentes y creativos. En contraste, la mejor regla descubierta mediante programación genética, descrito en Koza et al. 1999[41], p. 973, tiene una precisión total de 82,326% -mejor que cualquiera de las soluciones humanas desarrolladas durante las dos últimas décadas. Los autores señalan que sus nuevas reglas son cualitativamente distintas a las reglas publicadas con anterioridad, al emplear representaciones internas muy detalladas de la densidad de estados y conjuntos intrincados de señales para comunicar información a largas distancias.

Ejército y cumplimiento de la ley

Kewley y Embrechts 2002[39] utilizaron algoritmos genéticos para evolucionar planes tácticos para las batallas militares. Los autores señalan que ``planear una batalla militar táctica es una tarea compleja multidimensoinal que a menudo atormenta a los profesionales experimentados'' (p. 163), no sólo porque este tipo de decisiones a menudo se toman bajo condiciones de mucho estrés, sino también porque hasta los planes más sencillos requieren tomar en cuenta un gran número de variables y consecuencias: minimizar las bajas amigas, maximizar las bajas enemigas, controlar el terreno deseado, conservar recursos, etcétera. Los planificadores humanos tienen dificultades al tratar con las complejidades de esta tarea y a menudo deben recurrir a métodos ``rápidos y sucios'', como hacer lo que funcionase la última vez.

Para superar estas dificultades, los autores del artículo citado desarrollaron un algoritmo genético para automatizar la creación de planes de batalla, en conjunción con un programa gráfico de simulación de batallas. El comandante introduce el resultado deseado y el AG evoluciona automáticamente un plan de batalla; en la simulación utilizada, se tomaron en cuenta factores como la topografía del terreno, la cobertura vegetal, la velocidad del movimiento de tropas, y la precisión en los disparos. En este experimento también se utilizó la coevolución para mejorar la calidad de las soliciones: los planes de batalla de las fuerzas enemigas evolucionaron simultáneamente con los planes amigos, forzando al AG a corregir cualquier debilidad de su plan que pudiese explotar el enemigo. Para medir la calidad de las soluciones producidas por el AG, se compararon con planes de batalla para el mismo escenario producidos por un grupo de ``expertos militares experimentados... considerados muy capaces de desarrollar planes de acción para el tamaño de las fuerzas utilizadas en este experimento'' (p. 166). Estos avezados expertos desarrollaron su propio plan y, cuando la solución del AG estuvo acabada, se les dio la oportunidad de examinarla y modificarla como vieran conveniente. Finalmente, todos los planes se ejecutaron varias veces en el simulador para determinar su calidad media.

Los resultados hablan por sí mismos: la solución evolucionada superó tanto al propio plan de los expertos militares como al plan producido por sus modificaciones sobre la solución del AG. ``...Los planes producidos por los algoritmos automáticos tenían un rendimiento medio significativamente mayor al de los generados por los experimentados expertos militares'' (p. 161). Es más, los autores señalan que el plan del AG tenía sentido táctico. (Consistía en un ataque a dos flancos a la posición enemiga por pelotones de infantería mecanizada apoyados por helicópteros de ataque y exploradores terrestres, en conjunción con vehículos aéreos no tripulados realizando labores de reconocimiento para el fuego directo de artillería). Por añadidura, el plan evolucionado incluía unidades amigas individuales llevando a cabo misiones doctrinales -una propiedad emergente que apareció durante el curso de la ejecución, en lugar de ser especificada por el experimentador. En campos de batalla modernos, cada vez más conectados por red, el atractivo potencial de un algoritmo evolutivo que pueda automatizar la producción de planes tácticos de alta calidad debería ser obvio.

Naik 1996[48] informa de un uso interesante de los AGs en el cumplimiento de la ley, describiendo el software ``FacePrints'', un proyecto para ayudar a los testigos a identificar y describir a los sospechosos criminales. La imagen cliché del artista policía haciendo un dibujo del rostro del sospechoso en base a la descripción de los testigos es un método difícil e ineficiente: la mayoría de la gente no es buena describiendo aspectos individuales del rostro de una persona, como el tamaño de la nariz o la forma de la mandíbula, pero sin embargo son mejores al reconocer caras completas. FacePrints aprovecha esto utilizando un algoritmo genético que evoluciona dibujos de caras basándose en bases de datos de cientos de características individuales que pueden combinarse de infinitas maneras. El programa muestra a los testigos imágenes de rostros generadas aleatoriamente, y éstos escogen las que más se parecen a la persona que vieron; las caras seleccionadas mutan y se combinan para generar nuevas combinaciones de características, y el proceso se repite hasta que emerge un retrato preciso del rostro del sospechoso. En un caso real de atraco, los retratos definitivos que crearon los tres testigos eran sorprendentemente parecidos, y el dibujo resultante apareció en el periódico local.

Biología molecular

En los seres vivos, las proteínas transmembrana son proteínas que sobresalen de una membrana celular. Las proteínas transmembrana realizan a menudo funciones importantes como detectar la presencia de ciertas sustancias en el exterior de la célula o transportarlas hacia el interior de la célula. Para comprender el comportamiento de una proteína transmembrana es necesario identificar el segmento de la proteína que realmente está insertado en la membrana, lo que se conoce como dominio transmembrana. Durante las dos últimas décadas, los biólogos moleculares han publicado una serie de algoritmos cada vez más precisos para este propósito.

Todas las proteínas utilizadas por los seres vivos están formadas por los mismos 20 aminoácidos. Algunos de estos aminoácidos son hidrofóbicos, lo que significa que repelen el agua, y algunos son hidrofílicos, lo que significa que atraen el agua. Las secuencias de aminoácidos que son parte de un dominio transmembrana tienen probabilidad de ser hidrofóbicas. Sin embargo, la hidrofobicidad no es una característica definida con precisión, y no existe acuerdo sobre una escala para medirla.

Koza et al. 1999[41], capítulo 16, utilizaron programación genética para diseñar un algoritmo que identificase el dominio transmembrana de una proteína. Se le suministró al programa genético un conjunto de operadores matemáticos estándares con los que trabajar, además de un conjunto de funciones booleanas para la detección de aminoácidos que devuelven +1 si el aminoácido de una posición dada es el aminoácido que detectan o -1 en caso contrario. (Por ejemplo, la función A? recibe como argumento un número que corresponde a una posición dentro de la proteína, y devuelve +1 si el aminoácido de esa posición es alanina, denotado por la letra A, y si no devuelve -1). Una variable de memoria compartida contenía una cuenta de la suma total, y cuando el algoritmo acababa, el segmento proteínico se identificaba como dominio transmembrana si su valor era positivo. Con tan sólo estas herramientas, ¿haría falta más información para que un diseñador humano produjese una solución eficiente a este problema?

Las aptitudes de las soluciones producidas por la programación genética fueron evaluadas probándolas con 246 segmentos proteínicos de los que se conocía su condición de transmembrana. Luego se evaluó al mejor individuo de la prueba con 250 casos adicionales inéditos (out-of-sample), y se comparó su efectividad con la de los cuatro mejores algoritmos humanos para el mismo propósito. El resultado: la programación genética produjo un algoritmo de identificación de segmentos transmembrana con una tasa total de error del 1,6%-significativamente menor que las de los cuatro algoritmos humanos, el mejor de los cuales tenía una tasa de error del 2,5%. El algoritmo diseñado genéticamente, al que los autores llamaron regla 0-2-4, funciona de la manera siguiente:

Reconocimiento de patrones y explotación de datos

La competición en la industria actual de las telecomunicaciones es feroz, y se ha acuñado un nuevo término -``fuga''1- 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 2003[7] 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 real de 100.000 clientes proporcionada por una compañía 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 AE fue capaz de descubrir regularidades ocultas en la base de datos y ``fue capaz de hacer predicciones precisas de fuga con distintas tasas de fuga'' (p. 542), 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 AE 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).

Rizki, Zmuda y Tamburino 2002[53] utilizaron algoritmos evolutivos para evolucionar un complejo sistema de reconocimiento de patrones con una amplia variedad de usos potenciales. Los autores señalan que el reconocimiento de patrones es una tarea cada vez más realizada por algoritmos de aprendizaje automático, en particular, algoritmos evolutivos. La mayoría de ellos comienzan con un acervo de características predefinidas, del que un AE puede seleccionar combinaciones apropiadas para la tarea en cuestión; en contraste, este método