Exemple #1
0
void Genetic_Algorigthm::manageGA() {
	currentGen++;
	accessPop();
	sortPop();
	output();
	setNewPopulation(top10());
}
void Populacao::updatePop() {
	
	//Ordenar indivíduos pelo fitness
	sortPop();

	//Liberar memória dos indivíduos a serem descartados
	for (int i = POP_SIZE; i < pop.size(); i++) {
		delete(pop[i]);
	}

	//Eliminar ponteiros nulos da população
	vector<Individuo *>::iterator it = pop.begin() + POP_SIZE;

	pop.erase(it, pop.end());

	//cout << "POP_SIZE: " << pop.size() << endl;

}
Exemple #3
0
void clonation(struct cell clone[POP+1]){
	int i=0,j=0,n=0, counter[POP], k=0, clones;
	double m[POP+1], intPart, decPart;
	sortPop(clone);
	
	for (i=0;i<POP;i++){
		if(isNull(clone[i]))
			break;
		n++;
	}
	for (i=0;i<n;i++){
			clones = (float)(clonationFactor*n)/(float)(i+1);
			if((int)clones + clone_control  > 2){
				m[i] = clones + clone_control;
			}
			else{
				m[i] = clones;
			}
			decPart = modf(m[i],&intPart);
			if(decPart >= 0.5){
				counter[i] = (int)(intPart + 1);
			}
			else{
				counter[i] = (int)intPart;
			}
	}
	
	k=n;
	for(i=0;i<n;i++){
		for (j=0; j<counter[i]; j++){
			clone[k] = clone[i];
			k++;
			if (k >= POP){
				k = 0;
			}
		}
	}
	
	for (i = 0; i < POP; i++) {
		clonePop[i] = clone[i];
	}
}
Exemple #4
0
// HyperMutacion
void hypermutation(){
	int i, j, random_1, random_2, tmp;
	sortPop(clonePop);
	for(i=0;i<POP;i++){
		if(!isNull(clonePop[i])){

			// se intercambian por su orden, el primero 2 veces, el segundo 3 veces...
			for(j=0;j<(i+1);j++){
	        // Generamos dos numeros para intercambiar los valores
	        //  de nuestra solucion
	        random_1 = (1+(int)((rand()/(RAND_MAX + 1.0))*(VARS+1)))%VARS;
	        random_2 = (1+(int)((rand()/(RAND_MAX + 1.0))*(VARS+1)))%VARS;
	        // Intercambiamos los valores del swap
	        tmp = clonePop[i].gene[random_1];
	        clonePop[i].gene[random_1] = clonePop[i].gene[random_2];
	        clonePop[i].gene[random_2] = tmp;
			}
		}
	}
}
Exemple #5
0
// HyperMutacion
void hypermutation(){
	int i, j, random_1, random_2, tmp;

//CAMBIAR!
//Hipermutamos poco a los mejores y mucho a los peores
//	cout << "--Mutacion--" << endl;
//
	sortPop(clonePop);
	for(i=0;i<POP;i++){
		if(!isNull(clonePop[i])){
			//POP*0.4
			for(j=0;j<round(mutRate * clonePop[i].fitness);j++){
	        // Generamos dos numeros para intercambiar los valores
	        //  de nuestra solucion
	        random_1 = (1+(int)((rand()/(RAND_MAX + 1.0))*(VARS+1)))%VARS;
	        random_2 = (1+(int)((rand()/(RAND_MAX + 1.0))*(VARS+1)))%VARS;
	        // Intercambiamos los valores del swap
	        tmp = clonePop[i].gene[random_1];
	        clonePop[i].gene[random_1] = clonePop[i].gene[random_2];
	        clonePop[i].gene[random_2] = tmp;
			}
		}
	}
}
Exemple #6
0
//void clonation(){
void clonation(struct cell clone[POP+1], bool type){
	int i=0,j=0,n=0, counter[POP], k=0,var=0;
	double m[POP+1], intPart, decPart;
//	cout << "--Clonacion--" << endl;
	if (type){
	//	cout << "Clonamos..." << endl;
		sortPop(clone);
	//	printPop(clone);
		
		for (i=0;i<POP;i++){
			if(isNull(clone[i]))
				break;
			n++;
		}
	//	cout << "El n:" << n << endl;
	//	getchar();
		for (i=0;i<n;i++){
				m[i] = (float)(clonationFactor*n)/(float)(i+1);
	//			cout << "m["<<i<<"]: "<< m[i] << endl;
				decPart = modf(m[i],&intPart);
	//			cout << "decPart:" << decPart << "\t intPart: "<<intPart << endl;
				if(decPart >= 0.5){
					counter[i] = (int)(intPart + 1);
				}
				else{
					counter[i] = (int)intPart;
				}
//			cout << "counter["<<i<<"]: "<< counter[i]<<endl;
		}
		
		k=n;
		for(i=0;i<n;i++){
			for (j=0; j<counter[i]; j++){
	//			cout <<"n: "<<n<<"  k: "<< k << "  counter["<<i<<"]: " << counter[i] << endl;
	//			getchar();
				clone[k] = clone[i];
				k++;
				if (k >= POP){
					k = 0;
				}
			}
		}
	}
	else{
		sortPop(clone);

		for (i=0;i<POP;i++){
			if(isNull(clone[i]))
				break;
			n++;
		}
		k=n;
		var = (int)((POP-n)*0.5);
        for(i=0;i<n;i++){
            for (j=0; j<var; j++){
                clone[k] = clone[i];
                k++;
            }
			var = var - (int)(POP*0.1);
			
        }
		
	}
	
	for (i = 0; i < POP; i++) {
		clonePop[i] = clone[i];
	}
//	printPop(clonePop);

}