Implementación Serial de la función de Rosenbrock en ANSI-C

Con el fin de tener un benchmark serial disponible, hice una implementación de un algoritmo genético simple (con algunos parámetros ajustables) de la minimización de la función de Rosenbrock. La dejo subida aquí.

El desempeño es muy bueno, la voy a usar como referencia para estudiar el speed up de las versiones paralelizables, en principio en MPI, más luego en otras plataformas. Acepto sugerencias de optimización del código, ya que la idea para medir speed up es utilizar la mejor versión existente del problema.

Dado que va a ser utilizada como benchmark no utilicé un corte de procesamiento en el caso de llegar a un óptimo global (si es que se puede conocer), ya que no estaría comparando una misma cantidad de iteraciones, cosa que puede ser muy útil.

La salida de una corrida se ve así:

 Fitness del mejor individuo generacion 0 = 4998.768001 [x=1.013442  y=0.916077]
 Fitness del mejor individuo generacion 5 = 4999.850536 [x=1.364238  y=1.874105]
 Fitness del mejor individuo generacion 56 = 4999.945572 [x=0.786639  y=0.609365]
 Fitness del mejor individuo generacion 90 = 4999.993030 [x=1.011555  y=1.014976]
 Fitness del mejor individuo generacion 257 = 4999.995249 [x=1.023401  y=1.040867]
 Fitness del mejor individuo generacion 290 = 4999.996838 [x=1.001817  y=1.009258]
 Fitness del mejor individuo generacion 671 = 4999.997794 [x=1.039652  y=1.078359]
 Fitness del mejor individuo generacion 891 = 4999.999793 [x=0.988134  y=0.975593]
 Fitness del mejor individuo generacion 20930 = 4999.999837 [x=1.002684  y=1.006624]
 Fitness del mejor individuo generacion 21727 = 4999.999890 [x=0.990997  y=0.981535]
 Fitness del mejor individuo generacion 52676 = 4999.999977 [x=1.001246  y=1.002026]
 Fitness del mejor individuo generacion 52678 = 4999.999977 [x=1.001244  y=1.002026]
 Fitness del mejor individuo generacion 128817 = 4999.999993 [x=0.997415  y=0.994781]
 Fitness del mejor individuo generacion 253474 = 4999.999996 [x=0.998250  y=0.996419]
 Fitness del mejor individuo generacion 547343 = 4999.999997 [x=0.998733  y=0.997576]
 Fitness del mejor individuo generacion 959670 = 4999.999999 [x=0.999087  y=0.998105]

Llegó a una diferencia menor a 10-6 en la función objetivo, y a una distancia menor a 10-3 en el plano de la función, lo que es muy positivo en una exploración discreta (la representación es del algoritmo genético simple, es decir, un arreglo de bits).