Evolución por selección natural… en el ordenador

Planteamiento

Hoy traigo un experimento curioso y entretenido. Usaremos un ordenador para ver  la evolución biológica por selección natural.

En el mundo de bits que he programado los individuos tienen dos dimensiones y su forma corporal está limitada dentro de un cuadrado de 9 x 9 células (celdas cuadradas de Excel). Aquí vemos uno de los individuos de mi simulación:

ind

Son autótrofos, como casi todos los vegetales, pues se alimentan absorbiendo luz que viene de arriba abajo. Cuanto más arriba está una célula más luz le llega. En concreto, un 10% extra cada fila. A la fila inferior le llega 1 unidad de luz. A la superior, 2,1 unidades de luz. Y, como sería esperable en el mundo real, la luz que llega a cada célula disminuye conforme aumenta el número de células que hay por encima de ella (¡pues todas absorben luz!). En concreto, una célula absorbe el 50% de la luz que le llega y deja pasar el resto.

La penúltima condición para dar vida a estos «plantomorfos», como yo les he llamado, es que crecen ortogonalmente (hacia arriba, abajo, derecha e izquierda), pero no diagonalmente. Además solo crecen desde una célula activa (que yo he denominado, obviamente, una yema). La célula inicial es la central de la fila inferior:

sim 11

En el individuo adulto cada célula necesita 0,5 unidades de energía para subsistir (crecimiento y metabolismo basal, podríamos decir). Esta energía se resta de la absorbida en forma de luz, tal y como se explicó más arriba. La energía sobrante se dedica a la reproducción, esto es, a la producción de esporas (¡esporas, pues son asexuales!), en concreto 4 esporas por cada unidad de energía disponible para reproducción.

De este modo, por ejemplo, el organismo más sencillo (una célula, como en la imagen anterior) absorbe 1 unidad de luz, pues es la cantidad de luz que llega a la fila inferior y no tiene células por encima que le hagan sombra. Como tiene una sola célula, dedica 0,5 unidades de energía a subsistir y el resto, 0,5 unidades, se destinan a la reproducción. Ésta cantidad, multiplicada por 4, nos da el número de esporas: 0,5 x 4 = 2 esporas. En un organismo más complicado los cálculos parecen más difíciles, pero la hoja de cálculo los hace en un instante.

Así pues las preguntas evolutivas son evidentes:

  1. ¿Cuál es el diseño corporal óptimo, es decir, el que más esporas produce?
  2. ¿Puede simularse la selección natural (de estos plantomorfos) en el ordenador? Y, si es que sí…
  3. ¿Llegará la evolución al diseño óptimo?

1. El diseño óptimo

Vamos con la búsqueda del diseño corporal óptimo (el que más esporas produce). Como la fila superior es la más iluminada, parece lógico que el diseño óptimo tenga una barra horizontal arriba. Y para sustentarse, un tronco recto desde la célula inicial:

Sin título-2

Según el programa este diseño produce 50 esporas… no está nada mal. Es 25 veces más que el organismo más simple.

¿Y con dos filas arriba, mejorará el número de esporas?

Sin título-3

¡Uau, 15 esporas más! Un diseño así borraría del mundo a los anteriores plantomorfos con sus 50 esporas. ¿Y si añadimos otra fila más?

Sin título-4.gif

¡Vaya, 1 espora menos que antes! Está claro que «la copa» óptima tiene dos capas, no tres. Pero aunque la copa de dos filas es ya lo más eficiente que se puede diseñar, el tronco parece algo problemático. ¿No hay demasiadas células apiladas, limitando la energía que pueden absorber las de abajo? Veamos una alternativa lógica, inclinando el tronco:

Sin título-5

¡Seguimos en 65, sin mejorar el máximo! Hay dos mejoras evidentes que podemos hacer: a) parece que en la zona de la izquierda hay muchas células dando sombra, así que probemos a mejorar este punto débil; b) el tronco inclinado absorbería más si la zona inclinada estuviera más arriba. Veamos:

Sin título-6

¡67 esporas, ahora sí! Esto ya parece el diseño óptimo, al menos jugando a lo bruto con diseños corporales.

2. Selección natural en el ordenador

Hasta ahora lo que hemos realizado parece un entretenimiento más que un experimento científico. Si lo que queremos es que la selección natural maximice el diseño de los individuos, necesitamos que su código genético sufra mutaciones al azar y que los individuos con más descendencia tengan más probabilidades de pasar a la próxima generación.

No parece difícil de programar… ¡pero, un momento, dijiste código genético y yo no lo veo por ningún lado en este experimento! Efectivamente, necesitamos un código genético que le diga al ordenador cómo crece un individuo desde la célula inicial.

El código genético

Me he inventado un código de genes formados por tres bases muy sencillo:

  • 1ª base: una letra que puede ser:
    • Y: crece desde la yema (la célula activa en ese momento, la que se duplica y produce más células). La dirección de crecimiento se define en la 2ª base y la longitud (número de células) en la 3ª base.
    • M: marca la célula activa como una ramificación. Marcamos esta célula para poder volver a ella tras un crecimiento desde la yema y poder crear ramificaciones. Cuando aparece una M ya no hay más bases en ese gen. Un nuevo gen con M marca la célula activa como ramificación y borra ese carácter de la ramificación anterior.
    • N: crece desde la ramificación. La dirección se define en la 2ª base y la longitud en la 3ª base.
  • 2ª base: una letra que puede ser
    • U (de up): crece hacia arriba
    • R (de right): crece hacia la derecha
    • D (de down): crece hacia abajo
    • L (de left): crece hacia la izquierda
  • 3ª base: un número que indica la longitud (en células) que crece. El mínimo es 1 (crece una sola célula).

El código genético de un individuo puede tener hasta 20 genes formados por estas bases. Veamos un ejemplo para entenderlo mejor. Retomamos el diseño en T y mostramos a la izquierda el aspecto en la simulación y a la derecha un vídeo del desarrollo (con marco verde la célula activa):

Sin-título1Sin título-7

El código que genera este diseño tiene cuatro genes:

  1. YU8: crece desde la yema (la célula inicial es yema y ramificación al inicio del desarrollo) hacia arriba 8 células.
  2. M: marca la célula activa (que en este momento del desarrollo es la de arriba en el centro) como una ramificación.
  3. NL4: crece desde la ramificación hacia la izquierda 4 células. Crea la parte izquierda del brazo de la T.
  4. NR4: crece desde la ramificación hacia la derecha 4 células. Crea el brazo derecho de la T.

Si un código genético produce un diseño corporal que se sale del «espacio vital» que les he dado de 9 x 9 células, el programa de desarrollo finaliza y el individuo muere y desaparece de la simulación (se considera que ha sufrido una mutación deletérea).

Las mutaciones

En la simulación se dan tres tipos de mutaciones, similares a las que podemos observar en el mundo biológico:

  • Mutación génica: cambia una base en un gen.
    • En la primera base pueden aparecer Y, M o N. Si aparece M se borran las bases segunda y tercera, pues no tienen sentido.
    • En la segunda base pueden aparecer U, R, D o L.
    • En la tercera base cambia el valor de la longitud en 1 unidad (arriba o abajo).
  • Mutación cromosómica de tipo duplicación: un gen, al azar, se duplica (en la siguiente posición).
  • Mutación cromosómica de tipo deleción: un gen, al azar, se elimina.

De momento no están programadas ni las inversiones ni las traslocaciones (los otros dos tipos de mutaciones cromosómicas).

¿Cuál es la probabilidad de mutación? Cada individuo tiene sus tres propias probabilidades de mutación génica, duplicación y deleción, probabilidades que se heredan por los descendientes. Al inicio de la simulación la probabilidad de la mutación génica es 0,1 y las cromosómicas de 0,01 (cada una de los dos tipos). Son probabilidades de mutación por individuo, no por gen.

Además esta tasa también varía, pues nos interesa ver si se selecciona una baja o alta tasa de mutación individual (y de qué tipo). La tasa de cambio de la mutación génica es de 0,005 y la tasa de cambio de la cromosómica es de 0,0005 en cada generación.

La lucha y supervivencia diferencial de los más aptos

El último ingrediente para poner en marcha la evolución por selección natural es que haya reproducción diferencial, esto es, que dejen más descendencia los individuos más adaptados en cada generación. En este punto hay que elegir entre una población que se mantiene estable en número de individuos de una generación a otra, o una población que crece sin límite. En este segundo caso el crecimiento de la población es exponencial y, al no eliminarse los individuos menos aptos, la simulación generaría toda una panoplia de diseños corporales (por las mutaciones), incluyendo los menos y los más aptos. Por tanto, no habría evolución biológica por selección natural tal como la conocemos. (Eso sí, entre los trillones de trillones de individuos de la población, las estirpes más numerosas serían las que tuvieran mejores diseños corporales).

Hagamos, por tanto, que la población se mantenga estable, para poder ver la selección natural en marcha. En mi potente ordenador personal el mundo consta solo de 10 plazas (¡necesito un súper ordenador!). A cada generación las esporas generadas por todos los individuos compiten (al azar) por ocupar una preciada plaza. Evidentemente, a más esporas producidas, más probabilidad de pasar a la siguiente generación.

El programa

El código en Visual Basic (para Excel de 64 bits) sigue el siguiente programa, generación tras generación:

  1. desarrollo. Lee el código genético de cada individuo y lo desarrolla completamente.
  2. grafica. Guarda datos para su posterior análisis (máximo de número de esporas y promedios de las tasas individuales de mutación génica, duplicación y deleción).
  3. reproduccion. Tras calcular energía absorbida, energía para subsistencia y energía para reproducción, el programa sortea las 10 plazas de la siguiente generación proporcionalmente a la producción de esporas de cada individuo.
  4. mutaciongenica. La mutación de un gen en alguna de sus bases (si se da).
  5. mutacioncromosomica_duplicacion. Duplicación de un gen (se se da).
  6. mutacioncromosomica_delecion. Deleción de un gen (si se da).
  7. mutar_cambio. Cambia la probabilidad de mutación génica, duplicación y deleción de todos los individuos.
  8. contadorgeneracion. No necesita explicación.
  9. grabarpelicula. Cada 10 generaciones graba una imagen del diseño corporal de un individuo y sus datos numéricos principales.

Y tiene este aspecto:

Plantomorfos4
Pantalla de Plantomorfos4 en una pausa durante una simulación. Arriba se muestran los 10 individuos que forman la población. Justo debajo, los cuatro indicadores básicos del diseño corporal de cada uno (energía total absorbida, energía para crecimiento y subsistencia, energía para reproducción y número de esporas que producirá). Un poco más abajo, en vertical, los códigos genéticos. Abajo del todo las gráficas con las esporas (máximo) por generación (izquierda) y las variaciones de las probabilidades de mutación (derecha).

Las simulaciones comienzan siempre con un único individuo (y 9 plazas libres, por tanto) con el código más sencillo: YU1 (crece desde la yema hacia arriba 1 célula).

Así pues, podemos responder que sí a la segunda pregunta: sí se puede simular la evolución biológica por selección natural en el ordenador. ¡Tal y como proponía Richard Dawkins en su libro «El relojero ciego», en el que mostraba una simulación con evolución por selección artificial!

Buscando la respuesta a la tercera pregunta

Recordemos la tercera pregunta del principio de este largo experimento: ¿Llegará la evolución al diseño óptimo? Recordamos que el mejor diseño que hemos podido crear (artificialmente, añadiendo o quitando celdas manualmente al diseño corporal) es este que genera 67 esporas:

Sin título-2

Veamos el código genético más evidente que genera este diseño corporal:

  1. YU3
  2. YL1
  3. YU1
  4. YL1
  5. YU1
  6. YL1
  7. YU1
  8. YL1
  9. YU2
  10. YR8
  11. YD1
  12. YL3

Vemos que 12 genes son suficientes para generar este diseño. Además la mitad derecha de la copa se puede conseguir con muchos códigos distintos.

Simulación nº 1

Veamos la Simulación nº 1, con 17.000 generaciones, resumida en esta gráfica que muestra el número máximo de esporas producidas en cada generación (línea azul) y, superpuestos, los diseños corporales en 7 momentos destacados de la evolución (¡qué nombre más apropiado!):

Simulacion 1 esporas

Primero, vemos que en unas 1.000 generaciones ya teníamos diseños que generaban 50 esporas (con la esperada forma de T). Tras un periodo más o menos estable con 40 a 50 esporas, aparece un nuevo máximo de 64 esporas en la generación 6.000. Le sigue otro periodo de 45 a 50 esporas y, en la generación 11.000, otro máximo de 64 esporas con un diseño corporal simétrico y sencillo. Pero después observamos una progresiva disminución en la eficiencia de los diseños, hasta el final de la simulación en la generación 17.000, con unas 42 esporas por individuo.

Las simulaciones por ordenador, al contrario que la evolución biológica, son increíblemente rápidas (unos 30-40 minutos para simular 10.000 generaciones con mi ordenador Dell de gama alta). Y se pueden repetir una y otra vez. Así que, antes de sacar conclusiones, veamos qué ocurrió con la Simulación nº 2.

Simulación nº 2

Simulación nº 2 esporas

A diferencia de la primera simulación, ahora han hecho falta casi 2.000 generaciones para llegar a diseños con 50 esporas. Además llama la atención ese largo periodo inicial con solo 18 esporas por individuo. Por lo demás, a partir de la generación 2.000 la gráfica es bastante similar a la anterior, con altibajos y, curiosamente, con un diseño casi óptimo de 66 esporas (¡solo 1 espora menos que nuestro diseño óptimo!).

Simulación nº 3

En la Simulación nº 3, después de repetirse un patrón similar al de las simulaciones anteriores, se produjo la extinción de la población. Para que esto ocurra los 10 individuos de la población han tenido que sufrir una mutación deletérea. El diseño de los individuos de esta última generación se muestra en la gráfica y, si vemos su desarrollo (animación) advertimos que alcanza varias veces el límite exterior permitido. Esto explicaría porqué, en el raro caso de que los 10 individuos muten, todas las mutaciones serían deletéreas.

Simulación nº 3 esporas

Sin-título1

Simulación nº 4

Vamos con la Simulación nº 4, de 20.000 generaciones. El primer periodo hasta alcanzar diseños con 50 esporas es similar a las simulaciones anteriores. Sin embargo vemos que a partir de la generación 14.000 apenas hay dispersión en la cantidad de esporas producidas:

Sim 4 esporas

Para saber qué ha pasado en la simulación tenemos que recurrir a los datos de las tasas de mutación, donde tenemos la explicación. A partir de la generación 14.500 aproximadamente la tasa de mutación génica ha caído a niveles mínimos. Esto significa que han sido seleccionados los individuos con menor tasa de mutación, pues con toda seguridad (casi) cualquier mutación que se produzca será deletérea y el individuo no pasará a la siguiente generación:

sim 4 mutaciones

El diseño final de esta simulación no es ni mucho menos óptimo, pues produce 55 esporas, pero, al igual que ocurría antes, cualquier mutación o bien reduce notablemente la producción de esporas o directamente es deletérea:

diseño final

Más simulaciones

De las primeras 10 simulaciones, algunas con 20.000 generaciones, obtenemos los siguientes datos:

  • Los diseños corporales finales son muy variados:
Simulaciones 1 a 10 diseños finales
Diseños corporales finales en las 10 primeras simulaciones.
  • En ocasiones la población se extingue (dos veces en las 10 primeras simulaciones).
  • Los diseños corporales evolucionan rápidamente al principio, hasta alcanzar una producción de 40 a 50 esporas. Después la evolución se estanca. A veces este estancamiento viene acompañado de una drástica reducción de la tasa de mutación.
simulaciones con 20000 generaciones
Producción de esporas (expresado como máximo cada 100 generaciones) en 6 simulaciones de 20.000 generaciones de duración. En la simulación 6 se produjo una extinción de la población.

Lo que nos dicen las simulaciones

  1. Respecto al diseño óptimo, aquel capaz de producir 67 esporas, vemos que no se ha alcanzado en ninguna simulación. Si hubiéramos programado la simulación sin un programa de desarrollo corporal a partir de un código genético, por ejemplo haciendo aparecer y desaparecer células de forma aleatoria, lo más probable es que sí se hubiera obtenido dicho diseño óptimo. La existencia misma del desarrollo corporal a partir de un código es lo que crea limitaciones a la capacidad creativa de la selección natural. En palabras de S. Jay Gould, estaríamos ante un ejemplo informático de las constricciones que, junto con la historia y la adaptación, explican la forma presente de los seres vivos.
  2. La historia también actúa como limitante de la selección natural en el proceso de maximización del diseño corporal. En las simulaciones mostradas vemos que las poblaciones varían en forma a lo largo del tiempo, pero sobre todo vemos que los diseños alcanzados son diferentes de unas a otras simulaciones. Las mutaciones al azar van llevando la evolución de la población por caminos diferentes y, cuando las constricciones debidas al programa de desarrollo se fortalecen y la población se estabiliza, los diseños ganadores no son los mismos.
  3. La tasa de mutación individual está sujeta a selección. Hemos visto que cuando los diseños corporales aprovechan el espacio vital de 9 x 9 células y las formas se desarrollan tocando los lados en varios puntos, se hace muy difícil que una nueva mutación cree una mejora en el diseño. A partir de este momento los individuos con menor tasa de mutación dejan más descendencia y, por tanto, la tasa disminuye en la población. Al final solo el obligatorio cambio artificial que el programa añade o quita de la probabilidad individual es lo que mantiene la tasa por encima de cero.