int main(int argc, char* argv[]) { if(argc > 1) { FILE* fptr = fopen(argv[1], "r"); assert(fptr != NULL); int city_c = count_cities(fptr); printf("City count: %d\n", city_c); city* cities[city_c]; read_cities(fptr, cities, city_c); print_cities(cities, city_c); printf("Distance between Helsinki and Espoo: %f km\n", distance(cities[1], cities[4])); printf("Path distance: %f km\n", path_distance(cities, city_c)); free_cities(cities, city_c); fclose(fptr); } return EXIT_SUCCESS; }
int main(void) { int n; FILE* fptr = fopen("input.in", "r"); assert(fptr != NULL); n = count_lines(fptr); printf("\nNumber of cities: %i\n",n); /*Init cities*/ City* cities[n]; read_cities(fptr, cities); printf("Init cities succesful... \n"); /*Init distances*/ double** distances; distances=calculate_distances(distances,cities, n); printf("Init distances succesful... \n"); /*Init GA config*/ Config config; config.populationSize=1000; config.mutationRate=0.2; config.numGenerations=6000; config.numElitism=1; config.mutationSize=1; config.maxBreeding=10; config.numGenes=n; printf("Init GA config succesful... \n"); /*Init random seed*/ srand ( time(NULL) ); printf("Init random seed succesful... \n"); /*Init population*/ Population population; generate_random_population(&population, distances, &config); printf("Init population succesful... \n"); int numGenerations = 0; /*Start evolution*/ while(numGenerations < config.numGenerations){ numGenerations++; if (numGenerations%1000==0) printf("Shortest path of %ith generation: %i\n", numGenerations, population.path[0].fitness); /*Sort population*/ qsort(population.path, population.numPaths, sizeof(Path), compare_population); /*Breed population*/ simple_breed_population(&population, config.numGenes, distances); /*Mutate population*/ mutate_population(&population, distances, &config); } /*Sort population*/ qsort(population.path, population.numPaths, sizeof(Path), compare_population); printf("Shortest path is %i\n", population.path[0].fitness); int i; for(i=0;i<config.numGenes;i++){ print_city(cities[population.path[0].combination[i]]); } return 0; }