void AG(int n, int *s, int *p, int *w, int b, int penalidade, int *peso_objetos, int *fo, int nind, int max_geracoes, double prob_crossover, double prob_mutacao) { int **pop; // populacao int *fo_pop; // funcao objetivo corrente de um dado individuo da populacao int *inv_pop; // quantidade de inviabilidade de cada individuo int *peso_objetos_pop; // peso dos objetos de cada individuo int **pop_sobrev; // populacao sobrevivente int *fo_pop_sobrev; // funcao objetivo corrente de um dado individuo da populacao sobrevivente int *inv_pop_sobrev; // quantidade de inviabilidade de cada individuo da populacao sobrevivente int *peso_objetos_pop_sobrev; // peso dos objetos de cada individuo da populacao sobrevivente int *s_star; // vetor que contem a melhor solucao gerada int fo_star; // valor da melhor solucao gerada s_star = cria_vetor(n); fo_star = *fo = -INT_MAX; nind = nind * 2; pop = cria_matriz(nind, n); inv_pop = cria_vetor(nind); peso_objetos_pop = cria_vetor(nind); fo_pop = cria_vetor(nind); inicializa_vetor(inv_pop,nind); inicializa_vetor(peso_objetos_pop,nind); inicializa_vetor(fo_pop,nind); for (int j=0;j fo_star){ fo_star = fo_pop[j]; atualiza_melhor_solucao(pop[j], s_star, n); } } printf("fo do Melhor individuo da populacao inicial = %2d\n",fo_star); int ngeracoes = 0; while (ngeracoes < max_geracoes){ ngeracoes++; /* Aplicar crossover */ int quant_filhos = 0; while (quant_filhos < nind/2){ /* Selecao aleatoria de pais */ int jpai1 = random(nind/2); int jpai2 = random(nind/2); if (randomico(0,1) < prob_crossover){ int ponto_de_corte = random(n); crossover(pop[jpai1], pop[jpai2], pop[quant_filhos+nind/2], pop[quant_filhos+nind/2+1], n, ponto_de_corte); quant_filhos+=2; } } /* Aplicar mutacao */ for (int j=0; j < nind; j++) if (randomico(0,1) < prob_mutacao) mutacao(pop[j], n); /* Avaliar a populacao inteira (pais e filhos) */ for (int j=0; j fo_star){ fo_star = fo_pop[j]; atualiza_melhor_solucao(pop[j], s_star, n); } } /* Definir a populacao sobrevivente */ /* fo de todos os individuos da populacao, isto e', pais e filhos */ for (int j=0; j