Example #1
0
        //cria um indivíduo com os genes definidos
        public Individuo(String genes)
        {
            this.genes = genes;

            Random r = new Random();

            //se for mutar, cria um gene aleatório
            if (r.NextDouble() <= Algoritmo.getTaxaDeMutacao())
            {
                String caracteres   = Algoritmo.getCaracteres();
                String geneNovo     = "";
                int    posAleatoria = r.Next(genes.Length);
                for (int i = 0; i < genes.Length; i++)
                {
                    if (i == posAleatoria)
                    {
                        geneNovo += caracteres[(r.Next(caracteres.Length))];
                    }
                    else
                    {
                        geneNovo += genes[i];
                    }
                }
                this.genes = geneNovo;
            }
            geraAptidao();
        }
Example #2
0
        //gera o valor de aptidão, será calculada pelo número de bits do gene iguais ao da solução
        private void geraAptidao()
        {
            String solucao = Algoritmo.getSolucao();

            for (int i = 0; i < solucao.Length; i++)
            {
                if (solucao[i] == genes[i])
                {
                    aptidao++;
                }
            }
        }
Example #3
0
        static void Main(string[] args)
        {
            //Define a solução
            Algoritmo.setSolucao("Hello World");
            //Define os caracteres existentes
            Algoritmo.setCaracteres("!,.:;?áÁãÃâÂõÕôÔóÓéêÉÊíQWERTYUIOPASDFGHJKLÇZXCVBNMqwertyuiopasdfghjklçzxcvbnm1234567890 ");
            //taxa de crossover de 60%
            Algoritmo.setTaxaDeCrossover(0.9);
            //taxa de mutação de 3%
            Algoritmo.setTaxaDeMutacao(0.3);
            //elitismo
            bool eltismo = true;
            //tamanho da população
            int tamPop = 500;
            //numero máximo de gerações
            int numMaxGeracoes = 10000;

            //define o número de genes do indivíduo baseado na solução
            int numGenes = Algoritmo.getSolucao().Length;

            //cria a primeira população aleatérioa
            Populacao populacao = new Populacao(numGenes, tamPop);

            bool temSolucao = false;
            int  geracao    = 0;

            System.Console.WriteLine("Iniciando... Aptidão da solução: " + (Algoritmo.getSolucao().Length));

            //loop até o critério de parada
            while (!temSolucao && geracao < numMaxGeracoes)
            {
                geracao++;

                //cria nova populacao
                populacao = Algoritmo.novaGeracao(populacao, eltismo);

                System.Console.WriteLine("Geração " + geracao + " | Aptidão: " + populacao.getIndivduo(0).getAptidao() + " | Melhor: " + populacao.getIndivduo(0).getGenes());

                //verifica se tem a solucao
                temSolucao = populacao.temSolocao(Algoritmo.getSolucao());
            }

            if (geracao == numMaxGeracoes)
            {
                System.Console.WriteLine("Número Maximo de Gerações | " + populacao.getIndivduo(0).getGenes() + " " + populacao.getIndivduo(0).getAptidao());
            }

            if (temSolucao)
            {
                System.Console.WriteLine("Encontrado resultado na geração " + geracao + " | " + populacao.getIndivduo(0).getGenes() + " (Aptidão: " + populacao.getIndivduo(0).getAptidao() + ")");
            }
        }
Example #4
0
        //gera um indivíduo aleatório
        public Individuo(int numGenes)
        {
            genes = "";
            Random r = new Random();

            String caracteres = Algoritmo.getCaracteres();

            for (int i = 0; i < numGenes; i++)
            {
                genes += caracteres[(r.Next(caracteres.Length))];
            }

            geraAptidao();
        }