Exemplo n.º 1
0
	void chooseBestPosition(Bees bees, int i, float perturbedPosition[])
	{
		float perturbedFitness = evaluateFitness(perturbedPosition);

		if (isPerturbedFitnessBetter(bees, i, perturbedFitness))
			replacePosition(bees, i, perturbedPosition, perturbedFitness);	
		else
			increaseTrial(bees, i);
	}
Exemplo n.º 2
0
void employedPlacement(Bees bees, int i)
{
	float fitness;
	if (isEmployed(bees, i)) 
	{
		generateNewPosition(bees, i);
		fitness = evaluateFitness(bees->positions[i]);
		setFitness(bees, i, fitness);
		setTrial(bees, i, 0);
		//setP(bees, i, 0.0);
	}
}
Exemplo n.º 3
0
int main (){
	int continueExecution=1;
	
	/* INITIALIZING THE ROUTES POPULATION */
	route *way [routeQtd];
	
	int i=0;
	for (i=0 ; i<routeQtd ; i++){
		way[i] = initialize();
	}
	/* INITIALIZATION ENDS */
	
	evaluateFitness (way);	
	show (way);
	
	printf ("Do you want to continue route crossover? 1-yes, 0-no ");
	scanf ("%d", &continueExecution);
		
	int contGeracoes = 1;		//initializing generations counter
	
	while (continueExecution == 1){
		
		printf ("Generation %d:\n\n", contGeracoes); 
		makeCrosover (way);
		makeElitism (way);
		removeRepeated (way);
		updateTotalLatencies (way);
		evaluateFitness (way);	
		show (way);
		contGeracoes++;
		
		printf ("Do you want to continue route crossover? 1-yes, 0-no ");
		scanf ("%d", &continueExecution);
		printf ("\n\n");
	}
	
	return 0;
}
Exemplo n.º 4
0
bool Chromosome::compareChromosomes(Chromosome c1, Chromosome c2){
	return (evaluateFitness(c1) < evaluateFitness(c2));
}
Exemplo n.º 5
0
int main(){

	//printf(" *** Real time multiprocessor allocator***\n");

	int i;
	int maxGen = MAXGEN+1;
	int nrGen = 0;			// Number of generations
	ga * ga = (struct ga *) malloc(sizeof(struct ga));
	
	FILE * fitnessFile;
	FILE * chromosomeFile;
	
	remove("chromosome0mut0crossElitism.txt");
	remove("fitness0mut0crossElitism.txt");
	
	fitnessFile = fopen("fitness0mut0crossElitism.txt", "w");
	chromosomeFile = fopen("chromosome0mut0crossElitism.txt", "w");
	
	fprintf(fitnessFile, "%s", "Number of generations, Best Machine, Best fitness, Average fitness \n");
	fprintf(chromosomeFile, "%s", "Machine number, TDF, PHYSICAL CORE id, U, Vcore id, Slice, Period, Pcore\n");
	
	srand(time(NULL));

	//printf("Initializing GA\n");
	initGA(ga);
	//printf("Evaluating fitness\n");
	evaluateFitness(ga);
	fprintf(fitnessFile, "%d, %d, %f, %f\n", nrGen, ga->bestMachineIndex,ga->bestFitness, ga->avgFitness);
	fprintf(chromosomeFile, "%s", "Generation 0\n");
	for (i = 0; i < ga->populationSize; i++) 
	  printChromosome(&(ga->population[i]), chromosomeFile);
	
	
	nrGen++;
	//for (i = 0; i < ga->populationSize; i++) 
	//	printMachineParameters(&(ga->population[i]));

	//while(nrGen < maxGen && ga->bestFitness<1.0 ){
	while(nrGen < maxGen && ga->bestFitness<1.0 ){

		printf("Selection for gen %d ...\n", nrGen);
		selection(ga);
		printf("Mutation for gen %d ...\n", nrGen);
		mutation(ga);
		printf("Crossover for gen %d ...\n", nrGen);
		crossover(ga);
		printf("Evaluating fitness for gen %d ...\n", nrGen);
		evaluateFitness(ga);
		fprintf(fitnessFile, "%d, %d, %f, %f\n", nrGen, ga->bestMachineIndex, ga->bestFitness, ga->avgFitness);
		fprintf(chromosomeFile, "Generation %d", nrGen);		
		for (i = 0; i < ga->populationSize; i++) 
		  printChromosome(&(ga->population[i]), chromosomeFile);
	
	/*	printf("Number of generations %d, ", nrGen);
		printf("Best fitness: %f, ", ga->bestFitness);
		printf("Average fitness: %f \n", ga->avgFitness);

		//for (i = 0; i < ga->populationSize; i++)
		//  printMachineParameters(&(ga->population[i]));
	*/
	
		nrGen++;
			
	} // end while
 
	fclose(chromosomeFile);
	fclose(fitnessFile);
	
        freeGA(ga);
	return 0;

}
Exemplo n.º 6
0
void GeneticAlgorithm::selectFromPop(int n, vector<Army*>& selected, vector<Army*>& rejected)
{
    vector<PairAF> order;

//    for (int i = 0; i < individuos.size(); ++i)
//        printf("%p\n", individuos[i]);

    // Executar batalhas para calcular o fitnes
    printf("Battle for %d individuos\n", individuos.size());
    for (unsigned int i = 0; i < individuos.size(); ++i)
    {
        int nBattlesToFit = 2;
        double fit = 0;
        for (int b = 0; b < nBattlesToFit; ++b)
        {
            unsigned int opponent = rand()%individuos.size();
            while (opponent == i)
                opponent = rand()%individuos.size();

            int ret = _SIM_CONTINUE_;

            //Sequencial
            printf("\nBattle: %d with %d -- Units: %d vs %d\n", i, opponent, individuos[i]->nUnits(), individuos[opponent]->nUnits());
            World *world = new World(individuos[i], individuos[opponent]);

            while(ret == _SIM_CONTINUE_){
                ret = world->simulateStep();
            }

            double moreFit = 0;
            if (ret == _SIM_DRAW_){
                printf("Draw!\n");
                moreFit = 0.05;
            }else if (ret == _SIM_ARMY0_WIN_){
                printf("Winner: %d\n", i);
                moreFit = 0.1;
            }else{printf("Winner: %d\n", opponent);}

            delete world;

            fit += evaluateFitness(individuos[i]) + moreFit;
        }
        fit /= nBattlesToFit;

        // Criar lista
        order.push_back( PairAF(individuos[i], fit) );
    }

    // Ordenar
    // TODO: Fazer algo melhor que bubble sort =)
    for (unsigned int i = 0; i < order.size(); ++i)
    {   for (unsigned int j = 0; j < order.size(); ++j)
        {
            if (order[i].fitness > order[j].fitness)
            {
                PairAF tmp = order[i];
                order[i] = order[j];
                order[j] = tmp;
            }
        }
    }

    printf("TOP 10:\n");
    for (int i = 0; i < 10; ++i){
        printf("Fit[%d] = %lf [%d]\n", i, order[i].fitness, order[i].ind->nUnits());
    }

    // Selecionar os N primeiros
    for (unsigned int i = 0; i < order.size(); ++i){
        if (i < n)
            selected.push_back(order[i].ind);
        else
            rejected.push_back(order[i].ind);
    }

    if (n == 1)
    {
        printf("BEST: %lf\n", order[0].fitness);
    }
}