Energía

imagen1
Ejemplo Vida 09

Hasta este punto hemos logrado hacer organismos virtuales capaces de moverse, de pertenecer a diferentes especies y de actuar en consecuencia, comiendo, matando, reproduciendose y muriendo, pero todo esto se ha realizado sin ningón costo energético. Por lo que estos organismos son eternos, ha menos que alguien los mate. Por ejemplo: cada ser de este ecosistema puede varagr indefinidamente y jamás morir de hambre. La energía es uno de los factores principales de la vida, dado que los organismos se conducen en pos de conseguirla y es por ello que comen.


La falta de energía y la muerte

Para poder representar este característica de la vida, haremos nuevas modificaciones en nuestro objeto Organismo. En este caso, tenemos que agregar un conjunto de variables relacionadas con el estado energético del organismo, así como los valores de consume y recuperación de energía.

class Organismo{

    ...

    float energia;
    float energiaLimite;
    float gastoMoverse; // el gasto de energia cuando se mueve
    float gastoReproducirse; // el gasto de energia
    // cuando se reproduce
    float gananciaComer; //lo que recupera de energia cuando come

    ...

}
      

Hecho en Processing


La variable energia es la encargada de registrar el estado energético del organismo. Las variables gastoMoverse y gastoReproducirse sirven para especificar cuánta energía se consume en dichas acciones. Y por óltimo, la variable gananciaComer, sirve para especificar cuánta energía se recupera al momento de comer.

La pérdida total de energía significa la muerte del organismo, por eso hubo que implementar dicha muerte en el comportamiento accionar():

class Organismo{

    ...

    void accionar(){

        ...

        if( energia<0 ){

            morir();
            if( especie == DEPREDADOR ){

                for(int j=0;j<5;j++){

                    miEcosistema.nacer_Organismo( PLANTA , x+random(-radio*2,radio*2) , y+random(-radio*2,radio*2) );


                }

            }

        }

    }

    ...

}    
   

Hecho en Processing


Como se puede observar arriba, en el comportamiento accionar( ), aparece un condicional en donde se evalóa si la cantidad de energía es menor que cero: if( energia<0 ). Si esta condición es verdadera, entonces se ejecuta el comportamiento morir( ). Debajo de esto existe otra condición que se evalóa, en la que se pregunta si el ser que está muriendo es un depredador, en cuyo caso se pide al ecosistema que haga nacer 5 plantas en el lugar de la muerte. El sentido de esta acción es para reestablecer el equilibrio en el ecosistema, dado que hasta el momento, a los depredadores no los puede comer nadie, y las plantas no tienen forma de reproducirse, por lo que una solución sencilla es hacer que cuando los depredadores mueren de inanición (que es la ónica forma de morir que tienen) puedan aparecer plantas en su lugar, una forma metafórica que imita la sucución de hechos en los cuales un depredador (sin enemigos naturales) muere, su cuerpo se disuelve y alimenta a la tierra que da energía a nuevas plantas, es decir se cierra el ciclo en donde: los hervíboros comen plantas, los depredadores comen a los hervíboros y por óltimo, las plantas se alimentan de los depredadores.



El consumo de energía

Dado que la energía determina en cierta medida la posibilidad de vida de estos organismos, un punto crucial de su administración son los consumos de energía que implican las accioones. Los seres vivos requieren energía para sostener su propia estructura, en pos de conseguirla aplican diferentes estrategías, por ejemplo, los animales salen a comer a otros seres, pero las acciones que se realizan implican en sí mismas un consumo de esa energía.

En nuestro organismo se han modificado ciertas accionas con el fin de integrar el consumo de energía en su desarrollo:

class Organismo{

    ...

    void mover(){ //actualiza la ubicaciĆ³n del organismo

        ...
        energia -= gastoMoverse;

    }

    ...

    void reproducirse( Organismo otro ){

        if( energia > 50 && edad>60 && otro.edad>60 ){

            miEcosistema.nacer_Organismo( especie , x+random(-radio,radio) , y+random(-radio,radio) );
            energia -= gastoReproducirse;

        }

        ...

    }

    ...

}    
   

Hecho en Processing


Por ejemplo, el comportamiento mover( ) descuenta, de la energía del organismo, el gasto de moverse. El comportamiento reproducirse( ) tambien descuenta de la energía el gasto en cuestión. Si nos fijamos detenidamente en este óltimo comportamiento, notaremos que no sólo consume energía, sino que la propia posibilidad de realizarse está determinada por la condición de poseer un mínimo de energía. Es decir, si el organismo no posee un mínimo de 50, como cantidad de energía, entonces no puede reproducirse:
if( energia > 50 && edad>60 && otro.edad>60 ), tambien consulta por la edad del organismo, algo así colmo "exigirle una mínima madurez para poder repruducirse".



La recuperación de energía

La energía no sólo se consume, también es posible recuperarla:

class Organismo{

    ...

    void comerAlOtro( Organismo otro ){

        if( energia < 70 ){

            energia += gananciaComer;
            otro.morir();

        }
        else{

            huirDelOtro( otro );

        }

    }

}
      	
      

Hecho en Processing


En este caso, cuando el organismo como a otro organismo, entonces recupera energía, en proporción con una variable llamada gananciaComer. Aquí, nuevamente las acciones se ven restringidas a la cantidad de energía disponible, esto sucede en el condicional que pregunta si la energía es menor a 70: if( energia < 70 ) Esto es por lograr que los organismos que "ya estan satisfechos", es decir que no requieren energía por el momento, no coman desforadamente. Con esta condición se logra que los organismos sólo coman cuando les falta energía: es decir, cuando tengan hambre.