Vida Artificial

Investigación

Artículos

Autor

Otros

Motor 14: Múltiples ambientes y Organismos que se adaptan. Expresiones simples y algoritmos, también está la capacidad de mutar.

Como sucede en la naturaleza, existen multitud de ambientes (temperatura, humedad, salinidad, PH, presión, gravedad, etc..), por esta razón estas nuevas simulaciones se tendrá en cuenta que hay múltiples ambientes. A diferencia de las anteriores simulaciones en las cuales solo hay un ambiente de entrada y salida (representadas por series numéricas), en esta simulación hay múltiples ambientes (múltiples series numéricas).

El usuario define en el archivo de inicialización Motor14.ini cuantos ambientes va a crear (hasta 14 ambientes), luego el programa generará organismos que se adapten a estos ambientes. Cada organismo tendrá una serie de entrada y otra de salida. Quedando de la siguiente forma:

image

Cada cilindro es un organismo, en este gráfico se han generado tres(3) organismos, los Ambiente2 y Ambiente5 no alteran los organismos (suele ocurrir).

Con esto comienzo los primeros pasos para implementar la simbiosis: Dualidad -Ambiente

A diferencia del Motor13, en esta simulación se generan organismos mas complejos (algoritmos), que tienen el poder de mutar instrucciones, por lo que su velocidad de adaptación es más rápida. Este seria el PseudoAlgoritmo:

  1. Se analiza cada ambiente.

  2. Se generan simples organismos al azar de una o múltiples instrucciones.

  3. Se mutan los más aptos.

  4. En un archivo se imprime los resultados de la adaptación.

image

Esta simple simulación generará organismos complejos, que se adapten a los ambientes definidos por el usuario (sAmbiente00 hasta sAmbiente13), para que el organismo se evalúe como adaptado, el índice de error no debe superar a fMaximoError.
El programa se detiene hasta que haya calculado 30 organismos.

Este es un listado de lo generado por este organismo:

MOTOR14. Simbiosis. Parte 2.
Ambientes. Total: [5]
[0] 1,-2,3,-4,5,-6,7,-8,9,-10,11,-12,13,
[1] 1,2,3,4,5,6,7,8,9,10,11,12,13,
[2] -1,2,-3,4,-5,6,-7,8,-9,10,-11,12,-13,
[3] -1,-2,-3,-4,-5,-6,-7,8,9,10,11,12,13,
[4] 1,2,3,-4,5,6,7,-8,-9,10,-11,-12,-13,

Posibilidades:
1. Tipo de Instrucciones. If Condicional: 50, Asignación: 50
2. En Instrucciones de If Condicional, el operador de comparación es: '==':25, '>':25, '<':25, '!=':25
3. Longitud de la expresión (número de operadores): 2

4. Construcción de las expresiones, posibilidad de salir X=33, Paréntesis:33, Números=34
5. Variables que se asignarán, compararán o estarán al interior de las expresiones: W=25, X=25, Y=25, Z=25

Número máximo de ciclos CPU: 130
Número de Instrucciones mínimas para algoritmo: 5
Número de Instrucciones máximas para algoritmo: 10
Error máximo de adaptación: 30.000000


Ambientes Entrada: [0] Salida: [2]
Error: 26.000000
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;

1: Y = 5+(7)-(9+X+5);
return Y;
}


Ambientes Entrada: [2] Salida: [0]
Error: 26.000000
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;

1: Y = 5+(7)-(9+X+5);
2: if( W ! 7+(Y+6) ) goto 6;
3: X = 9*6/6;
4: X = (X)/X;
5: if( Z ! (2/3) ) goto 4;
6: Z = (W/3);
7: X = W+((W)-W);
8: X = 5+X*X;
return Y;
}


Ambientes Entrada: [2] Salida: [0]
Error: 26.000000
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;

1: Y = 5+(7)-(9+X+5);
2: if( W ! (Y/1) ) goto 6;
3: X = 9*6/6;
4: X = (X)/X;
5: if( Z ! (2/3) ) goto 4;
6: Z = (W/3);
7: X = W+((W)-W);
8: X = 5+X*X;
return Y;
}


Ambientes Entrada: [0] Salida: [2]
Error: 24.000000
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;

1: Y = 5+(7)-(9+X+5);
2: if( W ! 7+(Y+6) ) goto 6;
3: X = 9*6/6;
4: if( X ! (X)/X ) goto 1;
5: if( Z ! (2/3) ) goto 4;
6: Z = (W/3);
7: X = W+((W)-W);
8: X = 5+X*X;
return Y;
}

Descargue el fuente: De clic aquí
Descargue el ejecutable para Windows: De clic aquí

1