Motor 08: ¡Velocidad!: Motor 06 reescrito en C++ y optimizada.
El proceso de atrofia en los seres vivos que implemente en Motor 06 (Java), se reescribió en C++ (aplicación texto). Nuevamente se obtienen aumentos dramáticos de velocidad. Se hicieron varias pruebas con diferentes series.
Las nueva característica del Motor08 es que es configurable vía un archivo de inicialización, es decir, ya no requiere recompilar la aplicación para probar diferentes simulaciones.
El programa esta escrito en C++, tiene dos caminos para probarlo:
Descargar el programa ejecutable (Windows 95/98/NT/2000). De clic aquí.
Descargar el programa fuente (C++). De clic aquí.
Para configurarlo, debe modificar el archivo de inicialización Motor08.ini, observe la figura:
Motor08 optimiza el mejor algoritmo, es decir, aquellas instrucciones que nunca se ejecutaron son eliminadas (un proceso de atrofia), el algoritmo entonces tiende a ser mas pequeño (con menos instrucciones).
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,
Serie Salida: -1,2,-3,4,-5,6,-7,8,-9,10,-11,12,-13,
Intentos: 1000000
CPU: 130
Mutar al simular: 70%
Hay libertad de generar de 1 a N instrucciones
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%
Instrucciones | Intento | Aproximación |
5 | 267315 | 46.000000 |
10 | 3914 | 72.000000 |
15 | 323002 | 44.000000 |
20 | 139098 | 62.000000 |
25 | 19860 | 60.000000 |
30 | 423143 | 24.000000 |
35 | 19907 | 60.000000 |
40 | 37943 | 60.000000 |
45 | 51480 | 17.000000 |
50 | 74882 | 62.000000 |
55 | 234761 | 19.125000 |
60 | 66036 | 62.000000 |
Promedio: | 49.01041666... |
Descargue el listado generado. De clic aquí.
Motor08. Optimiza el mas apto y luego muta una instrucción.
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,
Serie Salida: -1,2,-3,4,-5,6,-7,8,-9,10,-11,12,-13,
Intentos: 1000000
CPU: 130
Mutar al simular: 50%
Es obligatorio generar N instrucciones
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%
Instrucciones | Intento | Aproximación |
5 | 13102 | 72.000000 |
10 | 70641 | 71.000000 |
15 | 907825 | 12.400413 |
20 | 215607 | 0.000000 |
25 | 956918 | 17.901031 |
30 | 88244 | 30.000000 |
35 | 640910 | 40.000000 |
40 | 87390 | 43.000000 |
45 | 205716 | 4.000000 |
50 | 23587 | 65.000000 |
55 | 546809 | 12.000000 |
60 | 112329 | 24.000000 |
Promedio: | 32.60845366666.... |
Descargue el listado generado. De clic aquí.
Conclusiones:
Similar al Motor06, la optimización presenta el problema que como disminuye el tamaño del algoritmo, al tener muy pocas instrucciones y poca libertad en mutar, puede perder cualquier esperanza de lograr el acercamiento (adaptación) a la serie dada por el usuario (ambiente).
¿Que hacer entonces?. Se presentan los siguientes problemas:
1. Instrucciones (Genes) que nunca son ejecutadas, al mutarse no le dan ningún beneficio al ser vivo por lo tanto se pierde un ciclo de evaluación.
2. Si se elimina las instrucciones sobrantes, el algoritmo se hace cada vez mas pequeño, o demasiado pequeño (1 instrucción), luego las mutaciones hacen cambios tan fuertes que es muy poco probable que resulte beneficioso al organismo.
La investigación continua...