Ir a Inicio

Registro histórico

Búsqueda del mejor algoritmo que genere una serie dada

La generación de expresiones simples para la búsqueda de patrones dio acercamientos notables. El siguiente paso es la generación de algoritmos al azar, para mejorar esta aproximación. Las simulaciones en este capítulo fueron llamadas "Motores" porque de ahora en adelante la investigación estará encaminada en la búsqueda del algoritmo que logre adaptarse a cualquier ambiente. A este algoritmo se ha llamado: "Motor de Vida Artificial".

Uso de algoritmos generados al azar

Motor 01: Algoritmos aleatorios Usando la misma filosofía de la Regresión Simbólica se generan algoritmos de manera aleatoria que usando los valores de entrada proporcionados por el usuario, trate de aproximarse a los valores esperados proporcionados por el usuario.
Motor 02: Mutación y Control Similar a la simulación anterior, en este caso se generan tres algoritmos aleatoriamente y luego se mutan, dejando en primer lugar los mas aptos. El usuario tiene mas control sobre la generación aleatoria.
Motor 03: Mutación, Generación aleatoria, Control. Combinación de mutación y generación aleatoria. Mayor facilidad para descargar los fuentes.
Motor 04: Estudio Estadístico ¿Entre mas instrucciones o genes, mas rápida o más precisa es la adaptación?. Esta simulación puede contestar esta pregunta. Ahora mas pruebas se han hecho con nuevos ambientes y resultados.
Motor 05: Estudio Estadístico. Generación Aleatoria y Mutación Similar al Motor 04. Se mezclan Generación Aleatoria y Mutación de algoritmos. Optimización del algoritmo para mayor velocidad.
Pruebas: Expresiones Simples vs Algoritmos Aleatorios ¿Que se adapta más rápido? ¿Expresiones simples o algoritmos (ambos generados aleatoriamente)?. Durante varios días realicé pruebas para saber mas sobre este tópico.
Motor 06: Proceso de Atrofia En el artículo: La gran decisión: ¿Cabeza o cola?, se menciona como los organismos a través de la evolución se van deshaciendo de partes ya no útiles de su cuerpo (atrofia). Este proceso es simulado cuando los algoritmos son optimizados.
Motor 07: ¡Velocidad!. Motor 05 escrito en C++ Se reescribe el "Motor 05" en C++ y se optimizan varias funciones. El resultado: un aumento dramático de velocidad y mayor información. Pruebas hechas con un(1) millón de intentos.
Motor 08: Proceso de Atrofia. Reescrito en C++ Gracias a la velocidad alcanzada por los nuevos motores en C++. Se hacen estudios sobre como mejorar el proceso de mutación (similar al Motor 06 en Java).
Motor 09: Sutil Busca algoritmos al azar, luego el mejor lo talla (muta) fuertemente y finalmente lo retoca (cambios sutiles en alguna instrucción).
Motor 10: Sutil Mejorado Se examinan los procesos de generación y mutación para hacerlos mas eficientes.
Motor 11: Unión Unión. En vez de enfrentar, se unen las dos estrategias para acercamiento: expresión simple y algoritmos. Una simbiosis que suma las fortalezas de ambas y neutraliza las debilidades.
Confrontación: Motor 10 y 11 Observando los resultados anteriores, determiné que era necesario probar estos motores y decidir de una vez por todas cual es el mejor. Aquí están los resultados.

Uso de Poblaciones

Población y desempeño (diseño) Mas sencillo y mucho mas rápida la evaluación de algoritmos genéticos. Se introduce el concepto de población.
Primera Implementación Primera simulación donde se implementa los conceptos de población, manejo de bytes directamente.
Segunda implementación mejorada Segunda simulación donde se filtra mas fuerte los organismos y lee un archivo de inicialización. La mejora es que hay un manejo dinámico de memoria (ya no hay límites) y genera los algoritmos genéticos listos para ser compilados en C++ (y validar que los resultados son ciertos).
Tercera implementación (Fuertes Mejoras) Esta versión del algoritmo genético en C++ trae importantes funcionalidades que supera ampliamente la segunda implementación.
Pruebas (ascendente, descendente, alterno) Se repiten las pruebas usando como datos las usadas previamente.
Cuarta implementación (mejoras) El nuevo algoritmo presenta notables mejoras en las pruebas con un sencillo cambio.
Pruebas (ascendente, descendente, alterno) Se repiten las pruebas usando como datos las usadas previamente.
Programación Genética + Población + Aislamiento La generación de ecuaciones en forma aleatoria (conocido como Programación Genética) la abordé en el Capítulo 1 pero faltaban ciertas pruebas que se desarrollan ahora.