@Override
    public Individual getParent(List<Individual> population) throws Exception{
        Random rand = new Random();
        List<Individual> local = new ArrayList<Individual>();
        Individual best = null;
        //Form the sample group
        while(local.size() < tournamentSize){
            int random = rand.nextInt(population.size());
            if(!local.contains(population.get(random))){
                local.add(population.get(random));
                if(best == null) best = population.get(random);
                else if(best.fitness() < population.get(random).fitness()){
                    best = population.get(random);
                }
            }
        }
        //When group is full, roll to check if we're picking the best
        if(chanceBestPick >= Math.random()){
            return best;
        }else{
            while(true){
                if(!local.get(rand.nextInt(local.size())).equals(best)){
                    return local.get(rand.nextInt(local.size()));
                }
            }
        }
    }