Dada una serie de datos (X, Y) donde X no se repite, se busca la expresión Y = F(X) que genere esa serie de datos.
El algoritmo es el siguiente:
1. Botón: Generar Dataset. Generar una ecuación al azar del tipo Y=a*SENO(b*X+c) + d*SENO(e*X+f) + ...... + p*SENO(q*X+r). Dónde a, b, c, d, e, f, ....p, q, r son valores aleatorios.
2. Con esa ecuación dar origen a N valores (X, Y). X no debe repetirse.
3. Normalizar los valores (X, Y)
4. Un subconjunto de esos valores (X, Y) son para validar y evitar el sobre-entrenamiento.
5. Botón: Procesar. Iniciar ciclo
5.1 Generar N redes neuronales y entrenarlas para dar con el patrón de esa serie (X, Y)
5.2 Generar M individuos y modificarlos (algoritmo evolutivo) para dar con el patrón de esa serie (X, Y)
6. Botón: Detener. Finaliza el ciclo
7. Probar cada red neuronal y ver cuál se ajusta más a los valores de validación.
8. Probar cada individuo y ver cuál se ajusta más a los valores de validación.
9. Mostrar los tres gráficos: valores (X, Y) generados, la mejor red neuronal y el mejor individuo.
Conclusiones:
Este algoritmo evolutivo ha mostrado un muy buen ajuste, pero hay que dejar que ejecute durante muchos ciclos.
Cabe recordar que existe un procedimiento determinístico para hallar este tipo de curvas: La transformada rápida de Fourier, la cual encuentra las curvas que sumadas generan la curva de datos del ambiente. ¡OJO! Funciona siempre y cuando el ambiente sea cíclico. El software muestra un acercamiento no determinista a la curva, pero, por supuesto, lo mejor es usar la Transformada de Fourier.
Descargue el programa en C# dando clic aquí.