Ir a Inicio

Motor de Vida Artificial: Motor 13: Múltiples ambientes y Organismos que se adaptan. Simple.

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 Motor13.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
Por ahora es muy sencilla esta implementación:

  1. Se analiza cada ambiente.
  2. Se generan simples organismos al azar de tan solo una instrucción.
  3. No hay mutaciones.
  4. En un archivo se imprime los resultados de la adaptación.

Debe el usuario cambiar el archivo Motor13.ini

image

Esta simple simulación generará organismos de tan sola una(1) instrucción, 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:

MOTOR13. Simbiosis. Parte 1.
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 asignaran, compararan o estarán al interior de las expresiones: W=25, X=25, Y=25, Z=25

Número de ciclos CPU: 130
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 = X-X+X+2-X-X;
return Y;
}

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

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

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

1: Y = 7+(2*6/9/(X/5));
return Y;
}

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

1: Y = (1)-4-X+(X/X);
return Y;
}

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

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

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

1: Y = (1-(X+((1/1))));
return Y;
}

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

1: Y = ((2-1*X-(X/X)));
return Y;
}

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

1: Y = (X-(((2)*X+1)));
return Y;
}

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

1: Y = 4/X+7+(X/((X+X)));
return Y;
}

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

1: Y = X+(X)/X-2*X;
return Y;
}

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

1: Y = 7+(2*6/9/(X/5));
return Y;
}

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: [3] Salida: [1]
Error: 27.250000
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;

1: Y = 5/5+(X/4)+5;
return Y;
}

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

1: Y = X/8-((X-X/X));
return Y;
}

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

1: Y = 7+(2*6/9/(X/5));
return Y;
}

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

1: Y = (((X+X-(3*X))));
return Y;
}

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

1: Y = X/8-((X-X/X));
return Y;
}

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

1: Y = 3-1-(((X-1+1)));
return Y;
}

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