public Populacao mutacao(Populacao populacao, Integer numeroGenes, Integer comprimento){

        String caracteres = AlgoritmoUtils.CODIGO_BINARIO;

        System.out.println("Iniciando processo de mutação . . .");

        Integer contador = 0;
        Integer qtdBitsLidos = 0;
        int i = 0;
        int somaBits = 0;

        Integer totalDeBits = calculos.obtemTotalBits(populacao.getTamanhoDaPopulacao(), numeroGenes, comprimento);
        SortedMap<Integer, Double> indicesMutaveis = GeradorRandomico.obterCaracterMutacao(totalDeBits);
        Object[] indices = indicesMutaveis.keySet().toArray();


        Integer comprimentoIndividuo = populacao.getIndividuo()[contador].getIndividuo().length();

        while(indices.length > i) {

            int indice = new Integer(indices[i].toString());
            System.out.println("Indice a ser alterado na mutação: " + indice);
            //qtdBitsLidos += comprimentoIndividuo * 2;

            if(indice / comprimentoIndividuo > 1 && indice - somaBits > comprimentoIndividuo){
                contador = indice / comprimentoIndividuo;
                qtdBitsLidos = comprimentoIndividuo * (contador + 1);
                somaBits += comprimentoIndividuo * (contador + 1);
            } else if(indice / comprimentoIndividuo == 1){
                somaBits += comprimentoIndividuo;
                contador++;
            } else {
                somaBits += comprimentoIndividuo;
            }

            if(indice > somaBits) continue;

            if(somaBits >= indice){
                int index = calculos.indiceDaMutacao(indice, populacao.getIndividuo()[contador].getIndividuo().length());

                if(index == 0){
                    contador--;
                    index = populacao.getIndividuo()[contador].getIndividuo().length();
                }

                populacao.getIndividuo()[contador] = mutar(populacao.getIndividuo()[contador], caracteres, comprimento, index);
            }

            if(indice <= somaBits){
                i++;
                somaBits = 0;
            }

            contador++;
        }

        if(indices.length == 0){
            System.out.println("Não houve Mutação!");
        }

        System.out.println("Mutação concluída!");

        return populacao;
    }