Esempio n. 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;
}