DarwinBotsManual
Abrir la app EnglishEN

Mutaciones

Cómo cambia el ADN por azar, en vida y al nacer: los tipos de mutación, qué le hacen a las instrucciones, cómo se leen las tasas y cómo se encienden o apagan.

Las mutaciones son el motor de la evolución: cambios al azar en el ADN que pasan a los hijos. La mayoría rompe algo, alguna no cambia nada que se note, y muy de vez en cuando una sale mejor que el original. Si ese bot deja más hijos que sus vecinos, el cambio se queda.

En DarwinBots el ADN cambia en dos momentos: en vida, poco a poco, y al nacer, cuando se copia el ADN del padre (o se mezcla, en la reproducción sexual) para el hijo.

Quién muta

Para que un bot mute tienen que cumplirse dos cosas:

  1. Las mutaciones de la simulación están encendidas: es el interruptor Mutaciones de la app. Apagado, nadie muta, pase lo que pase.
  2. El bot tiene su propia tabla de mutaciones encendida. Cada bot lleva una tabla con una tasa para cada tipo de mutación, que hereda de su padre. Un tipo con tasa 0 no ocurre nunca.

La app siembra cada especie con la tabla encendida y las tasas de fábrica (ver abajo), así que en la práctica alcanza con el interruptor. Una tabla apagada o con tasas en 0 solo llega en los bots de una simulación guardada que la traen así.

Los tipos de mutación

TipoCuándoQué le hace al ADNTramo típico
PuntualEn vidaCambia un tramo corto de instrucciones3 (± 1)
DeltaEn vidaNo toca el ADN: cambia una de las tasas del propio bot—
Error de copiaAl nacerCambia instrucciones1
InserciónAl nacerAgrega instrucciones nuevas1
InversiónAl nacerDa vuelta el orden de un tramo3 (± 1)
Borrado grandeAl nacerBorra un tramo3 (± 1)
Borrado chicoAl nacerBorra una instrucción1

El tramo típico es cuántas instrucciones toca cada mutación: el motor lo sortea alrededor de ese valor. Las de nacimiento se aplican en el orden de la tabla, una pasada de cada tipo sobre el ADN del hijo. Las de vida corren en la fase de acciones de cada ciclo (ver El ciclo y el orden de las acciones).

El borrado grande y el chico son el mismo mecanismo con distinto tramo.

El motor tiene cuatro tipos más que vienen apagados y la app no enciende: una segunda puntual, un segundo error de copia, la translocación (mueve un tramo a otro lugar del ADN) y la amplificación (lo duplica).

Qué le pasa a una instrucción

La puntual y el error de copia cambian instrucciones una por una. Con la configuración de fábrica, de cada cinco cambios cuatro tocan el valor y uno el tipo:

Como las direcciones son números, una mutación de valor sobre .up puede dejarte escribiendo en otra dirección: 10 .up store se convierte en 10 .dn store, o en un número que no es una sysvar y queda como memoria libre.

Hay dos cosas que ninguna mutación hace: tocar el end que cierra el ADN y crear uno nuevo.

Estos cambios los vimos pasar en hijos de un bot de un solo gen, partiendo de cond *.robage 5 > start … stop:

cond *.robage 5 > 291 start …   inserción: un número suelto antes de start
cond *.robage > start …         borrado chico: se fue el 5
cond > 5 *.robage start …       inversión del tramo «*.robage 5 >»
cond *.robage 5 > … stop        borrado del start: el cuerpo pasó a ser condición

El último es un buen ejemplo de mutación letal: sin start, los stores del gen quedan en la zona de condiciones y no escriben nada (ver Genes: cond, start, else y stop). Ese bot ya no se reproduce.

Las tasas

Cada tasa es un número N que se lee «una en N»: cuanto más grande, más rara la mutación. El valor de fábrica es 5000 para todos los tipos, y es el que reciben las especies que siembra la app.

TipoProbabilidad
De nacimientoUna en N por cada instrucción del ADN, en cada parto, para cada tipo.
PuntualUna en 1000 × N por cada instrucción, en cada ciclo de vida.
DeltaUna en 100 × N por ciclo de vida.

Con las tasas en 5000 y un ADN de 100 instrucciones:

Un ADN más largo muta más, porque hay más instrucciones donde sortear.

Las tasas se heredan, y la mutación delta las va moviendo: cuando ocurre, elige un tipo al azar y le cambia la tasa unos cientos para arriba o para abajo. Así un linaje puede volverse más estable o más cambiante con el tiempo.

Reproducirse para explorar: .mrepro

.mrepro funciona como .repro, pero el hijo nace con la tabla de mutaciones dividida por 10 solo para ese parto: cada tipo de nacimiento es diez veces más probable. Un tipo con tasa 0 pasa a 1000. Además el hijo muta aunque su tabla estuviera apagada; lo único que lo impide es apagar Mutaciones.

Después del parto el hijo vuelve a la tabla heredada: en vida muta como su padre, y sus propios hijos con .repro también.

Con las tasas de fábrica, en una población de bots de 20 instrucciones, cerca de 1 de cada 60 hijos nació con algún cambio al reproducirse con .repro, y casi 1 de cada 5 con .mrepro.

La idea es reservar .mrepro para cuando conviene probar cosas nuevas. El Animal_Minimalis_mod_stress del Bestiario se reproduce con .repro en condiciones normales y con .mrepro cuando está en apuros. Una versión mínima, que explora si viene perdiendo energía (.pain):

' Si viene perdiendo energia, explora; si no, se copia
cond
 *.nrg 4000 >
 *.pain 0 >
start
 33 .mrepro store
stop
cond
 *.nrg 4000 >
 *.pain 1 <
start
 33 .repro store
stop

Qué más cambia cuando un bot muta

La oscilación

El motor puede multiplicar las probabilidades de todos los bots a la vez, alternando épocas de mucho cambio con épocas de calma: hasta 16 o 20 veces más mutaciones en la subida y otro tanto menos en la bajada. Las tasas heredables no cambian; el factor se aplica encima, en el momento de cada sorteo. Viene apagada y la app no tiene un control para encenderla. El detalle está en El ciclo y el orden de las acciones.

Cómo encenderlas y apagarlas

QuerésHacé
Que nadie muteApagá Mutaciones. Es la única forma de frenar también a .mrepro.
Que muten más los hijos que el bot elijaUsá .repro para el parto normal y .mrepro para explorar: esos hijos mutan diez veces más.
Hijos distintos sin mutacionesUsá la reproducción sexual: la mezcla ya varía el ADN.

El motor trae además tres mecanismos que vienen apagados y la app no ofrece: un régimen alternativo en el que las tasas de cada hijo derivan al azar en cada parto, la auto-especiación (un bot que acumuló muchas mutaciones funda una especie nueva con otro nombre) y el reinicio epigenético (un linaje muy mutado deja de heredar la memoria genética, ver Memoria libre y epigenética).