int main (int argn, char **argc) { int rank; unsigned int ngenerations; char *best_genome; double *best_variables, best_objective; double xgenerations, mutation_ratio, reproduction_ratio, adaptation_ratio, evolution_ratio; FILE *file; #if HAVE_MPI MPI_Init (&argn, &argc); MPI_Comm_size (MPI_COMM_WORLD, &ntasks); MPI_Comm_rank (MPI_COMM_WORLD, &rank); #else rank = 0; #endif nthreads = 4; v[0].maximum = 10.; v[0].minimum = -10.; v[0].nbits = 30; v[1].maximum = 10.; v[1].minimum = -10.; v[1].nbits = 30; file = fopen (argc[1], "r"); fscanf (file, "%*s%lf%*s%lf%*s%lf%*s%lf", &xgenerations, &mutation_ratio, &reproduction_ratio, &adaptation_ratio); fclose (file); ngenerations = xgenerations; evolution_ratio = mutation_ratio + reproduction_ratio + adaptation_ratio; genetic_algorithm_default (2, v, N_SIMULATIONS / (1 + (ngenerations - 1) * evolution_ratio), ngenerations, mutation_ratio, reproduction_ratio, adaptation_ratio, SEED, 0., &evaluate, &best_genome, &best_variables, &best_objective); if (rank == 0) { file = fopen (argc[2], "w"); fprintf (file, "%.14le", best_objective); printf ("objective=%.14le\n", best_objective); fclose (file); g_free (best_genome); g_free (best_variables); } #if HAVE_MPI MPI_Finalize (); #endif return 0; }
/** * Function to optimize with the genetic algorithm. */ static void optimize_genetic () { double *best_variable = NULL; char *best_genome = NULL; double best_objective = 0.; #if DEBUG_OPTIMIZE fprintf (stderr, "optimize_genetic: start\n"); fprintf (stderr, "optimize_genetic: ntasks=%u nthreads=%u\n", ntasks, nthreads); fprintf (stderr, "optimize_genetic: nvariables=%u population=%u generations=%u\n", optimize->nvariables, optimize->nsimulations, optimize->niterations); fprintf (stderr, "optimize_genetic: mutation=%lg reproduction=%lg adaptation=%lg\n", optimize->mutation_ratio, optimize->reproduction_ratio, optimize->adaptation_ratio); #endif genetic_algorithm_default (optimize->nvariables, optimize->genetic_variable, optimize->nsimulations, optimize->niterations, optimize->mutation_ratio, optimize->reproduction_ratio, optimize->adaptation_ratio, optimize->seed, optimize->threshold, &optimize_genetic_objective, &best_genome, &best_variable, &best_objective); #if DEBUG_OPTIMIZE fprintf (stderr, "optimize_genetic: the best\n"); #endif optimize->error_old = (double *) g_malloc (sizeof (double)); optimize->value_old = (double *) g_malloc (optimize->nvariables * sizeof (double)); optimize->error_old[0] = best_objective; memcpy (optimize->value_old, best_variable, optimize->nvariables * sizeof (double)); g_free (best_genome); g_free (best_variable); optimize_print (); #if DEBUG_OPTIMIZE fprintf (stderr, "optimize_genetic: end\n"); #endif }