Algoritmos Evolutivos (primera parte)

La evolución como selección de estrategias de vida se puede destilar hasta sus mínimos componentes: individuos, algoritmos y herencia. Estos elementos bastan para reproducir el fenómeno evolutivo desde el neodarwinismo más radical: la selección del más eficaz va mejorando progresivamente la adaptación de toda la población hasta que, finalmente, surge el individuo perfecto o, al menos, uno que lo hace bastante bien. En esta sencilla aproximación no sólo se escriben novelas con monos afortunados, sino que también se puede ensayar la importancia de la mutación y el sexo, como agentes similares pero de efecto distinto. Y no sólo esto; la pureza del razonamiento es tal que ha sido una de las primeras contribuciones de la biología a las ciencias computacionales.

Evolution as selection of life strategies can be distilled to its minimum components: individuals, algorithms and inheritance. These elements are enough to reproduce the evolutionary phenomenon from the most radical neo-Darwinism basis: the selection of the fittest is gradually improving the adaptation of the entire population until the perfect individual or, at least one that does pretty well, arise. In this simple approach not only novels are written by lucky monkeys, but also we can test the importance of mutation and sex, as similar agents but completely different effect. And not only that; this is such a neat reasoning that has been one of the first contributions from biology to computer science.

Introducción

Vivimos en plena euforia virtual: hablas con personas que nunca has visto ni verás, visitas lugares que nunca pisarás, haces negocios con mercancías que ni siquiera existen, recibes e-mail desde todo el mundo sin salir de tu casa. El ordenador –internet– está alterando nuestro concepto del mundo, cada vez nos cuesta más distinguir lo real de lo virtual. En estos días cibernéticos, parece el momento adecuado para buscarle un sosias virtual a uno de los fenómenos biológicos más aparentes y que más admiración despierta entre los estudiantes de biología cuando lo comprenden por primera vez: la evolución. ¡Destilemos los rudimentos de la evolución en un ordenador y exploremos virtualmente los procesos que la mueven a lo largo del tiempo!

Para esta tarea, el lector con habilidades informáticas puede lanzarse a codificar los entresijos neodarwinistas en el lenguaje que le mole o, si no se quiere entretener, puede recurrir al programa e-Voluzión (Figura 1) cuyo nombre remeda un tipo electrónico de evolución, del mismo modo que «e-mail» hace lo propio con el correo celulósico. Este programa es libre y está disponible en Voluzion.7z (aunque tiene más de cinco lustros y puede dar alguna pejigera en los sistemas modernos). Antes de describir el uso del programa, convendría describir cómo funciona. No cómo está programado, sino qué ideas se han tomado para crearlo. Como dice Richard Dawkins, autor de El relojero ciego [1] uno de los libros divulgativos más célebres sobre la teoría de la evolución: « Quienes, como yo, no sean matemáticos, podrán encontrar en el ordenador un poderoso amigo de la imaginación».

Evolución de la eficacia en una población con e-Voluzión. La línea verde representa la eficacia máxima en cada momento, la roja es la mínima y la azul es la media de la población. Para comprender la figura entera tendrá que leer un poco más de texto.

Evolución de la eficacia en una población con e-Voluzión. La línea verde representa la eficacia máxima en cada momento, la roja es la mínima y la azul es la media de la población. Para comprender la figura entera tendrá que leer un poco más de texto.

El ordenador, aparte de llevarnos por mundos virtuales, también nos permite crear mundos virtuales donde ensayar las reglas del mundo real. El nivel de abstracción al que se recurre en e-Voluzión es tal que, posiblemente, no tenga ninguna aplicación práctica en biología, pero esto no debe desanimar al estudiante, sino al contrario: el reducir el análisis de un fenómeno al mínimo de sus componentes es un ejercicio que facilita la comprensión del mismo, y su extrapolación a casos reales. El proceso de abstracción necesario para «e-voluzionar» se produce en las siguientes etapas:

1. Identificación de los elementos y de los procesos

¿Cuáles son los elementos indispensables para explicar el fenómeno evolutivo? Vamos a detallar unos cuantos y luego los perfilaremos. El individuo es la pieza clave, pues es el que sufre (o disfruta) los procesos biológicos y es el que se evalúa en términos de eficacia biológica. De lo bien o mal que se desenvuelva en el ambiente donde viva, dependerá su éxito a la hora de dejar descencencia. Bien, ya tenemos aquí los elementos indispensables: individuos, ambiente y descendencia.

¿Cuáles son los procesos que actúan? Lo más inmediato es identificar algún mecanismo que evalúe las aptitudes del individuo para subsistir. Tal mecanismo ha de tener en cuenta el ambiente, dado que las aptitudes de un organismo pueden ser estupendas en un ambiente determinado y completamente inútiles en otro. La naturaleza nos aturde con tal número de estrategias de vida, formas de alimentación y diversidad metabólica que la identificación a priori de tal mecanismo es completamente imposible; se recurre, entonces, a la evaluación a posteriori de estas aptitudes, fundiéndolas en una nota única que el individuo obtiene una vez concluido su objetivo: procrear. A esta nota única se le llama « eficacia biológica» ~~ —fitness en inglés, término más conocido, aunque mucho más difuso que el castellano, tampoco muy aclaratorio, lo cual demuestra de nuevo nuestra incapacidad para definir las aptitudes de los individuos– y se calcula como la fracción que su descendencia supone en la siguiente generación. También es necesario un mecanismo de herencia: algún proceso que transmita las habilidades de los progenitores a su prole; si no, la evolución sería una mera sucesión de palos de ciego. El último mecanismo necesario es uno que introduzca variabilidad entre los individuos, más concretamente, entre las aptitudes que los individuos pueden mostrar; también analizaremos qué efecto tiene este proceso sobre la evolución. Bien, ya tenemos aquí los mecanismos indispensables: selección del más eficaz, herencia de las aptitudes y fuente de variabilidad.

2. Premisas de la evolución

Con sólo estos rudimentos en mente, ya podemos establecer algunas premisas acerca del funcionamiento de la evolución:

i) La selección es un proceso que actúa sobre el individuo. Dado que la eficacia biológica es una característica individual, el mecanismo seleccionador evalúa individuos y los premia con una descendencia proporcional a su eficacia. Es importante recordar esto, pues después diremos con ligereza cosas como « el alelo que se selecciona es…» ~ y otras similares, en las que parece que los sujetos de la selección pueden ser otros entes distintos al individuo. La forma correcta de expresar la frase anterior debería ser « como resultado de la selección de individuos, el alelo más común es…», o algo así. Igualmente, no tiene sentido hablar de « la eficacia biológica del alelo…». Todo esto quedará claro en cuanto hagamos una simulación.

ii) La evolución es un fenómeno que ocurre a nivel de población. Los individuos no evolucionan, sino que es la población la que va cambiando en su composición de tal forma que van quedando en ella las mejores eficacias biológicas, portadas por las líneas genealógicas de los individuos que se van seleccionando. Como consecuencia de la selección natural, la eficacia media de la población (esto es, la media de las eficacias de todos los individuos que la componen) va aumentado: tras cierto número de generaciones, el individuo medio de la población será muy distinto de sus ancestros –casi siempre más eficaz en el ambiente donde vive– y podremos decir que la especie ha evolucionado. Aparece aquí una de las más laxas definiciones de especie: conjunto de rasgos que caracterizan biológicamente a un grupo más o menos homogéneo de organismos. Las especies, entes abstractos considerados como compendio de aptitudes, están sometidas a la evolución; los organismos individuales no.

iii) La evolución es un proceso con una dirección determinada, pero multitud de caminos posibles. Desde el punto de vista termodinámico, la evolución es un proceso irreversible: una vez alcanzado un grado de eficacia biológica (que podríamos considerar también eficacia termodinámica), y según las asunciones que hemos realizado, la única forma en que podría disminuir tal grado es por culpa de una catástrofe, que no ha de ser obligatoriamente meteórica ni climática, sino que muy bien podría tratarse de un cataclismo estadístico. Si la herencia de una determinada aptitud está asegurada por su magnífica eficacia biológica, la única forma de que deje de propagarse a lo largo de los sucesivos linajes es que aparezca una nueva estrategia que la desplace de su privilegiado lugar. Esta nueva estrategia podría ser derivada de la anterior, o podría tratarse de una auténtica revolución pero, según las reglas establecidas, sólo podría propagarse si la eficacia biológica de los individuos que la poseen fuese mayor (o igual) que la de los organismos que utilizan la estrategia antigua; en cualquier caso, la eficacia biológica sólo podría aumentar (o permanecer constante). Ahora bien, si el ambiente cambia drásticamente, las estrategias seleccionadas –obsérvese ahora como empezamos a abreviar con ligereza las frases anteriores, más correctas pero también más engorrosas– se volverían ineficaces, permitiendo la selección de otras que hasta la fecha habían estado condenadas a la extinción. El otro motivo, independiente del anterior, que puede concurrir para provocar un descenso de la eficacia es la fluctuación estadística, azar del muestreo, deriva genética, fluctuación estocástica, y demás nombres para el mismo fenómeno: las poblaciones son de tamaño finito y, por tanto, la frecuencia con la que ocurre determinado hecho no coincide exactamente con la probabilidad del mismo. Podremos observar este dinamismo en nuestras simulaciones de la evolución.

La visión más sintética de la evolución neodarwinista necesita tres elementos: algo de donde elegir (diversificación), alguna forma de evaluación (selección) y una manera de perpertuar logros (reproducción).

La visión más sintética de la evolución neodarwinista necesita tres elementos: algo de donde elegir (diversificación), alguna forma de evaluación (selección) y una manera de perpertuar logros (reproducción).

iv) El motor de la evolución es la variabilidad. Para que actúe la selección, ha de existir algo que seleccionar. Más concretamente, ha de existir un abanico de estrategias diferentes de entre las cuales se pueda elegir la más apta. El proceso de selección empobrece la variabilidad, al favorecer la proliferación de una estrategia; pasado el tiempo suficiente, de no existir alguna fuente que surta de variabilidad a la población, la estrategia más apta será la única existente en la población, no existirán entonces alternativas y se detendrá la evolución. ¿Cuáles son las fuentes de variabilidad que posibilitan la aparición de nuevas estrategias? Básicamente dos: la mutación y la reproducción sexual. Ambos fenómenos generan continuamente nuevos genotipos (la forma codificada que permite la heredabilidad de la estrategia de vida) a partir de los ya existentes. Estos nuevos genotipos, corporeizados en forma de individuos, serán evaluados y seleccionados y la constante aparición de nuevas variantes constituye una amenaza continua (aunque poco temida, como ya veremos) hacia las estrategias –genotipos– ya instituidas.

Mientras le sale el Quijote, este mono escribirá todos los libros que Borges describe en su Biblioteca de Babel. Considere una máquina con sólo 28 teclas (de la A a la Z, más el espacio) con la que hay que escribir 24 caracteres en secuencia exacta. Si se aprieta las teclas al azar, se puede generar 2824 = 5.4×1034 secuencias distintas: si el mono que la gobierna tardase 1 segundo en escribir cada sentencia y pudiésemos colocar a una multitud de monos, trabajando sin cesar codo con codo, y ocupando toda la superfie de los continentes, tardarían más de 12 billones de años en lograr al azar la primera frase de Don Quijote de la Mancha, es decir, más de veinte mil veces la duración estimada de nuestro sistema solar… ¡sólo para la primera frase! No es extraño que los antiguos pensaran en que alguien había escrito conscientemente la historia de la vida. No obstante, vea la Figura 4.

Las fuentes de variabilidad generan alternativas de un modo completamente al azar, motivo que provocó duras críticas a la teoría de la evolución: en su libro El relojero ciego, Richard Dawkins establece un paradigma de la evolución comparándola con la actividad de un constructor de relojes invidente, ¿cuál es la probabilidad de que, montando las piezas al azar, alguno de los relojes llegue a funcionar? Una versión tal vez más conocida es la de un mono que pulsa –aporrea– teclas al azar en una máquina de escribir ¿cuánto tiempo pasará hasta que el mono escriba, casualmente, el Quijote? (en la versión original el objetivo es la obra completa de Shakespeare que, dicho sea de paso, le sería mucho más fácil al mono, dada la laxitud de la gramática anglosajona).

Doce monos aplicando las reglas de la evolución en forma de algoritmo genético (vea el texto más adelante) tardan sólo 6500 rondas en tener éxito. Al principio, el mejor de los 12 sólo consigue un 8% del objetivo pero, muy pocas rondas después, ya se vislumbra la frase. Este personal cabría perfectamente en cualquier departamento de universidad y, protegidos por los estatutos, al ritmo de una ronda por día sólo echarían unos 20 años (descontando festivos y días de asuntos propios) en emular a Cervantes; tesis más livianas se han escrito en más tiempo...

Doce monos aplicando las reglas de la evolución en forma de algoritmo genético (vea el texto más adelante) tardan sólo 6500 rondas en tener éxito. Al principio, el mejor de los 12 sólo consigue un 8% del objetivo pero, muy pocas rondas después, ya se vislumbra la frase. Este personal cabría perfectamente en cualquier departamento de universidad y, protegidos por los estatutos, al ritmo de una ronda por día sólo echarían unos 20 años (descontando festivos y días de asuntos propios) en emular a Cervantes; tesis más livianas se han escrito en más tiempo…

El genotipo de cualquier ser vivo es más complicado –contiene más información y requiere la misma precisión « gramatical» ~ — que cualquiera de las obras citadas, así que cuesta creer que haya sido producto del azar. Este fue el argumento principal para rebatir la teoría evolucionista. Sin embargo, ya veremos en nuestra simulación que el mecanismo de selección combinado con la herencia apremian la evolución: un ocasional acierto parcial (p. ej. « An in lagar du la Mencha») no es completamente descartado, sino que se premia con el recuerdo y sirve como base para posteriores modificaciones. Este sistema de acumulación de aciertos es sorprendentemente potente y rápido. Tanto que se ha constituido en una técnica matemática de resolución de problemas muy difíciles, de la que a continuación hablaremos.

3. Algoritmos genéticos: un método biológico para resolver problemas matemáticos

Habitualmente suele ser al revés: los biólogos continuamente pedimos prestados métodos, modelos y técnicas desde las matemáticas y la física para resolver nuestros casos de estudio y encontrar nuevos enfoques en biología. De esta forma es cómo encontramos concentraciones, abundancias de individuos, cinéticas enzimáticas, coeficientes e índices de todo tipo, etc. El procedimiento que se sigue para resolver un problema típico es generalmente un camino único: una sucesión de pasos o instrucciones que conducen hasta la solución. A esta secuencia de instrucciones se le llama « algoritmo» ~ (esta palabra procede del sobrenombre del célebre matemático árabe Mohamed ben Musa, al-Jwarizmi). El algortimo para realizar una multiplicación de dos números se aprendía en EGB –ahora en la ESO tengo mis dudas y por eso me entretengo– era el siguiente, cuando uno de los números constaba de sólo un dígito:

  1. Multiplicar el número de un sólo dígito por el primer dígito de la derecha del número más largo.
  2. Anotar el número resultante. Si este número tiene dos dígitos, anotar sólo el dígito menos significativo –el de la derecha– y recordar el más significativo.
  3. Multiplicar el número de un sólo dígito por el siguiente dígito del número largo y sumar al resultado el dígito reservado anteriormente, si existiese. Anotar el resultado a la izquierda del que ya está escrito, pero sólo el dígito menos significativo, recordando el otro.
  4. Repetir el paso 3 hasta que se acaben los dígitos del primer número y anotar el último dígito recordado a la izquierda de todos los demás.

Observe que el algoritmo no es la solución del problema, sino un camino para llegar a ella, y sirve para todos los casos que se puedan presentar (siempre que cumplan las condiciones para las que se ha construido el algoritmo, en este caso, si el número pequeño tuviera dos o más dígitos, el algoritmo necesario sería otro, similar a éste, pero más complejo). Una propiedad interesante de los algoritmos es que, aunque la solución sea única, pueden existir varios algoritmos distintos para encontrarla. El ejemplo anterior es el algoritmo estándar para multiplicar pero no es el único: algunas personas tienen una habilidad especial para el cálculo y son capaces de realizar multiplicaciones asombrosas con inusitada rapidez; no utilizan el algoritmo estándar, sino otro mucho más rápido, más eficaz, aunque requiere mayor capacidad de concentración porque no es sólo un dígito el que hay que recordar entre paso y paso, sino muchos más o combinaciones de ellos.

Un algoritmo para resolver problemas, más acorde con las circunstancias educativas actuales.

Un algoritmo para resolver problemas, más acorde con las circunstancias educativas actuales.

Vale, vale, pero… ¿qué tiene la biología que ofrecer al mundo de los algoritmos? Imaginemos que deseamos resolver un problema y nos embarcamos en el diseño de un algoritmo. Después de varios intentos sólo hemos encontrado aproximaciones a la solución, con algunos algoritmos nos hemos acercado más y con otros menos. ¿Se podría construir un algoritmo mejor tomando partes de los que no funcionan del todo bien? Por supuesto que sí, y es la forma en la que actúa el ser humano cuando ha de resolver un problema, juntar las partes que funcionan y eliminar las que no. Claro que el humano realiza conscientemente esas acciones con un objetivo determinado y sabe qué partes tomar y cuáles no. Casi siempre, porque hay problemas aparentemente sencillos que no tienen una solución sencilla, como el famoso problema del turista, con el que nos encontramos todas las vacaciones: dado el mapa de $n$ ciudades, enlazadas por una red de carreteras, encontrar el circuito más corto que pase por todas ellas. El algoritmo requerido en este problema es muy sencillo, simplemente, dada una ciudad, determinar cuál debe ser la siguiente en la ruta. Sin embargo, la solución se suele encontrar por tanteo y casi nunca quedamos convencidos de que la ruta finalmente elegida sea realmente la más corta, pero al menos sí que es la más corta de todas las que hemos ensayado. ¡Esta es la forma en la que progresa la evolución, tanteando soluciones para escoger finalmente la más eficiente, aunque tal vez no sea la ideal! Hay muchos problemas que han de resolverse por tanteo, hasta encontrar un algoritmo que se aproxime lo suficiente a la solución.

La codificación del algoritmo es algo que se parece mucho a un programa de ordenador, una ristra de instrucciones, de ceros y unos. Con un poco de cuidado, se pueden codificar los algoritmos de forma que, al intercambiar partes entre ellos, sigan funcionando. Así surgen nuevos algoritmos a partir de los existentes, que generan nuevas aproximaciones a la solución. Si se mezclan las partes al azar y además añadimos algún cambio puntual al azar, lo más probable es que las nuevas aproximaciones sean bastante peores que las ya existentes, pero podría darse la casualidad de que surgiese una combinación superior: hemos creado algoritmos genéticos que se seleccionan con las mismas premisas que las descritas para la evolución natural.

El concepto de algoritmo genético fue desarrollado a finales de los sesenta por John Holland [2], un programador de computadoras y también psicólogo que pretendía que aquellas aprendiesen por sí mismas (la técnica de programación se denominó originalmente planes reproductivo, y luego se popularizó como algoritmos genéticos a raíz de la publicación de su libro en 1975. Holland se inspiró en la teoría de la evolución natural y creó un método de resolución de problemas muy potente, que es capaz de encontrar soluciones, o al menos aproximarlas, en casos en los que el análisis tradicional fracasa decepcionantemente, como la encrucijada del turista. Nosotros vamos a recorrer el camino inverso, utilizaremos el método de algoritmos genéticos para resolver un problema e iremos interpretando biológicamente cada una de las características que vayan apareciendo. No es un mero paralelismo, sino que ambos procesos son exactamente el mismo, en su forma natural y artificial.

4. Cómo destilar los elementos y procesos de la evolución en un ordenador

Para describir cibernéticamente a los individuos de nuestra población virtual vamos a recurrir a lo que en ciencias de la computación denominan autómata finito. Un autómata está dotado de un sencillo aparato de decisión: cuando le llega una señal, cambia de estado y responde con otra señal. El repertorio de señales que puede recibir o emitir y el número de estados en los que puede estar son ambos finitos, de ahí el apellido. Los autómatas finitos son entes virtuales que pueden tomar cuerpo en forma de relés eléctricos, microchips de silicio o juguetes mecánicos, entre otros muchos objetos reales; lo realmente importante es cómo funcionan. Un organismo vivo funciona exactamente igual, recibe una señal (un indicio de comida, por ejemplo), cambia de estado (se vuelve hambriento, digamos) y responde en consecuencia (se mueve en dirección a la comida). Reconozco que esto es el colmo de la abstracción, ya que las señales que recibe y emite un organismo vivo son analógicas y muy complejas, pero todo es cuestión de proponerse digitalizar el comportamiento de los individuos en autómatas. En el fondo, las posibles señales vitales y los posibles estados de los organismos son enormemente variados, aunque finitos también.

El inocente burro cree que ha encontrado comida, responde alegre y se la zampa cuando, en realidad, es un simple chorro de información el que le hace comportarse así, siguiendo fielmente el algoritmo grabado en sus genes.

El inocente burro cree que ha encontrado comida, responde alegre y se la zampa cuando, en realidad, es un simple chorro de información el que le hace comportarse así, siguiendo fielmente el algoritmo grabado en sus genes.

El comportamiento de un autómata finito, igual que el de un organismo, se puede codificar en un cromosoma. Los genes del autómata son la codificación de los algoritmos que determinan su funcionamiento. Veamos a continuación la representación de uno de estos autómatas (Figura 7).

Diagrama de comportamiento de un autómata celular de tres estados. Diagrama inspirado en [3].

Diagrama de comportamiento de un autómata celular de tres estados. Diagrama inspirado en [3].

Este autómata –a partir de ahora también le llamaremos organismo, para no causarle menoscabo– puede encontrarse en 3 estados (A, B, C) y se comporta de la siguiente forma: supongamos que, casualmente, se encontrase en el estado A y recibiera una señal ambiental en forma de 1, entonces el organismo cambiaría al estado B y respondería con un 1. Si ahora recibiera otro 1, pasaría al estado C y respondería con un 0. Una nueva señal en forma de 0 no alteraría el estado del organismo, pero le haría responder con un 1. Y así. Este es el comportamiento de un autómata determinado, otros autómatas se comportarán de otra forma y responderán a las señales ambientales de otra manera. ¿Cuántos organismos triestado distintos pueden existir? Aproximadamente, un par de docenas (esta pregunta se la dejamos a los matemáticos expertos en combinatoria, pues ahora mismo nos importa poco; sean los que fueren, se trata de un número finito). ¿Cómo se puede codificar el comportamiento de este organismo en un cromosoma? Pues es muy sencillo, construyamos una tabla de doble entrada donde pondremos los distintos estados en filas y las distintas señales que pueden recibir en columnas. En cada intersección colocaremos la señal de respuesta y el estado al que cambia. De esta forma, el organismo anterior se puede codificar así:

0 1
A 0C 1B
B 1C 0C
C 1C 0A

y para construir el cromosoma, sólo hemos de encadenar las celdas, empezando por arriba desde izquierda a
derecha:

0 C 1 B 1 C 0 C 1 C 0 A

cada uno de los 12 elementos de este cromosoma es un gen. Más correctamente, el símbolo C que ocupa el segundo locus del cromosoma es un alelo del gen encargado de decidir a qué estado cambiará el organismo cuando se encuentre en A y reciba un 0 ambiental. Cada gen tiene un trabajo encomendado y su alelo es la forma que en ese trabajo se realiza. En los autómatas triestado, los loci impares están ocupados por genes con dos alelos (0 y 1) y los pares, por genes con tres alelos (A, B y C).

Al igual que en el mundo real, cada gen es la unidad autónoma mínima de codificación. Dos cromosomas pueden intercambiar genes y siguen funcionando. También es interesante observar que la posición de un gen en el cromosoma es también una información importante. Por ejemplo, el gen que se encarga de la respuesta del organismo cuando está en el estado B y recibe un 1 ocupa el locus 7. Su trabajo está intimamente relacionado con el gen del locus 8, (el que decide el próximo estado cuando se da la circunstancia anterior). Así, los loci 7 y 8 están ocupados por un grupo funcional de genes, precisamente los que se encargan del comportamiento del individuo cuando su estado es B y recibe un 1. De la misma forma, podemos encontrar grupos funcionales de jerarquía mayor, como el formado por los loci 9, 10, 11 y 12, que son el grupo encargado de determinar el comportamiento del individuo en estado C.

¿Cómo evaluar la eficacia de un organismo? Aquí volveremos a realizar un alarde de abstracción: un organismo será tanto más eficaz cuanto más capaz se muestre para actuar en concordancia con el futuro que le espera. En el mundo real esto equivale a una capacidad para predecir la procesión ambiental y actuar en consecuencia. Es difícil no dejarse atrapar por las expresiones finalistas cuando rondamos los conceptos de eficacia biológica: el cuento de la cigarra y la hormiga es una auténtica aberración (evolutivamente hablando, aunque no cabe duda de su capacidad moralizante). La hormiga se afana recolectando comida para atravesar la carestía del futuro invierno, mientras que la cigarra retoza al sol veraniego, ajena al negro destino que se le avecina. Considerar a la hormiga «más eficaz» según el criterio expresado arriba sería un error. Ninguna de ambas actúa con una finalidad, sino como está programado en su código genético. La sorprendente capacidad de la evolución para adaptar organismos al ambiente nos hace ver a menudo finalismo en sus acciones, pero sólo se trata de conductas seleccionadas entre muchísimas otras; sólo vemos la estrategia exitosa conseguida a base de tantear y descartar innumerables estrategias anteriores. El hecho de que observemos hormigas y cigarras en la naturaleza nos indica que ambas estrategias son hábiles; son distintos algoritmos que conducen a la misma solución. Para nuestros organismos virtuales tenemos un método muy sencillo para despojarlos de finalismo y evaluar su eficacia. Si consideramos la procesión de sucesos ambientales como un flujo continuo de información (ceros y unos), la aptitud del autómata para predecir la secuencia de información será una medida de su eficacia. Consideremos, pues, la respuesta del autómata como una predicción del futuro inmediato que le espera. Imaginemos la siguiente secuencia ambiental

0 1 1 0 1 0 1 0 0 1

de estar inmerso en este ambiente, nuestro organismo de la Figura 7 habría respondido con esta secuencia (supongámoslo en un estado inicial A):

0 0 1 1 0 0 0 0 1 0

¿Cuál ha sido su capacidad de predicción? Sólo tenemos que desplazar la secuencia ambiental un dígito hacia adelante, y compararla dígito a dígito con las respuestas. En este caso, el organismo ha pronosticado correctamente cinco cambios ambientales de los nueve que podría haber acertado. Su eficacia, mediocre, es del 55%. Un organismo que actuase inopinadamente (con un cromosoma que lo único que hiciera fuese generar respuestas aleatoriamente) habría obtenido un 50% como media de aciertos, pero no podemos culpar a nuestro organismo ya que, tanto él como la secuencia ambiental han sido obtenidos al azar. Seguro que ya se está preguntando: ¿Existe algún organismo que prediga exactamente tal ambiente? ¿Es un cromoma único o existen más variantes que podrían funcionar con un cien por cien de eficacia?

Tal vez se vea tentado para resolver estas dos preguntas de una manera clásica, es decir, intentando diseñar un cromosoma perfecto con nuestro conocimiento de la secuencia ambiental. Sin duda es posible pero, mientras el lector intenta encontrar ese genotipo perfecto, yo voy a poner en marcha mi evolución virtual para ver si es capaz de encontrarlo.

(Continuará…)

Referencias

  1. Dawkins R. El relojero ciego. Labor, Madrid. 1989.
  2. Holland JH. Adaptation in natural and artificial systems: an introductory analysis with applications to biology, control, and artificial intelligence. Univ. Michigan Press, Michigan. 1975.
  3. Dewney AK. Juegos de ordenador. Investigación y Ciencia 112: 94-98. 1986.