public Population (int size, double crossoverRate, int numElite,
			Function<Random, Chromo<T>> makeRandomChromo,
			Function<Chromo<T>, Double> computeFitness,
			BiFunction<Random, Chromo<T>, Chromo<T>> mutateGenes){	
		this.CROSSOVER_RATE = crossoverRate;
		this.NUM_ELITE = numElite;
		this.size = size;
		individuals = new ArrayList<Chromo<T>>(this.size);
		this.makeRandomChromo = makeRandomChromo;
		this.computeFitness = computeFitness;
		this.mutateGenes = mutateGenes;
		initPopulation();
		setFitnessValues();
	}