int main() { srand(time(NULL)); cfg_t cfg = {0}; configureGA(&cfg); printf("Initial population: %d\nUniform rate: %f\nMutation rate: %f\nTarget genome: %s\n" , cfg.initialPopulation , cfg.uniformRate , cfg.mutationRate , cfg.targetGenome); population p = createPopulation(cfg.initialPopulation, true); for (uint8_t i = 0; i < cfg.initialPopulation; i++) { calcFitness(p[i], cfg.targetGenome); printf("%s (fit: %d)\n", p[i]->genes, p[i]->fitnessValue); } individual * ind = createIndividual(false); uint16_t counter = 0; evolve(p, &cfg, ind, counter); return 0; }
int main(int argc, char** argv) { int i, j; Individual **population; int individualCount; int numSteps; int maxSolutions = 1; srand(time(NULL)); if (argc < 4) { printf("\n\nInvalid parameters. Use: %s N_QUEENS POPULATION_SIZE STEPS MAX_SOLUTIONS\n\n", argv[0]); return 0; } nQueens = atoi(argv[1]); individualCount = atoi(argv[2]); numSteps = atoi(argv[3]); if (argc > 4) { maxSolutions = atoi(argv[4]); } if (argc > 5) { if (!strcmp("-v", argv[5])) verboseMode = 1; } if (nQueens % 2) { printf("\nNUM_QUEENS must be an even number.\n"); return 0; } printf("-----------------------------------------------\n"); printf("Solving %d queens problem.\n", nQueens); printf("Population size: %d\n", individualCount); printf("Max number of generation(s): %d\n", numSteps); printf("Will stop after finding %d solution(s)\n", maxSolutions); printf("-----------------------------------------------\n"); population = (Individual**) malloc (sizeof(Individual*) * individualCount); for (i = 0; i < individualCount; ++i) { population[i] = createIndividual(); } for (i = 0; i < numSteps; ++i) { qsort(population, individualCount, sizeof(Individual*), compareIndividuals); j = 0; while (population[j]->fitness == 0) ++j; if (j >= maxSolutions) { printf("Population #%d.\n", i + 1); j = 0; while (population[j]->fitness == 0 && j < maxSolutions) { printf("Solution %d: ", j + 1); printIndividual(population[j++]); } break; } if (verboseMode) { printf("Building population %d: ", i); } nextPopulation(population, individualCount); } printf("\n"); for (i = 0; i < individualCount; ++i) { free(population[i]->solution); free(population[i]); } free(population); return 0; }