http://www.redcientifica.com/gaia/

http://www.redcientifica.com/gaia/vasp_c.htm
Castellano > Vida Artificial > Vamos a...


Vamos a crear vida en un PC

Manuel de la Herrán Gascón
Publicado en agosto de 1997 en la revista "Solo Programadores" (nº 36)
.

Indice:


Introducción

Nos encontramos ante un mundo habitado por hormigas artificiales capaces de cooperar o luchar entre ellas. Aprenderemos a programar de forma muy sencilla este tipo de sociedades. Discutiremos sobre cuál es el tipo de individuo con mayor probabilidad de supervivencia. Veremos qué es la complejidad y cómo se produce un comportamiento emergente.

Cualquiera es capaz de reconocer un ser vivo nada más verlo. Los seres vivos nacen, comen, excretan, se relacionan unos con otros y con su entorno, tal vez se reproducen, y finalmente mueren. Podemos simular en un ordenador estos comportamientos, y estudiar como evoluciona una sociedad formada por organismos artificiales. Las implicaciones que se derivan de todo esto pueden ser fantásticas.

[ Volver al Indice ]



Vida Artificial

La Vida Artificial es la parte de la Inteligencia Artificial que pretende reproducir los procesos y comportamientos típicos de los seres vivos. Pero la Vida Artificial no estudia únicamente la vida tal como es, sino también tal como podría llegar a ser.

  • Por una parte están los intentos "hardware" de emulación de vida. Por ejemplo, es posible construir un pequeño robot con aspecto de ratón capaz de encontrar la salida de un laberinto.

  • Por otra parte están las simulaciones "software". Éstas tienen la ventaja de que permiten construir un gran número de seres vivos y entornos en los que éstos existen, de manera que es más fácil estudiar comportamientos sociales.

    En este artículo veremos cómo es posible programar simulaciones "software" de sociedades de seres vivos y obtener de su estudio sorprendentes conclusiones.

    [ Volver al Indice ]



    Creando vida artificial

    Un programa de vida artificial normalmente está estructurado de la siguiente forma:

    inicializar_mundo
    while detener = false
    for i = 1 to numero_de_seres_vivos
        ejecutar_ser_vivo
    next i
    wend
    mostrar_resultados
    

    En la fase de inicialización se crea un conjunto inicial de seres vivos. Mientras no se pulse un botón de detener, se ejecutará cíclicamente cada uno de los seres. Finalmente se muestra un resumen de la ejecución.

    En el CD-ROM que acompaña a esta revista se encuentra el programa de instalación y el código fuente en Visual Basic 4.0 para 16 bits de un programa de Vida Artificial. En este programa veremos un mundo de dos dimensiones en el que conviven hormigas y plantas. Las plantas crecen cuando son regadas. Las hormigas pueden comer plantas, moverse, regar plantas, pelearse y reproducirse.

    Las hormigas ganan energía cada vez que comen una planta. Cuando una planta ha sido suficientemente regada, será comida por la primera hormiga que pase junto a ella. No hay límite en la cantidad de plantas que una hormiga puede comer.

    Las hormigas pierden energía cada vez que se mueven, riegan, se pelean o se reproducen. Si una hormiga pierde toda su energía, muere. Por otra parte, cada cierto tiempo nace una planta espontáneamente.

    En un combate, la hormiga ganadora se quedará con la mitad de la energía (comida) acumulada por la perdedora. Además, cuantas más veces salga vencedora una hormiga, más probabilidades tendrá de salir victoriosa de la siguiente pelea.

    La ejecución de una hormiga se puede descomponer en las acciones siguientes:

    if comida_acumulada = 0 then
       muerte_de_ser_vivo
    else
       comprobar_vecinos
       comer_plantas 
       accion = decidir_accion_a_realizar
       select case accion
          case 1
             movimiento
          case 2
             regar_planta
          case 3
             reproducirse
          case 4
             pelearse
       end select
    end if
    

    En primer lugar, si la hormiga no posee comida, la declaramos muerta. En caso contrario, la hormiga observa si existen plantas u otras hormigas a su alrededor. Si existen plantas comestibles, se las come. Después, podrá regar las plantas que aún no son comestibles, pelear o reproducirse con sus vecinos, o simplemente seguir paseando por su mundo virtual.

    En este programa tenemos cinco tipos de hormigas. La probabilidad de que una hormiga realice una determinada acción dependerá del tipo de hormiga de que se trate y de los individuos con que se encuentre.

    Cuando dos hormigas se reproducen, se crea una nueva hormiga con características similares a las de los padres. Por ejemplo, una hormiga de tipo 1 (roja) y una hormiga de tipo 5 (verde) generarán con gran probabilidad un descendiente de tipo 3 (naranja). Además, para que la sociedad no se estanque en un único tipo de hormiga, se permitirá, por ejemplo, que dos hormigas verdes produzcan una roja; eso sí, con una probabilidad mucho más baja.

    La figura 1, en la que podemos observar los tipos de hormigas, sus comportamientos y la probabilidad asociada a cada uno, tiene una interpretación muy sencilla. La hormiga roja es la más egoísta. Nunca riega, y cuando se encuentra con otra hormiga, se dedica a pelear o a reproducirse

    La hormiga verde es la menos egoísta, no lucha nunca y se dedica a regar todas las plantas que encuentra a su paso. El resto de hormigas son términos medios entre estos dos extremos.

    Es evidente que las hormigas del tipo verde son la base sobre la que se sustenta la sociedad. Es decir, si no hay quien riegue las plantas, éstas no crecen, la comida se termina y las hormigas mueren.

    Probando las simulaciones con distintos valores nos damos cuenta de que hay algo que siempre se produce. Basta con ejecutar el programa dos o tres veces para verlo. ¿Que será?

    [ Volver al Indice ]



    Comportamientos cíclicos

    En el mundo artificial de hormigas y plantas, la acción de "regar" es un acto que repercute en beneficio de la población completa, ya que cuando una hormiga riega una planta no se asegura que sea ella misma quien la coma después.

    Una sociedad formada únicamente por hormigas rojas moriría rápidamente de hambre, ya que ninguna regaría las plantas. Una sociedad formada únicamente por hormigas verdes disfrutaría de gran prosperidad.

    Pero en nuestra simulación siempre habrá hormigas de todos los tipos. Podrían aparecer hormigas rojas voraces y casi invencibles. Pero las hormigas rojas dependen de las demás, ya que son por definición incapaces de regar.

    Existe un comportamiento cíclico en cuanto al número de hormigas de cada tipo y también entre el número total de hormigas y el número de plantas. Si en un primer momento hay gran cantidad de plantas, más tarde será alto el número de hormigas, ya que éstas podrán regar y comer, y alcanzar el nivel de energía necesario para reproducirse.

    Pero al haber muchas hormigas, las plantas desaparecen devoradas por las hormigas. Más adelante, al haber muchas hormigas y pocas plantas, no existirá comida para todas, y el número de hormigas decrecerá. Una vez que hemos llegado al punto en el que existen pocas hormigas y pocas plantas, comenzará el aumento del número de plantas, repitiéndose el ciclo.

    Estos procesos regulares se dan en la naturaleza, entre especies que son depredador y presa, y también en nuestra sociedad, en los conceptos de oferta y demanda. Por ejemplo, cuando cierto año la cantidad cosechada de un producto agrícola es muy pequeña, el precio sube, ya que el producto es difícil de conseguir. Este aumento del precio anima a los agricultores, que han observado la rentabilidad de este producto y por tanto el año siguiente se cultiva en mayor cantidad. El resultado es un exceso de producción que provoca que el precio baje. Ahora el interés por cultivar este producto disminuye, y nuevamente será escaso en el siguiente año, repitiéndose el ciclo.

    [ Volver al Indice ]



    El dilema del prisionero

    La siguiente variación del conocido dilema del prisionero ayudará a explicar las posibilidades de la Vida Artificial en la simulación y resolución de problemas reales.

    Supongamos un conjunto de individuos; cada uno de los cuales posee una determinada cantidad de dinero. Cada persona puede decidir si invertir ese dinero en un cierto negocio, y en el caso de hacerlo, qué cantidad invertir.

    El negocio en cuestión es tan fabuloso que duplica inmediatamente cualquier inversión, pero con la peculiaridad de que el total del dinero resultante (el doble del dinero invertido) es repartido por igual entre todos los individuos, independientemente de la cantidad entregada por cada uno.

    Veamos los casos extremos. Por ejemplo, si existen 10 individuos y todos invierten una peseta, la inversión de 10 pts producirá otras 10 pts de beneficio y el resultado de 20 pts será repartido entre todos, con lo que cada individuo obtendrá 2 pts.

    Si de los 10 individuos nadie invierte, no hay beneficio y todos se mantienen como estaban. Pero si sólo uno de ellos invierte una peseta, la peseta se multiplica por dos y estas dos pesetas serán repartidas entre los 10, y ahora todos tendrán 1,2 pts excepto el desprevenido inversor que tendrá 0,2 pts

    Si de los 10 individuos, sólo 5 de ellos invierten la peseta, el resultado de 10 pts es repartido entre los 10, de forma que los que no invirtieron ganarán una peseta y los que invirtieron se quedarán como estaban al principio.

    Cada individuo desconoce siempre las inversiones que harán el resto de individuos. El objetivo es obtener el máximo beneficio posible, pero cada individuo se encuentra entonces con un gran dilema: si confía en la bondad de sus compañeros, y supone que éstos realizarán grandes inversiones, debería invertir la mínima cantidad posible para obtener así los máximos beneficios sin arriesgar su dinero.

    Sin embargo, los demás no son tontos, y serán capaces de llegar a la misma conclusión. En ese caso, si todos invierten la mínima cantidad, el beneficio será el mínimo para todos, y el negocio tan fabuloso que teníamos no estará siendo de utilidad para nadie.

    Por tanto, lo más inteligente parece colaborar, e invertir todos la máxima cantidad, para obtener todos el máximo beneficio. Pero, ¿puede uno confiar en que los demás también lo harán?

    El individuo produce así un razonamiento circular que se debate entre el beneficio propio y el del grupo.

    Se puede pensar que este es un caso artificioso, sin paralelismo en la vida real. Todos sabemos que no existen en los mercados de valores inversiones que dupliquen su valor inmediatamente. Sin embargo, sí existe en nuestro mundo una mercancía cuyo valor se multiplica cuando se suma. Es decir, existe algo para lo que podemos afirmar que 1 + 1 = 4. Algo en lo que "El todo es más que la suma de las partes"

    Ese "algo" es el conocimiento. El conocimiento es el "dinero" que las personas pueden "invertir" y obtener multiplicado. Una persona puede plasmar en un documento conocimientos que le ha costado meses descubrir. Otra persona podrá en tan solo unas horas aprender sobre ese tema. Bastará con leer el documento. ¿Que sería de los programadores sin los manuales? Ahí los tenemos, por millares, a disposición de todos e independientemente de si se ha participado en su redacción.

    Una vez metidos en harina, el dilema del prisionero se puede observar en un imaginario equipo de desarrollo informático en el que algunos puestos de trabajo tal vez desaparezcan si el proyecto fracasa. Los programadores pueden optar por ocultar su conocimiento al resto, con la intención de destacar y asegurar su permanencia en la empresa. Pero si todos se comportasen de esta forma empezarían los problemas: tareas que se repiten innecesariamente, errores cometidos una y otra vez,... el proyecto se convierte en un caos y tal vez nadie conserve su puesto.

    Si todos compartiesen todo su conocimiento, el proyecto tiene más probabilidades de éxito, y será más probable que se mantengan todos los puestos de trabajo. Pero ¿se puede confiar en que los demás también lo harán?

    No existe dilema cuando el beneficio obtenido en la cooperación es muy alto y el perjuicio muy bajo o nulo. Supongamos que el coche de un individuo queda atascado en el barro. El solo no puede moverlo, pero con la ayuda de otra persona sí podría. El beneficio que obtiene uno de ellos en la cooperación es muy alto y el perjuicio del otro es muy pequeño, apenas un ligero esfuerzo. En estos casos, la tendencia será a la cooperación.

    Existen otros ejemplos. Pensemos en la cantidad de personas que se ven involucradas en el proceso que desemboca en que podamos tomarnos una tostada con mermelada por las mañanas. Unos intervinieron en la obtención de harina, otros condujeron los camiones en los que se transporta, otros construyeron las carreteras por las que van los camiones...

    Nos damos cuenta de que las personas estamos todas relacionadas de alguna forma. Es fácil comprender que la especialización en el trabajo es beneficiosa para la sociedad, y produce un mejor aprovechamiento de los recursos.

    Pero no es necesario que una entidad superior organice este reparto de tareas. La organización es automática, es un proceso que emerge de la interacción de los objetivos de cada individuo. Basta que las entidades actúen en su propio beneficio para que esto se produzca. Por ejemplo, si hay escasez de informáticos, esto animará los estudiantes, que llenarán las aulas y esa demanda quedará atendida.

    [ Volver al Indice ]



    ¿Sirve para algo la Vida Artificial?

    El cerebro humano está formado por neuronas que trabajan simultáneamente, pero nuestro razonamiento consciente es secuencial. Por eso es tan difícil para nosotros comprender el comportamiento de un sistema de elementos muy interrelacionados. Pero para un ordenador, esto es mucho más fácil.

    La Vida Artificial es un mecanismo para la representación de sistemas complejos. Una vez representado un sistema, podemos experimentar con él en situaciones hipotéticas. En un modelo siempre existe simplificación, ya que lo contrario sería realizar una copia idéntica, átomo por átomo. Se trata de no tener que construir una central nuclear para experimentar y prever comportamientos en una central nuclear.

    Por ejemplo, si construimos un modelo de una fábrica, podemos simular posibles inversiones como compra de nueva maquinaria o ampliación de plantilla y comprobar si los resultados obtenidos son los deseados.

    [ Volver al Indice ]



    Complejidad y comportamiento emergente

    En los sistemas complejos puede producirse lo que se denomina el comportamiento emergente. La gran ventaja de la Vida Artificial es que permite observar fenómenos emergentes. Las propiedades emergentes son aquellas que aparecen en los sistemas como resultado de la interacción entre sus partes y que no pueden explicarse a partir de las propiedades de los elementos que lo componen.

    En estos sistemas, una acción simple se puede propagar exponencialmente provocando efectos de gran envergadura. Por esta razón se dice que estos sistemas se encuentran en la frontera entre el orden y el desorden.

    Las investigaciones en este campo son todas muy recientes. La complejidad es un fenómeno complejo ;-) y describir ejemplos simples de complejidad es una paradoja. Sin embargo, eso es precisamente lo que vamos a hacer.

    El primer caso: un montón de arena sobre el que dejamos caer granos lentamente. Ocurre que a partir de cierto ángulo la caída de un sólo grano provoca avalanchas de gran tamaño. De la misma forma, la caída de un copo de nieve puede provocar la ruptura de la rama de una árbol sobre la que se ha acumulado gran cantidad de copos.

    Una colonia de hormigas naturales puede llevar a cabo tareas de gran complejidad como explorar el entorno, construir galerías, o decidir si es adecuado un tipo de alimento, con la lamentable pérdida de algunas hormigas en el proceso. Pero las hormigas, consideradas una por una, son incapaces de realizar ningunas de estas tareas.

    El comportamiento del hormiguero emerge a partir de interacciones entre elementos simples (hormigas) y no se puede explicar únicamente basándonos en las propiedades de un individuo. El hormiguero podría considerarse como un ser vivo de un nivel superior a la hormiga.

    [ Volver al Indice ]



    Conclusión

    La vida artificial es una metodología que nos permite representar en un ordenador modelos simplificados de mundos imaginarios, de nosotros mismos o del mundo que nos rodea. En este artículo hemos utilizado la Vida Artificial para analizar comportamientos sociales.

    En los próximos números veremos los Algoritmos Genéticos, con los cuales es posible resolver problemas utilizando únicamente una pequeña parte de la Vida Artificial: la reproducción. También se discutirá sobre la forma de proporcionar a los seres vivos artificiales la capacidad de aprender.

    En el CD-ROM que acompaña a la revista se incluyen los códigos fuente completos en Visual Basic referentes a los programas mencionados en el artículo.

    [ Volver al Indice ]


    [ Home Page Castellano | Home Page English ]

  • Traduccion