Algoritmos genéticos como modelo para la evolución de las especies
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.
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.
Comentarios
Solo algunas cosas que se me ocurren sobre este apasionante tema, del que aviso no sé nada:
el modelo debería tener en cuenta los sofisticados mecanismos moleculares que han desarrollado los seres vivos precisamente para corregir errores en el ADN, que funcionan precisamente eliminando las mutaciones.
me gustaría saber más acerca del efecto de los virus, que están como dios en todas partes, sacando y mentiendo trozos enteros de ADN en las celulas y cuyo papel solo empieza ahora a entreverse. Leí en algun sitio que se cree que los virus realizan un enorme trasvase interespecífico de información genética.
y ¿cómo se explica que algunas especies evolucionen rapidamente y otras se mantengan sin cambios durante cientos de millones de años?.
Aunque algunos se dediquen a conservar semillas de variedades vejetales menos productivas, estas ya no entran en el mercado de la aleatoriedad genetica.
-th
Primero, me alegra haberme explicado por que me costó reducirlo a un texto relativamente corto.
No conozco esos mecanismos, si existen probablemente habría que tenerlos en cuenta si quisieramos un modelo más preciso de la evolución. O tal vez simplemente equivalen a reducir la probabilidad de mutación.
Una propiedad curiosa de este método es que rápidamente encuentra una solución razonablemente buena, después acabar de llegar al óptimo le cuesta mucho más.
Si los bichos están casi al óptimo en su hábitat, me parece normal que hayan pocos cambios.
Me alegro que te gustara, como comentaba antes, me estrujé bastante la cabeza para no caer en tecnicismos.
Jeje, además de que es cierto, fue una pequeña concesión para que la gente se mentalice de la utilidad de los frikis y no nos eliminen o algo.
La foto ya la subí, está aquí. Es un recorte de la de cuerpo entero.
Juanb,
Se agradece. Me dejas con la duda de si eres JuanB.
Una vez más, Salviati se impone a Simplicio.
Brillante como la luz de las estrellas.
Leer tu blog es, sencillamente, apasionante.
"Un camino aleatorio pero limitado" si, es algo asi. Los seres vivos podrían haberse reproducido de otra manera, sin sexo, pero entonces la evolución es mucho más lenta. Los que transfieren información de forma más rápida a la larga siempre terminan ganando.
Hermano,
Alguien le dijo a Galileo lo mismo del telescopio. ¡Es un honor!
Ignis,
Muchas gracias pero ojo que se va a notar que somos amigos :)
Ei, una abraçada MOLT forta.
Parece claro que la reproducción sexual supuso un fenomenal avance para la biodiversidad, aunque también tenemos especies que se dividen por simple bipartición o por parterogénesis y han llegado a nuestros dias esquivando innumerables contratiempos. Quizás lo mejor sea una combinación de ambos, pues permite optimizar los resultados.
Sólo añadir que el problema que genera la habilidad está en continuo cambio, y quizas a mitad del proceso pueden cambiar las normas del juego.
Añadir también fenomenos catastróficos que eliminen, por ejemplo, la mitad de la muestra de una forma totalmente aleatoria... algo como lo que pasó con el meteorito que se fundió a los dinasaurios de sangre caliente, que simplemente seria un cambio de las normas del juego.
Excelente post.
Saludosss
La foto es impresionante, es muy extraña y hasta da miedito...
Besikis!!!!
Por cierto, sabes que estas censurado en Chian? Tu y todos los blogspots y algunas cosas mas...
Ahora tengo muchos posts atrasados por leer...
Si, un cambio en el medio ambiente es solamente un cambio en la función que mide la habilidad, lo que antes servía ahora no. Más todavía, como sabes perfectamente a veces son dos las especies que se van adaptando una a la otra como las flores y los polinizadores. O es una la que imita a otra, como en los sírfidos etc.
Todo ello, mucho más interesante que la historia breve del génesis.
Gise,
Me alegra que se entienda!
Jordi,
Si, digamos que la función objetivo tiene varios máximos. Justamente cuando ocurren esas cosas es cuando mejor funcionan los genéticos, los métodos de optimización basados en gradientes suelen ir saltando de uno a otro, los genéticos encuentran uno, que a veces no es el mejor de todos, y ya está.