martes, 9 de abril de 2013

Gray Scott y FitzHugh Nagumo - Reaction Diffusion System Simulation


El pasado 22 de Marzo del 2013. Decidí modificar y fusionar dos
programas de theoreticalpoodle:

    Gray Scott - Reaction Diffusion System Simulation
(Mayo 24, 2012 12:32)
http://www.freebasic.net/forum/viewtopic.php?f=8&t=19917
(en este publiqué mi versión) y
    FitzHugh Nagumo - Reaction Diffusion System Simulation
(Mayo 24, 2012 12:45)
http://www.freebasic.net/forum/viewtopic.php?f=8&t=19918

 Las modificaciones han sido realizadas en FBEdit con FreeBasic 0.24.

 Los dos programas en realidad son el mismo variando las fórmulas que generan las imágenes y son del tipo de aplicaciones llamadas 'Autómatas Celulares' en los que mediante un conjunto de reglas se muestra el desarrollo o evolución de un sistema. Tal vez el más conocido sea el 'Juego de la Vida' de Conway (del que por cierto hace unos años hice mi versión).

 Los programas de theoreticalpoodle se inician siempre de la misma
manera (teniendo cada uno los puntos de inicio diferentes) y tras unos cientos de ciclos consiguen rellenar la matriz de puntos que forman el área visible (aunque esta área es de 'Frontera periódica', lo que se va por un lado aparece por el otro). Una vez rellena los diseños se repiten de forma cíclica. Este proceso es muy lento en estas aplicaciones, así que paciencia.

 Las características de mi versión son:
- Unifica y acelera en casi un 20% la velocidad de la evolución, pero en este caso y como ya expliqué en el post de Gray Scott, los cálculos que se realizan son muy intensos haciendo la evolución del sistema muy, muy lenta no superando nunca las 3 frames por segundo. Más abajo analizo esto.
- Mantiene los inicios de las versiones de theoreticalpoodle, y al estar unificadas permite intercambiar las fórmulas y ver como evoluciona (amplia la variedad del diseño).
- También permite, iniciarlo vacío (fondo verde) y con el ratón seleccionar los puntos que evolucionaran.
- El uso del ratón siempre está presente, para modificar el diseño una vez entra en el modo de repetición cíclica.
- Muestra en la ventana el uso del teclado.
- Como mi versión sólo pretendía mostrarle a theoreticalpoodle que la forma en que programó sus versiones con tanto elseif no es la más óptima, tiene 4 modos de funcionamiento, cada uno más 'rápido' que el anterior:
    - 1. Sin optimizaciones, probablemente más lento que las versiones originales, porque aquellas no imprimían ningún texto ni controlaban el teclado.
    - 2. Con optimización del color, pasando de más de 90 elseif a solo 10, esto optimizó alrededor del 6, 7 %.
    - 3. Con optimización de las funciones, alrededor del 12 a 13 %.
    - 4. Con las dos optimizaciones anteriores, que sumadas dan el casi 20 %.


 La imagen del principio y única que tengo muestra una comparativa
de las 3 versiones que van incluidas en el archivo rar.


- La del 5001 es la de theoreticalpoodle con el contador de frames. Fue la primera que se inicio.

- La de la derecha con Contador; 5331 fue la segunda que se ejecuto, esta optimizada en los colores y

- La de Contador: 5882 se inicio la tercera, siendo claramente la más rápida, estando optimizado en los colores y en las funciones.

 A los valores del segundo y tercero en ejecutarse habría que añadirles algunos frames 5 o 6 al segundo y 10 a 12 al tercero por lo que se tarda en ir ejecutando cada programa por separado.
 Como se puede comprobar la mayor mejora en el rendimiento se produce en la optimización de las funciones:

5331 - 5001 = 330 / 50 = 6.6 % más rápido con la optimización de colores.

5882 - 5001 = 881 / 50 = 17.62 % más rápido que el original con ambas optimizaciones.

17.62 - 6.6 = 11.02 de las funciones.

 En cualquier caso la velocidad general del programa es muy lenta, no supera los 3 frames nunca en mi ordenador (un Pentium IV Quad Core a 2,4 Mhz).

 ¿Vale la pena la optimización?
Se podría pensar que esta optimización, no vale la pena, pero si vemos como funcionan mi versión y las otras, se puede apreciar esa diferencia de velocidad.
 Este tipo de programas no tienen una utilidad real, son simples demostraciones, aunque en este caso las imágenes se podrían usar como teselas para mosaicos, o si usamos el ratón y situamos el punto inicial en el centro generaría toda una variedad de bonitos Mándalas.


 La descarga contiene la imagen del post, el código fuente de mi modificación y 3 versiones del programa para realizar la comparativa de la imagen.


No hay comentarios:

Publicar un comentario