public Individual[] selectIndividuals(Individual[] population) {
		//make a new array to store the fit individuals
		Individual[] fitIndividuals = new Individual[population.length];

		//first, calculate the sum of e^(the fitness)
		double fitnessSum = 0.0;
		for(Individual i : population) {
			fitnessSum += i.getExpFitness();
		}

		//Second, figure out what maximum double value we would get to select each individual
		double[] maxSelectionValue = new double[population.length];
		maxSelectionValue[0] = (population[0].getExpFitness() / fitnessSum);
		for(int i = 1; i < population.length; i++) {
			maxSelectionValue[i] = maxSelectionValue[i-1] + (population[i].getExpFitness() / fitnessSum);
		}

		//now, select some of the individuals using Boltzmann selection
		double randDouble;

		for(int i = 0; i < population.length; i++) {
			//get a random double
			randDouble = RANDOM_NUMBER_GENERATOR.nextDouble();
			//check to see if that random number is less than the first max selection value
			//if it is, put the individual in the 0th index of population into the fit individuals
			if(randDouble < maxSelectionValue[0]) {
				fitIndividuals[i] = population[0];
				continue;
			}
			//if not, go through the rest of the selection values, and
			//and find the value that is less than the max value and greater than the value before
			//in that case, we want that individual, so take it.
			for(int j = 1; j < population.length; j++) {
				if(randDouble < maxSelectionValue[j] && randDouble > maxSelectionValue[j-1]) {
					fitIndividuals[i] = population[j];
					break;
				}
			}
		}
		//all done - return the fit individuals
		return fitIndividuals;
	}