public Individuo Roleta(Populacao pop)
        {
            double numSorteado = (Constants.random.NextDouble() * 100);

            foreach (Individuo ind in pop.getPopulacao())
            {
                if (numSorteado >= ind.getRangeRoleta()[0] && numSorteado <= ind.getRangeRoleta()[1])
                {
                    return(ind);
                }
            }
            //Nunca vai acontecer
            return(null);
        }
Beispiel #2
0
        /*
         * Retorna um individuo a partir da populacao, sendo esse individuo retornado conforme
         * sorteio
         */
        public Individuo Roleta(Populacao pop)
        {
            double numSorteado = Constants.random.NextDouble() * 100;

            foreach (Individuo ind in pop.GetPopulacao())
            {
                if (numSorteado >= ind.GetRangeRoleta()[0] && numSorteado <= ind.GetRangeRoleta()[1])
                {
                    return(ind);
                }
            }

            return(null);
        }
Beispiel #3
0
        public Individuo Roleta(Populacao pop)
        {
            //Numero sorteado randomico gerado
            double numSorteado = (Constants.random.NextDouble() * 100);

            foreach (Individuo ind in pop.getPopulacao())
            {
                if (numSorteado >= ind.getRangeRoleta()[0] && numSorteado <= ind.getRangeRoleta()[1])
                {
                    //Se ele estiver entre a posição inicial e final da pizza, retorne
                    return(ind);
                }
            }
            //Nunca vai acontecer
            return(null);
        }
Beispiel #4
0
        //Método qual aplica a operação genética
        public Populacao executaAG(Populacao pop)
        {
            //Inicio do AG
            //Avaliação da População
            Populacao        novaPopulacao = new Populacao();
            List <Individuo> popBuffer     = new List <Individuo>();

            for (int i = 0; i < (Constants.sizePopulacao / 2); i++)
            {
                //Selecionar os pais para cruzamento
                Individuo pai = Roleta(pop);
                Individuo mae = Roleta(pop);

                //Realizar o Cruzamento
                Individuo[] filhos = Crossover(pai, mae);

                //Aplicar a mutação (Se necessario)
                Individuo filhoA = Mutacao(filhos[0]);
                Individuo filhoB = Mutacao(filhos[1]);

                popBuffer.Add(filhoA);
                popBuffer.Add(filhoB);
            }

            //Apagar velhos membros da população
            //Inserir novos membros
            for (int i = 0; i < Constants.sizePopulacao; i++)
            {
                novaPopulacao.setIndividuo(i, popBuffer[i]);
            }
            popBuffer = null;

            //Re-avalizar a pop
            novaPopulacao.atualizarValores();


            return(novaPopulacao);
        }
Beispiel #5
0
        //Métodos

        /*
         * Método que executa o algoritmo genétrico
         */
        public Populacao ExecutaAG(Populacao pop)
        {
            //Início do algoritmo genético

            //Avaliação da população
            Populacao        novaPopulacao = new Populacao();
            List <Individuo> popBuffer     = new List <Individuo>();

            for (int i = 0; i < Constants.sizePopulacao / 2; i++)
            {
                //Selecionar os pais para cruzamento
                Individuo pai = Roleta(pop);
                Individuo mae = Roleta(pop);

                //Realizar cruzamento
                Individuo[] filhos = Crossover(pai, mae);

                //Aplicar mutação
                Individuo filhoA = Mutacao(filhos[0]);
                Individuo filhoB = Mutacao(filhos[1]);

                popBuffer.Add(filhoA);
                popBuffer.Add(filhoB);
            }

            //Apagar velhos membros
            //Inserir novos membros
            for (int i = 0; i < Constants.sizePopulacao; i++)
            {
                novaPopulacao.SetIndividuo(i, popBuffer[i]);
            }
            popBuffer = null;

            //reavaliar a população
            novaPopulacao.AtualizarValores();

            return(novaPopulacao);
        }