public static void main(String[] args) {

        lerArquivo();
        Treno t = new Treno(1000);
        System.out.println("Lido todos os presentes");

        
        
        AlgoritmoGenetico ag = new AlgoritmoGenetico(presentes, 10);
        ag.inicializaCromosssomo(presentes);
        for (int i = 0; i < 100; i++) {
            ag.executaCrossover();
            ag.executaMutacao();
            ag.executaSelecao();
            ag.avaliaSolucao();
        }
        escreverArquivo(ag.getMelhorCromossomo(),ag.getMelhorMetrica());
        System.exit(0);
        Instant inicio = Instant.now();
        for (int i = 0; i < presentes.size(); i++) {

            t.inserePresente(presentes.get(i));
        }
        Instant fim = Instant.now();
        Duration duracao = Duration.between(inicio, fim);
        long duracaoEmMilissegundos = duracao.toMillis();

        int novaAltura = 0;
        System.out.println(duracaoEmMilissegundos);

        inicio = Instant.now();
        Stack<Integer> pilha = new Stack<>();
        for (Iterator<Integer> it = t.alturas.iterator(); it.hasNext();) {
            novaAltura = it.next();
            //pilha.addElement(novaAltura);
            //System.out.print(novaAltura + " ");
            if (novaAltura > maxAltura) {
                maxAltura = novaAltura;
            }
        }

        Set<Integer> todasAlturas = new TreeSet<>();
        for (Presente presente : presentes) {
            todasAlturas.add(presente.getZMax());
        }
        for (Integer integer : todasAlturas) {
            pilha.addElement(integer);
        }

        ArrayList<Integer> todos = new ArrayList<>();
        int qtde = pilha.size();
        for (int i = 0; i < qtde; i++) {
            ArrayList<Integer> altPre = new ArrayList<>();
            int alt = pilha.pop();
            for (Presente presente : presentes) {
                if (presente.getZMax() == alt) {
                    altPre.add(presente.getId());
                }
            }
            Collections.sort(altPre);
            todos.addAll(altPre);
        }
        //Collections.reverse(todos);
        calculaFitness(todos);
        fim = Instant.now();
        duracao = Duration.between(inicio, fim);
        duracaoEmMilissegundos = duracao.toMillis();
        System.out.println(duracaoEmMilissegundos);
        escreverArquivo(presentes,0.0);

        System.exit(0);
//        Presente p1 = new Presente(1, 2, 4, 2);
//        Presente p2 = new Presente(2, 2, 2, 3);
//        Presente p3 = new Presente(3, 4, 4, 4);
//        Presente p4 = new Presente(4, 4, 2, 5);
//        Presente p5 = new Presente(5, 2, 2, 6);
//        Presente p6 = new Presente(6, 2, 2, 7);
//        Presente p7 = new Presente(7, 3, 3, 8);
//
//
//        Treno t2 = new Treno(4);
//        t2.imprimirTabela();
//     
//        t2.inserePresente(p1);
//        System.out.println(p1.getX() + ":" + p1.getY() + ":" + p1.getZ());
//        t2.imprimirTabela();
//        imprimeVertices(p1.getVertices());
//        t2.inserePresente(p2);
//        System.out.println(p2.getX() + ":" + p2.getY() + ":" + p2.getZ());
//        t2.imprimirTabela();
//        imprimeVertices(p2.getVertices());
//        t2.inserePresente(p3);
//        System.out.println(p3.getX() + ":" + p3.getY() + ":" + p3.getZ());
//        t2.imprimirTabela();
//        imprimeVertices(p3.getVertices());
//        t2.inserePresente(p4);
//        System.out.println(p4.getX() + ":" + p4.getY() + ":" + p4.getZ());
//        t2.imprimirTabela();
//        imprimeVertices(p4.getVertices());
//        t2.inserePresente(p5);
//        System.out.println(p5.getX() + ":" + p5.getY() + ":" + p5.getZ());
//        t2.imprimirTabela();
//        imprimeVertices(p5.getVertices());
//        t2.inserePresente(p6);
//        System.out.println(p6.getX() + ":" + p6.getY() + ":" + p6.getZ());
//        t2.imprimirTabela();
//        imprimeVertices(p6.getVertices());
//        t2.inserePresente(p7);
//        System.out.println(p7.getX() + ":" + p7.getY() + ":" + p7.getZ());
//        t2.imprimirTabela();
//        imprimeVertices(p7.getVertices());
    }