En los motores anteriores, se generaban una serie de organismos, los cuales se adaptaban a un determinado número de ambientes. Sin embargo, un problema que surge con estas simulaciones es que una vez un organismo tiene una buena adaptación, los siguientes organismos generados siguen la corriente del primero, luego muchos ambientes no son tenidos en cuenta.
Para resolver este problema, esta simulación NO permite que dos o mas organismos compartan el mismo ambiente de entrada y de salida. Y dado el caso, el mejor adaptado se queda y el resto es desechado.
El usuario define en el archivo de inicialización Motor15.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:
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).
Este es un listado generado por el programa:
MOTOR15. Simbiosis. Parte 3.
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
Máximo número de Organismos a generar: 5
Ambientes Entrada: [0] Salida: [2]
Error: 6.193601
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;
1: Y = 2/X-X/((((X/X))));
2: Z = (4*Y);
3: if( W = Y*7*Y ) goto 2;
4: Z = Z/((((7/8))));
5: if( W = 1+(2/X) ) goto 9;
6: W = X*1*X;
7: if( Z ! ((W+W)) ) goto 0;
8: X = X/6-3;
9: Y = 7/(8-2);
return Y;
}
Ambientes Entrada: [3] Salida: [1]
Error: 25.785713
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;
1: Y = 2/X-X/((((X/X))));
2: if( X < (5-6) ) goto 7;
3: Y = 2+4-X;
4: W = X*2/X;
5: Y = Z*(2-Z);
6: Y = (Y+9);
7: Z = ((Z+Z));
return Y;
}
Ambientes Entrada: [2] Salida: [0]
Error: 5.160267
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;
1: Y = 2/X-X/((((X/X))));
2: if( X ! 4-(5-W) ) goto 6;
3: Y = Y/5*Y;
4: X = (X/5);
5: Z = (Z*1);
6: W = X+8/7;
7: if( Z = (5)*9 ) goto 4;
return Y;
}
Ambientes Entrada: [4] Salida: [1]
Error: 14.474553
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;
1: Y = 2/X-X/((((X/X))));
2: if( X < (W/8) ) goto 0;
3: W = (1+W);
4: Z = 7-6/X;
5: Y = Y/Y+6;
6: if( W < (3*Y) ) goto 1;
7: X = Z*((9+Z));
8: Y = Y-Y+7;
9: W = (Z*Z);
return Y;
}
Ambientes Entrada: [2] Salida: [1]
Error: 21.910267
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;
1: Y = 2/X-X/((((X/X))));
2: if( X < (W/8) ) goto 0;
3: W = (1+W);
4: Z = 7-6/X;
5: Y = Y/Y+6;
6: if( W > (Z/Z) ) goto 5;
7: X = Z*((9+Z));
8: Y = Y-Y+7;
9: W = (Z*Z);
return Y;
}
Ambientes Entrada: [0] Salida: [1]
Error: 25.944445
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;
1: Y = ((X*(X/X*X/9)));
2: Z = (4*Y);
3: if( Z = Y*7*Y ) goto 2;
4: Z = Z/((((7/8))));
5: if( W = 1+(2/X) ) goto 9;
6: W = X*1*X;
7: if( Z ! ((W+W)) ) goto 0;
8: X = X/6-3;
9: Y = 7/(8-2);
return Y;
}
Descargue el fuente: De clic aquí
Descargue el ejecutable para Windows: De clic aquí