public Vector<Block> selectBlocks(Vector<Block> originalPopulation) {
		Vector<Block> fitBlocks = new Vector<Block>();

		//first, calculate the sum of e^(fitness of each of the blocks)
		double fitnessSum = 0.0;
		for(Block b : originalPopulation) {
			fitnessSum += Math.exp(b.getFitness());
		}

		//second figure out what the maximum double value we would get to select each block
		double maxSelectionValue[] = new double[originalPopulation.size()];
		maxSelectionValue[0] = Math.exp(originalPopulation.get(0).getFitness()) / fitnessSum;
		for(int i = 1; i < originalPopulation.size(); i++) {
			maxSelectionValue[i] = maxSelectionValue[i-1] + (Math.exp(originalPopulation.get(i).getFitness())/fitnessSum);
		}

		//now, select sum of the blocks using Boltzman selection
		double randDouble;
		for(int i = 0; i < BLOCK_POPULATION_SIZE; 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, take the block in the 0th index
			if(randDouble < maxSelectionValue[0]) {
				fitBlocks.add(new Block(originalPopulation.get(0)));
				continue;
			}
			//if not, go through the rest of the selection values and find
			//the value that is less than the current value but greater than the prev value
			for(int j = 1; j < maxSelectionValue.length; j++) {
				if(randDouble < maxSelectionValue[j] && randDouble > maxSelectionValue[j-1]) {
					fitBlocks.add(new Block(originalPopulation.get(j)));
					break;
				}
			}
		}

		return fitBlocks;
	}