Esempio n. 1
0
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;
}
Esempio n. 2
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;
}