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; }