Vida Artificial

Investigación

Artículos

Autor

Otros

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:

  1. Descargar el programa ejecutable (Windows 95/98/NT/2000). De clic aquí.

  2. Descargar el programa fuente (C++). De clic aquí.

Para configurarlo, debe modificar el archivo de inicialización Motor08.ini, observe la figura:

image

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...

1