- rating = rate_network (n);
-
- if (population_size < max_population_size)
- {
- population[population_size].network = n;
- population[population_size].rating = rating;
- population_size++;
- return (0);
- }
-
- worst_rating = -1;
- worst_index = -1;
- best_rating = -1;
- for (i = 0; i < olymp_size; i++)
- {
- if (population[i].rating > worst_rating)
- {
- worst_rating = population[i].rating;
- worst_index = i;
- }
- if ((population[i].rating < best_rating)
- || (best_rating == -1))
- best_rating = population[i].rating;
- }
-
- if (rating < best_rating)
- {
- if (best_output_file != NULL)
- {
- printf ("Writing network with rating %i to %s\n",
- rating, best_output_file);
- sn_network_write_file (n, best_output_file);
- }
- else
- {
- printf ("New best solution has rating %i\n",
- rating);
- }
- }
-
- nmemb = max_population_size - (worst_index + 1);
-
- sn_network_destroy (population[worst_index].network);
- population[worst_index].network = NULL;
-
- memmove (population + worst_index,
- population + (worst_index + 1),
- nmemb * sizeof (population_entry_t));