public static Population evolvePopulation(Population pop, int mutationPerEvo) {
    	int cloneCounter = 0;
        Population newPopulation = new Population(pop.populationSize(), false);
        tournamentSize = (int) (pop.populationSize()*0.2);
        // Keep our best individual if elitism is enabled
        int elitismOffset = 0;
        if (elitism) {
            newPopulation.saveTour(0, pop.getFittest());
            newPopulation.saveTour(1, tournamentSelection(pop));
            elitismOffset = 2;
        }

        // Crossover population
        // Loop over the new population's size and create individuals from
        // Current population
        int k = 0;
        for (int i = elitismOffset; i < GlobalData.popSize +k; i++) {
        	
            // Select parents
            Tour parent1 = tournamentSelection(pop);
            Tour parent2 = tournamentSelection(pop);
            
//             Crossover parents
			Tour child = crossover(parent1, parent2);
            
            if (mutationPerEvo == 0)
            	mutate(child);

            reorder2Opt(child);
            
            // Add child to new population
            
            boolean flag = false;
            for(int j=0; j < newPopulation.populationSize() && !flag; j++) {
            	if (newPopulation.getTour(j) != null && newPopulation.getTour(j).equals(child))
            		flag = true;
            }
            if (!flag) {
            	newPopulation.saveTour(i, child);
            	cloneCounter = 0;
            	
            } else {
            	cloneCounter++;
            	if (cloneCounter < 15)
            		k++;
            }
            
            
        }

        return newPopulation;
    }