Example #1
0
int main()
{
    int O, D;
    time_t first, second;
    system("clear");

    printf("ORIGEM.: ");
    scanf("%d",&O);
    printf("DESTINO.: ");
    scanf("%d",&D);
    first=time(NULL);

    inicializa();
    gerapop();

    geracao = 1;
    while(geracao<=num_ger)
    {
        selecao();
        cruzamento();
        aptidao(O,D);
        mutacao();
        geracao++;
    }
    second=time(NULL);
    printf("\nTempo Gasto em Segundos: %.2f\n", difftime(second,first));
    getch();

    return 0;
}
Ag *reproducao(Ag* Pais, int *mascara_cruzamento){
	int i,j=0,*pai1,*pai2,**aux=NULL, rand1,rand2;
	//int k_individuos=rand_lim1(Pais->linhas);/*Quantidade de pais se podem reproduzir*/
	float prob_mutacao;
	Ag *Filhos=NULL;
	Filhos=malloc(sizeof(Ag));
	Filhos->matriz=malloc(1 * sizeof(int *));
	Filhos->colunas=22;
	for(i=0;i<Pais->linhas;i++){
		Filhos->matriz = (int **) realloc(Filhos->matriz, (j + 1) * sizeof(Filhos->matriz));
		Filhos->matriz[j]=malloc(Pais->colunas * sizeof(int));
		//rand1=rand_lim1(k_individuos);//escolhe posicao aleatoria de entre os melhores k_individuos
 		rand1=selecaoTorneio(Pais->matriz,Pais->linhas);//escolhido o 1º Pai
		pai1=Pais->matriz[rand1];//escolhido o 1º Pai*/
 		do{
 	 		rand2=selecaoTorneio(Pais->matriz,Pais->linhas);//escolhido o 2º Pai
 		}while (rand1==rand2);
		pai2=Pais->matriz[rand2];//escolhido o 2º Pai*/
		aux=cruzamento(mascara_cruzamento,pai1,pai2);
		Filhos->matriz[j]=aux[0];
		prob_mutacao=rand_lima();
		if(prob_mutacao<=0.001){
			printf("Ocorreu mutacao Filho 1\nProb mutacao %.4f\n\n",prob_mutacao);
			Filhos=mutacao(Filhos,j);
		}
		Filhos->matriz[j++]=aux[1];
		prob_mutacao=rand_lima();
		if(prob_mutacao<=0.001){
			printf("Ocorreu mutacao Filho 2\nProb mutacao %.4f\n\n",prob_mutacao);
			Filhos=mutacao(Filhos,j-1);
		}
		/*printf("Pai 1 %d\t->",rand1+1);
		printArraya(pai1);
		printf("\nPai 2 %d\t->",rand2+1);
		printArraya(pai2);
		printf("\n\nFilho 1\t->");
		printArraya(aux[0]);
		printf("\nFilho 2\t->");
		printArraya(aux[1]);
		puts("\n");*/
	}
	Filhos->linhas=j;
	return Filhos;
}
Example #3
0
void cria_nova_geracao(){

     int i;

     for(i=0;i<TAMANHO_POPULACAO-1;i++) {

        //Seleção
		torneio(i,   populacao, &pai1);
        torneio(i+1, populacao, &pai2);

        //Recombinação
        recombinacao(&pai1, &pai2, &filho1, &filho2, TAXA_DE_RECOMBINACAO);

        //Mutação
		mutacao(&filho1, TAXA_DE_MUTACAO);
		mutacao(&filho2, TAXA_DE_MUTACAO);


        filho1.aptidao = funcao_de_avaliacao(&filho1);
        filho2.aptidao = funcao_de_avaliacao(&filho2);

        adiciona_individuo(&filho1,i);
        adiciona_individuo(&filho2,++i);
	 }

	 //Ordena a geração atual
     qsort(populacao, TAMANHO_POPULACAO, sizeof(individuo), (int(*)(const void*, const void*))compara_individuo);

     //Ordena a nova geração
     qsort(copia_populacao, TAMANHO_POPULACAO, sizeof(individuo), (int(*)(const void*, const void*))compara_individuo);

     //Mantém a elite e substitui o restante pelos melhores da nova geração
     int j = 0, l;
     for(i = ELITE; i < TAMANHO_POPULACAO;i++,j++){

        for(l=0;l<TAMANHO_INDIVIDUO;l++){
            populacao[i].genotipo[l] = copia_populacao[j].genotipo[l];
        }

     }
}