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); }
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); } }
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; }
bool Chromosome::compareChromosomes(Chromosome c1, Chromosome c2){ return (evaluateFitness(c1) < evaluateFitness(c2)); }
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; }
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); } }