El otro día surgió una discusión en la lista de correo de PyAr sobre algoritmos genéticos y vida artificial. La charla estuvo interesante y me dejó pensando, leí algo de bibliografía y sinteticé lo siguiente.
Con el propósito de experimentar con formas de vida, tenemos dos alternativas para simular:
La realidad: Lograr en un experimento de simulación, mediante evolución, lo mismo que logró la naturaleza, de manera de poder predecir que hubiese pasado si las condiciones de contexto son distintas (y poder "deducir" qué tipo de vida habría en un planeta con diez grados de temperatura promedio menos, por ejemplo).
-
Una vida artificial: En este caso el propósito es predecir como se comportarían entes que luego se construirían con las mismas reglas que las simuladas. Basándonos en el tipo de vida artificial, tenemos dos opciones totalmente distintas:
Software: Los entes serían solamente programas
Hardware: Los entes serían elementos electromecánicos.
El punto que me interesaría explorar es una mezcla de la realidad con la vida artificial de elementos de hardware. De esta manera podríamos estudiar como evolucionarían nano-robots en un determinado ecosistema, tomando elementos de la vida real para lograr perfilar y mejorar el diseño físico y de comportamiento de estos entes.
A nivel de la simulación, me gustaría mucho lograr una simulación de un ecosistema que parta de una "sopa" de componentes básicos, que se vayan formando entes y que por simple evolución estos entes lleguen a ser algo útil. Esta sopa de componentes básicos no es sencillo de definir, e influye enormemente en el desarrollo del experimento (tanto cuales son, como sus características y las reglas a que someten al resto).
Tenemos dos tipos básicos de componentes, los de contexto y los formativos. Los formativos son partes del ente a crear, y están diseminados en la sopa para que por simple azar se formen los entes más variados. Para comenzar a formarse el ente y para ir tomando nuevos componentes, sólo hace falta una simple colisión y una probabilidad de incorporación (esta probabilidad tiene un componente de azar y un componente que es más chico cuanto más grande es el ente, para evitar que crezcan demasiado). Algunos componentes formativos pueden ser:
Sensores: Generan una señal cuyo valor es más alto cuanto más cerca tienen el elemento a sensar. La principal característica es que solamente sensan un elemento, el cual puede ser cualquiera de los componentes de la sopa (es muy útil incorporar un sensor de Comida, por ejemplo). Otra característica es la sensibilidad: un sensor burdo puede indicar un 1 cuando tiene una Comida a dos posiciones de distancia, y otro puede indicar con la misma señal una Comida a 10 posiciones. Los sensores pueden ser direccionales (que cubran 120 grados en una dirección, por ejemplo) u omnidireccionales.
Transmisores: Transmiten la señal recibida de los distintos sensores con los que tienen contacto físico. Los transmisores pueden tener distintos tamaños, los que les permiten agrupar más o menos sensores. El transmisor adquirirá sensores una vez que esté unido a un Procesador. El algoritmo con el cual procesa las señales de los distintos sensores es una característica del transmisor (puede ser que sume todo, que saque un promedio, que filtre todo excepto los de Comida, etc.)
Actuadores: Hay de dos tipos: Movimiento y Agresión. Los de movimiento permiten al ente desplazarse en la dirección requerida y no solamente flotar en la sopa; si el ente tiene más de un actuador de movimiento, la "intención de desplazamiento" se calculará como la suma vectorial del actuador que esté activo en ese momento (a esta intención luego se le suma vectorialmente el movimiento infligido por la sopa, y de allí se calculará el movimiento real, que es discreto y se cuenta en posiciones). Los actuadores de Agresión pueden ser activos o pasivos; los activos quitan energía a los otros entes (en función de que parte de los otros entes toquen), mientras que los pasivos protegen del exterior (pero a su vez evitan incorporar nuevos elementos).
Procesador: El procesador es el que controla al ente. Lo gobierna con un algoritmo que especifica las acciones que quiere realizar en función de sus capacidades y de la información que reciba (por ejemplo, si tiene muchos sensores que indican comida para un costado, puede indicarle a sus actuadores que intenten desplazarse para allí; o si tiene un muy bajo nivel de energía puede decidir no hacer nada que consuma la misma y flotar en estado de "hibernación" hasta que encuentre comida y pueda restaurar sus funciones básicas). Lo interesante de este procesador es que el algoritmo de control no debe ser programado por el usuario, sino que tiene que ser desarrollado por el mismo procesador, aunque no tiene una libertad total para ello: en función de que los elementos del universo son finitos (hay determinados tipos de sensores, etc), se puede preestablecer el programa que evalúa las entradas para decidir las salidas, pero como se combina cada cosa y en que grado lo irá decidiendo (o aprendiendo)el procesador.
Los componentes de contexto pueden ser los siguientes:
Comida: Si el ente se encuentra con ella, puede aprovecharla y aumentar su nivel de energía.
Peligros: Pueden haber elementos dañinos a los distintos componentes (por ejemplo: un anti-sensor).
Tenemos un componente global a todos que se llama Kronos: va marcando el reloj de la vida en el experimento, y como dios que es, maneja los elementos de la sopa. En otras palabras, es el programa que, por ejemplo, se fija cuales entes deben moverse, que pasa si dos se chocan, mueve los elementos de la sopa al azar, genera nuevos elementos para la sopa, se fija si un ente choca con un elemento y si debe incorporarlo o no, etc.
Un punto importante en las reglas de la sopa es la reproducción: cómo a partir de dos (¡o más!) entes generamos uno nuevo. Esto no lo tengo todavía razonado del todo, pero podría ser básicamente una generación de un nuevo ente (administrada por Kronos) a partir de elementos de los padres. Aquí tenemos que incluir los conceptos de herencia (el hijo debe parecerse a los padres), mutación (cambios al azar para que los hijos no sean una copia fiel de los padres) y cruces (el hijo debe parecerse a ambos padres). Se necesita también estudiar como la reproducción afecta a los padres (baja de energía, pérdida de partes, limitaciones en las decisiones de movilidad, etc) y un montón de otros detalles (por ejemplo, cómo los padres protegerán al crío hasta que crezca, es decir, hasta que incorpore los elementos necesarios para su propia supervivencia).
Quedan muchísimos otros puntos para ver, desde el refinamiento de las reglas que mencioné aquí hasta la inclusión de nuevos elementos (por ejemplo, Comunicadores para que los entes intercambien "ideas", o actuadores de Cópula para ajustar más el mecanismo de reproducción, o mejores reglas para definir la mutación y el intercambio del ser creado).