Uno de los argumentos más citados contra de la teoría de la evolución es la extremada improbabilidad de que de el azar genere órganos tan complejos como por ejemplo los ojos o las alas, que deberían haber sido pensadas por un creador inteligente. Pero resulta que el mecanismo de la evolución permite que solamente se aprovechen los avances que las variaciones aleatorias introducen, llegando a construir cosas sorprendentemente complicadas a base de puro azar.Voy a tratar de explicar como es posible, describiendo el funcionamiento de los denominados algoritmos genéticos. Son métodos de cálculo basados en la teoría de la evolución, que se utilizan rutinariamente desde hace unos 20 años para resolver problemas especialmente difíciles mediante ordenadores. Y en mi opinión, merecen una mayor difusión.
Los algorismos genéticos utilizan una población de individuos, cada uno de ellos caracterizado por un código genético. Cada uno tiene una determinada habilidad para resolver un problema en el que estamos interesados. Por ejemplo, si se trata de construir un recipiente con el máximo volumen utilizando una cantidad mínima de chapa, los elementos de nuestra población serían diferentes recipientes de formas arbitrarias, y esa "habilidad" podría ser el cociente entre volumen y superficie. En el caso del ala, sería el perfil y la "habilidad", la poca resistencia al aire en relación a la sustentación. El código genético caracteriza la forma de cada elemento y por tanto su habilidad.
Vamos a trabajar con un ejemplo muy sencillo. Supongamos que queremos encontrar una palabra secreta, por ejemplo "FRIKOSAL". La población en este caso sería un conjunto de palabras de 8 letras y la habilidad sería el número de letras correctas. Por ejemplo, "FAAAAAAA" tendría una habilidad de 2. Este problema puede parecer muy fácil, pero si utilizamos 27 letras el número de palabras es de 27^8, son casi 300.000 millones de posibilidades. Acertarla es enormemente difícil.
¿Como funciona? Empezamos con una población totalmente aleatoria. La ordenamos según su habilidad y declaramos que la mitad menos hábil va a morir. Los otros, los mejores, van a reproducirse y sus hijos sustituirán a los muertos (dicho así suena fatal pero recordemos que no son más que letras). Para la reproducción, cada letra del hijo se toma aleatoriamente del padre o de la madre. Además, y esto es muy importante, de vez en cuando comentemos un error o mutación y la letra del hijo es escogida al azar. Por ejemplo, el hijo de "ABC" y "PQR" podría ser "AQR" (o "AQM", si en la tercera letra hubo una mutación). El modo exacto como esto se haga, la probabilidad de mutación, cuantos sobreviven, etc, no afectan demasiado: se encuentra rápidamente la palabra buscada, o la mejor ala.
La "habilidad" es una metáfora de la probabilidad de que el individuo sea capaz de crecer, llegar a adulto y aparearse (y no solamente ser muy "fuerte", si después no encuentra pareja no le sirve de nada). El sistema de reproducción, que toma unas partes del padre y unas de la madre, es bastante parecido al real, incluyendo las mutaciones. Sin mutaciones, de un padre negro y una madre blanca tan solo se obtienen tonos grises, y la solución podría ser por ejemplo, rojo. Claro está que la mayor parte de las mutaciones son contraproducentes, pero su habilidad disminuye y son eliminadas.
Veamos como funciona. Escribimos un programita C++ de prueba (¡solamente 110 líneas, podría haber sido BASIC del Spectrum!) y elegimos una población de 100 individuos aleatorios. Como era de esperar, son un desastre. El mejor de ellos tan solo tiene 2 letras correctas:
FMBNOXGZ = 2
A a siguiente generación, el mejor de todos es "SAZKOBAN", con tres letras correctas. Pero observad como el azar nos ha hecho ir un poco hacia atrás, hemos perdido la F inicial. No importa, la F correcta inicial seguramente está en otro individuo y es cuestión de tiempo que se reincorpore al óptimo (por esto es importante todo el patrimonio genético y no tan solo los mejores).
Van procediendo las generaciones y al llegar a 20, tenemos la respuesta:
...
18 FRIKOSAZ = 7
19 VRIKOSAL = 7
20 FRIKOSAL = 8
¡Hemos encontrado la respuesta con tan solo 50 x 20 = 1000 individuos, cuando existen casi 300.000 millones de combinaciones!
Si un pequeño paso en dirección al ojo (por ejemplo, un detector de luz) representa una mejora, la evolución la encuentra. Debe quedar claro que en ningún momento hemos utilizado la solución, y que esto puede aplicarse a problemas mucho más complicados. Los algoritmos más sofisticados incluyen por ejemplo "islas" en las que subpoblaciones evolucionan separadamente.
Todo esto, si es que me he sabido explicar (¿es así?), pretende tan solo ilustrar la gran diferencia entre variaciones aleatorias y evolución. Está claro, la realidad es mucho más compleja, y yo no soy biólogo (ni matemático ni informático). También quiero decir que siempre hay quien hace una lectura racista de estas cosas, con la que obviamente yo no estoy en absoluto de acuerdo.






















