¿Entre mas instrucciones o genes, más rápida y precisa es la adaptación?. Esta simulación contesta esta pregunta. Cada n intentos, se suman 5 instrucciones a las que se pueden generar. Por ejemplo: En 25 instrucciones, aleatoriamente se decide si se genera un programa de 1 a 25 instrucciones, en 40 instrucciones, de 1 a 40 y así sucesivamente. Cada ciclo da más libertad para tener mas instrucciones.
Se han hecho varios experimentos, haciendo que se intenten 1000, 5000 y 10000 veces. Al observar los resultados, puede observar que no necesariamente tener acceso a mas instrucciones sea mas rápida o precisa la adaptación. Puede ser por varios factores:
1. Siempre se genera aleatoriamente los programas, no muto los mejores.
2. Solo interesa la variable de salida Y, las otras no y pueden ser prometedoras.
En siguientes simulaciones, se implementará la mutación de los mejores, y se podrá decidir si el programa generará de 1 a N instrucciones o siempre generará N instrucciones
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;
Nota: 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.
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 generarán 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.