Vida Artificial

Investigación

Artículos

Autor

Otros

Motor 05: Estudio Estadístico

¿Entre mas instrucciones o genes, más rápida y precisa es la adaptación?. Esta simulación contesta esta pregunta. El usuario decide si genera de 1 a n instrucciones o solo n instrucciones. Además se combina la generación aleatoria con la mutación del mejor algoritmo.

La restricción de libertad para crear instrucciones, fue necesario para comprobar si el descubrimiento de que mas instrucciones no significa mayor adaptación.
Para los valores por defecto con que se carga este applet, este tendrá éxito (total adaptación) cuando genere aleatoriamente o mediante mutación el siguiente algoritmo:

Entra (X):1,2,3,4,5,6,7,8,9,10,11,12,13
Sale (Y): 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13

float fSerVivo(float X)
{
float W=0, Y=0, Z=0;

1: W = W + 2;
2: if ( W < X ) goto 1;
3: if ( W = X ) goto 5;
4: if ( W > X ) goto 7;
5: Y = X * -1;
6: if ( Z = 0 ) goto 0;
7: Y = X;
return Y;
}

Ese algoritmo se generó a mano, pensando como un programador, su aproximación es cero(0) que significa una total adaptación, ¿Podrá la simulación anterior llegar a esta aproximación o a este algoritmo? Estadísticamente es posible, pero un calculo de probabilidades arrojaría que se necesitan millones de pruebas antes de dar con este.


Esta simulación prueba diferentes algoritmos que dado unos valores de entrada generen los valores de salida requeridos por el usuario. Los programas son generados en forma aleatoria. Usted puede crear cualquier programa con solo asignaciones e instrucciones IF. Los programas generados manejan solo 4 variables, entre estas una es de entrada X y una es de salida Y, W y Z son temporales.
Las líneas de código son de dos tipos:
1. Asignación
2. Validación IF

En la asignación el modelo de construcción es:
Label: Variable = Expresión;
Donde Variable puede ser W, X, Y, Z y Expresión es una expresión matemática de una sola variable independiente (que puede ser W, X, Y, Z), esta variable independiente la he llamado variable activa de la expresión.
Ejemplos de asignaciones:
X = Y * 3 / 2 + Y * Y - 7;
W = 45 + (3 * Z - Z * Z * Z);
Z = 4 * Z - 2 * Z * Z;

En la validación IF el modelo de construcción es:
Label: IF ( Variable Condición Expresión ) Goto LineaCodigo
Donde Variable puede ser W, X, Y, Z; Condición puede ser >, <, !, = ; Expresión es una expresión matemática de una sola variable independiente (que puede ser W, X, Y, Z), esta variable independiente la he llamado variable activa de la expresión; LineaCodigo es a que línea de código el programa irá si la condición es evaluada como verdadera.
Ejemplos de validaciones son:
IF ( X > (4 * Y - Y * Y + 7) ) Goto 2;
IF ( Z ! (12 -X + X * X + 7) ) Goto 8;
IF ( W < (W * W - 7 * W - 43) ) Goto 2;

Uniendo asignaciones con validaciones obtenemos un programa, por ejemplo:
1: IF ( X> (3 + X + X*X )) Goto 3; // Es in If condicional
2: Y = 4 - Z +Z * Z * Z; // Es una asignación
3: Y = 10 - W * W;

OJO!!: Goto 0 es finalización del programa.

Modo de Uso:
Serie de Entrada: El valor X que tomarán los algoritmos generados para operar.
Serie de Salida: Valores esperados, se comparan con el valor de salida Y de los algoritmos generados.
Número de Genes: Máximo número de instrucciones generadas para el algoritmo.
Máximo Ciclos de CPU: Muchos algoritmos pueden tener 'gotos' que hacen que nunca haya salida. Esto evita ese problema, limitando a cuantas instrucciones procesará. Si el ser vivo no tiene salida, se elimina.
De 1 a N instrucciones: Si esta chequeado, los algoritmos generados, aleatoriamente decidirán cuantas instrucciones tener hasta el máximo evaluado. Por ejemplo, si es 10 instrucciones, se generaran algoritmos que tendrán de 1 a 10 instrucciones. Al no chequearlo se generan un número fijo de instrucciones, por ejemplo si es 10 instrucciones se generarán algoritmos de 10 instrucciones.
Iniciar: Inicializa todo los valores, empieza la simulación.
Detener: Detiene la simulación.
Continuar: Continua la simulación detenida.

Propiedades Avanzadas:
Probabilidad de IF, Asignación:
El usuario decide con que probabilidad se generaran instrucciones de un tipo u otro.
Variable Activa: Probabilidad de que variable estará en las expresiones
Operador: Probabilidad de que tipo de validación aparecerán: >, <, =, !
Longitud: Tamaño máximo en caracteres de la expresión.
X, Paréntesis, Número: Probabilidades para que aparezcan estos tres objetos en las expresiones.

Algoritmo optimizado para mayor velocidad. El evaluador de expresiones fue rediseñado para ofrecer mejor desempeño. Consulte el código fuente para mas información.

Baje el código fuente

1