Motor de Vida Artificial: Pruebas
Durante la construcción de las diferentes simulaciones, se observó que las expresiones simples se acercaban más a la serie esperada (una adaptación más rápida), comparada con la generación de algoritmos en forma aleatoria. Esto fue sorprendente, por lo que se decidió hacer una serie de pruebas con diferentes series de entrada y salida. Para esta prueba, se modificó una simulación (la IV.) para que aceptase valores de entrada y salida.
Metodología de las Pruebas
Se cambiaron los ambientes (valores de salida) en diversas formas:
Serie de salida ascendente;
Serie de salida descendente; y,
Serie de salida alterna (valor positivo, valor negativo, valor positivo, valor negativo, ..)
Resultados Expresiones Simples
1. Serie de salida ascendente;
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
Serie Salida: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,
Prueba | Puesto 1 | Puesto 2 | Puesto 3 |
1 (30000 intentos) | 39,55234 | 39,55234 | 39,55234 |
2 | 41,909496 | 41,909496 | 41,909496 |
3 | 41,909496 | 41,909496 | 41,909496 |
4 | 55,0 | 55,0 | 55,0 |
5 | 42,766647 | 42,766647 | 42,766647 |
6 | 42,766644 | 42,766644 | 42,766644 |
7 | 54,383324 | 55,0 | 55,0 |
8 | 42,76664 | 55,0 | 55,0 |
9 | 52,374985 | 55,0 | 55,0 |
10 | 42,69556 | 42,69556 | 42,69556 |
Promedio | 40,1125132 | 47,1600183 | 47,1600183 |
2. Serie de salida descendente;
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
Serie Salida: 97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2,
Prueba | Puesto 1 | Puesto 2 | Puesto 3 |
1 (30000 intentos) | 41,941315 | 41,941315 | 41,941315 |
2 | 42,71286 | 42,993042 | 42,993042 |
3 | 55,0 | 55,0 | 55,0 |
4 | 41,99689 | 41,99689 | 41,99689 |
5 | 71,48251 | 71,48251 | 71,48251 |
6 | 62,16886 | 62,16886 | 62,16886 |
7 | 55,0 | 55,0 | 55,0 |
8 | 46,771816 | 46,771816 | 46,771816 |
9 | 93,31336 | 93,31336 | 93,31336 |
10 | 43,30601 | 43,30601 | 43,30601 |
Promedio | 55,3693621 | 55,3973803 | 55,3973803 |
3. Serie de salida alterna
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,
Prueba | Puesto 1 | Puesto 2 | Puesto 3 |
1 (30000 intentos) | 75.3318 | 75.3318 | 75.3318 |
2 | 72.74801 | 72.74801 | 72.74801 |
3 | 78.05236 | 78.05236 | 78.05236 |
4 | 67.64937 | 67.64937 | 67.64937 |
5 | 72.0 | 72.0 | 72.0 |
6 | 81.08726 | 81.08726 | 81.08726 |
7 | 72.0 | 72.0 | 72.0 |
8 | 62.872818 | 62.872818 | 62.872818 |
9 | 72.02144 | 72.02144 | 72.02144 |
10 | 76.003716 | 76.003716 | 76.003716 |
Promedio | 72.9766774 | 72.9766774 | 72.9766774 |
Resultados Algoritmos Aleatorios (Motor 05. Generación Aleatoria y Mutación)
1. Serie de salida ascendente (Longitud Expresión: 2 operandos);
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
Serie Salida: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,
Promedio ( ¿De 0 a N instrucciones? Si ): 88,30986166666...
Promedio ( ¿De 0 a N instrucciones? No ): 104,9827540833333....
2. Serie de salida descendente (Longitud Expresión: 2 operandos);
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
Serie Salida: 97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2,
Promedio ( ¿De 0 a N instrucciones? Si ): 186,6811570833333.....
Promedio ( ¿De 0 a N instrucciones? No ): 210,4241325
3. Serie de salida alterna (Longitud Expresión: 2 operandos)
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,
Promedio ( ¿De 0 a N instrucciones? Si ): 57,47668866666....
Promedio ( ¿De 0 a N instrucciones? No): 47,36754533333.....
¡Eureka!: Aproximación cero
En la siguiente prueba, después de 100.000 intentos, el Motor05 encontró el algoritmo que dada la serie de entrada, daba exactamente la serie de salida requerida (20 instrucciones), otros algoritmos se aproximaron por poco. La investigación esta dando sus frutos.
De clic aquí para bajar los algoritmos generados por esta simulación
Conclusiones
Después de estas pruebas, podemos observar que:
Las expresiones simples se aproximan mas a series ascendentes y descendentes. En cambio, en series con salidas alternas, los algoritmos fueron mas precisos.
Queda en el aire estas dos preguntas: ¿En series alternas podríamos mejorar el acercamiento de las expresiones simples usando funciones sinusoidales? ¿Los algoritmos generados aleatoriamente requieren mas inteligencia en su generación?.
Mas adelante se harán pruebas con otras series ascendentes, descendentes y alternas, los resultados en forma compacta serán publicados más adelante.
Nota: No se esta buscando la aproximación cero, existen procedimientos estadísticos que encontrarían expresiones con una aproximación bastante buena. El objetivo es observar el comportamiento de estas simulaciones y poder cuantificarlo. Por ejemplo, el uso de expresiones simples en unos casos es mejor que el uso de algoritmos, es mas, los algoritmos con pocas instrucciones son mas efectivos que los que poseen muchas. Eso da pistas sobre el modo de operar de la naturaleza: de manera simple, por la vía del menor esfuerzo.