Velocidad, es uno de los objetivos buscados en este motor, entre mayor velocidad se pueda lograr, mayor será el número de algoritmos (organismos) que podrán ser probados y muy posiblemente se tendrá una mejor aproximación.
En todas las simulaciones realizadas hasta ahora, las expresiones matemáticas son construidas de forma aleatoria (siguiendo una reglas), esta expresiones son después analizadas y evaluadas, observe a continuación un típico ejemplo de un algoritmo (organismo):
PosY: 6*PI/70, Error: [2.022986]
Organismo
float fSerVivo(float X)
{
float W=0, Y=0, Z=0;
1: Y = (X/(4/X));
2: Y = (Y-(3/Y));
3: if( Z = ((3-5*Y)) ) goto 1;
4: if( X < W/5/7-W ) goto 5;
5: if( Y = Z/1/5-Z ) goto 4;
6: if( Y > 5*Y-(((4*Y))) ) goto 2;
7: X = X-(((X)-2));
return Y;
}
Tomemos por ejemplo la instrucción 6: , al factorizar tendríamos una expresión así:
3: if ( Y > 3*Y ) goto 2;
O tomemos la instrucción 7: , al factorizar o simplificar la expresión quedaría así:
4: X = 2;
Es claro que las expresiones aleatorias no son efectivas, estas expresiones "mal" construidas deben luego ser analizadas por el evaluador de expresiones y en el caso de mutarlas se debe buscar que partes pueden ser mutadas.
Construyendo mejores expresiones
¿Por que no construir expresiones de una manera mas inteligente?, esta es la clave de la optimización agresiva. Como se observó anteriormente, las expresiones matemáticas pueden factorizarse y llegar a ser un simple polinomio del tipo:
luego es simplemente generar aleatoriamente los valores a, b y c (negativo o positivo), las expresiones ya estarán construidas de manera optimizada, otro punto es que como solo son polinomios no se requiere el evaluador de expresiones y en las mutaciones se cambian estos valores.
Consecuencias
Inevitablemente existen consecuencias al usar este proceder y es que se esta limitando la riqueza que ofrece la generación aleatoria de expresiones. Es necesario entonces estudiar las expresiones que se generaban con los motores anteriores y como podrían implementarse usando la filosofía de polinomios.
Versión Final
El motor 19 se ha construido siguiendo esta filosofía, se puede observar que el incremento de velocidad es muy significativo. Los polinomios construidos son de la forma:
a, b, c, d y e son valores enteros.
Resultados (Motor 18 vs Motor 19)
La generación de expresiones aleatorias (Motor 18) proporciona mejor aproximación aunque tarda mayor tiempo.
Primera Prueba
Expresión de ambiente: x*x-x+2 (simple) de 0 a PI/2
30 Organismos
Promedio Aleatorio: 13.8761505 en 4min50seg
Promedio Polinomio: 20.6153708 en 7min 49seg
50 Organismos
Promedio Aleatorio: 14.1538513 en 6min12seg
Promedio Polinomio: 17.0080921 en 4min 40seg
70 Organismos
Promedio Aleatorio: 18.0942494 en 16min14seg
Promedio Polinomio: 19.866744 en 4min 37seg
Segunda Prueba
Expresión de ambiente: 2*x*x*x-5*x*x+3*x-4 (compleja) de 0 a PI/2
30 Organismos
Promedio Aleatorio: 37.9813786 en 11horas 00min 57seg
Promedio Polinomio: 684.72057 en 15min 05seg
50 Organismos
Promedio Aleatorio: 29.0844255 en 17horas 55min 36seg
Promedio Polinomio: 522.85421 en 20min 28seg
70 Organismos
Promedio Aleatorio: 167.032688 en 20horas 44min 03seg
Promedio Polinomio: 510.975328 en 27min 14seg
Tercera Prueba
Expresión de ambiente: 2*x*x*x-5*x*x+3*x-4 (compleja) de 0 a PI/2
Se le da mas tiempo al Motor 19 para evaluar.
30 Organismos
Promedio Aleatorio: 37.9813786 en 11horas 00min 57seg
Promedio Polinomio: 277.304268 en 10horas 07min 24seg
50 Organismos
Promedio Aleatorio: 29.0844255 en 17horas 55min 36seg
Promedio Polinomio: 162.969204 en 16horas 10min 35seg
70 Organismos
Promedio Aleatorio: 167.032688 en 20horas 44min 03seg
Promedio Polinomio: 131.79 en 26horas 52min 09seg
Conclusión Pruebas
La generación aleatoria de expresiones implementada en el Motor 18 generó mejores promedios que el Motor 19 y mas cuando el ambiente se volvía mas complejo. A excepción de la última prueba en el que el polinomio tuvo mucho mas tiempo que aleatorio y mostró mejores resultados. En ambientes simples, el Motor 19 si se aproximó a los resultados del Motor 18.
Se concluye entonces que la generación totalmente aleatoria, sin control, produjo mejores resultados, esto se debe a la riqueza que se encuentra en un ambiente aleatorio. El problema es que es mas lento de evaluar. Una razón por la cual la evolución de las especies es lenta.
Descargue el fuente: De clic aquí
Descargue el ejecutable para Windows: De clic aquí
Descargue las pruebas: De clic aquí