¿Qué hace falta para que la evolución se produzca?
Hacen falta organismos autorreplicantes. Es decir, algún tipo de entidad que pueda producir copias de sí misma. Por ejemplo, células, animales, plantas, pero sirven otras entidades. Dichas copias deberían ser inexactas, es decir, las réplicas deben ser parecidas pero no iguales al progenitor. Si son idénticas, no puede haber evolución.
Ha de haber un medio al que adaptarse (si los organismos ya están adaptados, poca evolución se puede dar). Las variaciones en las réplicas deben tener el potencial de que algunas están mejor adaptadas al medio (aunque sólo sea levemente) y otras peor.
Y hace falta tiempo, claro. La evolución no es un proceso instantáneo.
En el escenario típico en el que la evolución se produce, el medio suele tener alimento que los organismos requieren. Suele variar con el tiempo debido a factores muy diversos como climatología, ciertos eventos o fenómenos, o la propia interacción con los organismos. Éstos, por su parte, requieren adaptarse al medio para conseguir alimento; y el fracaso al hacerlo influye en su mortalidad, que repercute en la capacidad reproductiva.
Aquí presentamos un programa en JavaScript que pueden ejecutar en su navegador, que incluye todos esos elementos para demostrar cómo la evolución se produce de forma natural en él. Está basado en un programa en Pascal escrito por Javier Sebastián y refinado por Alejandro Valero y un servidor, que a su vez está basado en la descripción de un programa escrito por Michael Palmiter [1] que apareció en un artículo de A.K.Dewdney, en la sección Juegos de Ordenador de la revista Investigación y Ciencia.
La versión JavaScript aquí presentada, así como el presente texto, son, por supuesto, copyright © 2013 Pedro Gimeno Fortea. El generador de números pseudoaleatorios es ran_array, un generador de Fibonacci retardado (LFG) con retardos 37 y 100, diseñado por Donald E. Knuth.
El programa utiliza el elemento <canvas>
, por lo que es necesario un navegador que lo soporte. Si su navegador es muy antiguo, es posible que no funcione; no hay como probar para saberlo.
¿En qué consiste la simulación? Se trata de un «mundo» rectangular en el que habitan unos organismos, que llamaremos protozoos, que pueden moverse libremente (la topología es toroidal, es decir, cuando un protozoo sale por arriba, reentra por abajo en el mismo punto, y similarmente con izquierda y derecha). En este «mundo» aparecen unas motas que llamaremos bacterias, que por simplicidad lo hacen por generación espontánea y permanecen en el sitio hasta que son comidas por un protozoo, si es que ocurre. Si se prefiere, en vez de bacterias se puede imaginar que se trata de polvo alimenticio que se acumula en una superficie. La velocidad de aparición de las bacterias es constante. Una zona del rectángulo es un «jardín del Edén», donde las bacterias florecen a un ritmo mucho más rápido. En su centro hay un foco luminoso.
Los protozoos se reproducen por bipartición y se alimentan de bacterias al pasar por encima de ellas (si no están saciados). Para poder reproducirse, deben tener una energía mínima necesaria y haber alcanzado una edad mínima de «madurez sexual». Cuando se dan ambas circunstancias, se produce la bipartición sin más demora. El tiempo se mide en «ciclos» o «ticks» de un reloj imaginario. La vida de un protozoo está limitada por dos factores: tiempo (es decir, pueden morir de viejos) y energía (muerte por inanición).
Por simplicidad, la única variación que hay en la reproducción de los protozoos afecta a la forma en que se mueven. Cada protozoo contiene un «material genético» que define la probabilidad de que haga ciertos movimientos. La retícula por la que se mueven (y en la que se colocan las bacterias) tiene una disposición hexagonal. Eso implica seis sentidos diferentes en los que se puede mover cada organismo.
Los protozoos tienen una «dirección actual» que cambia en cada ciclo de una forma aleatoria pero modulada por el material genético. Cada posible cambio de dirección tiene un gen asociado: hay un gen para seguir adelante, otro para girar 60° a la derecha, otro para hacerlo a la izquierda, otro para girar 120° a la derecha, otro para lo mismo a la izquierda, y otro para dar media vuelta. Además, hay un gen que indica si el protozoo es atraído por la luz. Si se activa, el protozoo gira inmediatamente en la dirección que más le acercaría a la luz. Si hay más de una que le acercaría más que las demás, se escoge una al azar de entre las posibles.
Este material genético está en forma de enteros. Dado lo restringido de la simulación, para que ésta sea más rápida, los enteros se aplican de forma exponencial para decidir el giro siguiente. Para decidir en qué forma girará el protozoo, el valor de 2 elevado a cada gen se usa como peso en una elección aleatoria. Por ejemplo, si el gen de avanzar tiene el valor 3 y todos los demás tienen el valor 0, entonces es ocho (2³) veces más probable que el protozoo avance que que haga cada uno de los otros movimientos.
La simulación empieza con cierta población inicial de protozoos y de bacterias. Los genes se precargan con números al azar. Al principio, típicamente se mueven de forma tan errática e indecisa que, a la larga, apenas se desplazan de su posición original. Esto es ineficiente en ese medio, ya que pronto consumirán las bacterias que tienen a su alrededor, se quedarán sin alimento y morirán. Pero unos pocos tienen algo más de movilidad y consiguen sobrevivir unos ciclos más. Los más afortunados sobrevivirán lo suficiente como para que, ante el declive del número de depredadores que se llevan el alimento, la zona se llene de bacterias y puedan comer mucho más rápido, llegando a alcanzar la energía de reproducción.
En cada reproducción se produce una mutación (un cambio de una unidad, al alza o a la baja, en un gen al azar). Como en cualquier proceso evolutivo, las mutaciones pueden ser buenas o malas. Si la progenie está peor
adaptada, morirá más facilmente, y si se adapta mejor al medio, lo que en este caso implica tener más movilidad para alcanzar más alimento, tendrá más facilidad para sobrevivir y por tanto reproducirse.
Y eso es lo que se observa en la simulación. Aunque no tiene ninguna preferencia para ser elegido en el código, con el transcurrir de las generaciones, el gen de ir en línea recta predomina sobre los demás, ya que esto facilita al protozoo desplazarse alrededor del área en vez de «enquistarse» en una zona más pequeña, lo cual le supone una ventaja sobre otros protozoos que no tienen esa característica. Y al comer más, también deja menos comida para los peor adaptados, haciendo, por tanto, más facil que mueran de inanición.
Esto se observa con las semillas aleatorias de 1 a 3. Con la semilla 4, sucede algo diferente. Algunos de los protozoos empiezan a tener «curiosidad» por la luz; cuando llegan, descubren que por allí hay comida en abundancia. Tímidos todavía, siguen mayormente haciendo lo único que saben hacer, que es moverse erráticamente, pero si se alimentan lo suficiente, parte de su descendencia desarrollará mayor afinidad por la luz, con lo que tendrá más acceso al jardín del Edén. Teniendo sus necesidades cubiertas, aventurarse a las proximidades en busca de otros métodos para alimentarse va a resultar contraproducente. Mientras tanto, los que no han desarrollado una afinidad por la luz suficiente, siguen su curso. El resultado es la especiación: dos especies de protozoos, una afín a la luz que ronda el jardín del Edén, que llamaremos Polilla, y la otra afanosa por cubrir la mayor área posible, que llamaremos Explorador. Y, como en la evolución natural, esta especiación es producto del azar.
Una vez las dos especies se han diferenciado, es difícil que se produzca un cambio. Si uno de los genes empieza a cobrar importancia, el otro se reducirá en importancia, con lo que en este mundo competitivo, tendrá menos ventaja sobre sus hermanos. Así, es poco probable que la descendencia de una Polilla acabe transformándose en Explorador, porque los genes no mutan tan deprisa, y una vez empieza a separarse de la luz, el alimento escasea demasiado en comparación; similarmente, es poco probable que la descendencia de un Explorador acabe siendo Polilla, porque en cuanto la predisposición a ir en línea recta decrece para dar importancia a girar hacia la luz, sus hermanos Exploradores darán cuenta del alimento y el individuo estará en desventaja competitiva, haciendo más fácil que muera antes de evolucionar. Sin embargo, ese tipo de saltos de comportamiento han sido observados durante el ajuste de parámetros, lo cual implica que no son imposibles.
Además de permitirnos contemplar cómo, con los ingredientes adecuados, la evolución es un proceso que surge de forma natural, este programa también tiene otro efecto secundario. Nos ofrece también la posibilidad de observar el fenómeno de la fluctuación en las poblaciones de un sistema depredador-presa, del tipo modelado por las ecuaciones diferenciales de Lotka–Volterra. En este caso, los depredadores son los protozoos y las presas son las bacterias. Cuando el número de protozoos aumenta, éstos comen bacterias y hacen que la población de bacterias disminuya. Esa disminución pronto provoca muerte por inanición de protozoos, con lo que la población de éstos empieza a disminuir a su vez. Al haber menos depredadores, las bacterias tienen oportunidad de volver a crecer en número, lo que hace que los protozoos tengan más comida, con lo que su número aumenta y el ciclo se repite. No ha sido fácil encontrar parámetros que hacen la relación lo bastante estable; durante la búsqueda, en algunos casos he encontrado un baby boom que causa una superpoblación que arrasa con la gran mayoría de bacterias, seguido de una caída en picado de la población que acaba con todos los protozoos antes de que las bacterias se recuperen en número.
Así que, he aquí el programa. Que lo disfruten.
Referencias
[1] Michael Palmiter, Simulated Evolution. http://lifesciassoc.home.pipeline.com/instruct/evolution/