예제 #1
0
        public static Individuo[] selecaoTorneio(Populacao populacao)
        {
            Random    r = new Random();
            Populacao populacaoIntermediaria = new Populacao(3);

            //seleciona 3 indivíduos aleatóriamente na população
            populacaoIntermediaria.setIndividuo(populacao.getIndivduo(r.Next(populacao.getTamPopulacao())));
            populacaoIntermediaria.setIndividuo(populacao.getIndivduo(r.Next(populacao.getTamPopulacao())));
            populacaoIntermediaria.setIndividuo(populacao.getIndivduo(r.Next(populacao.getTamPopulacao())));

            //ordena a população
            populacaoIntermediaria.ordenaPopulacao();

            Individuo[] pais = new Individuo[2];

            //seleciona os 2 melhores deste população
            pais[0] = populacaoIntermediaria.getIndivduo(0);
            pais[1] = populacaoIntermediaria.getIndivduo(1);

            return(pais);
        }
예제 #2
0
        public static Populacao novaGeracao(Populacao populacao, bool elitismo)
        {
            Random r = new Random();
            //nova população do mesmo tamanho da antiga
            Populacao novaPopulacao = new Populacao(populacao.getTamPopulacao());

            //se tiver elitismo, mantém o melhor indivíduo da geração atual
            if (elitismo)
            {
                novaPopulacao.setIndividuo(populacao.getIndivduo(0));
            }

            //insere novos indivíduos na nova população, até atingir o tamanho máximo
            while (novaPopulacao.getNumIndividuos() < novaPopulacao.getTamPopulacao())
            {
                //seleciona os 2 pais por torneio
                Individuo[] pais = selecaoTorneio(populacao);

                Individuo[] filhos = new Individuo[2];

                //verifica a taxa de crossover, se sim realiza o crossover, se não, mantém os pais selecionados para a próxima geração
                if (r.NextDouble() <= taxaDeCrossover)
                {
                    filhos = crossover(pais[1], pais[0]);
                }
                else
                {
                    filhos[0] = new Individuo(pais[0].getGenes());
                    filhos[1] = new Individuo(pais[1].getGenes());
                }

                //adiciona os filhos na nova geração
                novaPopulacao.setIndividuo(filhos[0]);
                novaPopulacao.setIndividuo(filhos[1]);
            }

            //ordena a nova população
            novaPopulacao.ordenaPopulacao();
            return(novaPopulacao);
        }