public void run(int gen, ArrayList<Section> current, int semlen) {
		
		
		randomize(current); //randomize the order that the sections are in
		establish(current, semlen); //establish the population to chromosome length of semlen

		//Population is now set up, time to select for breeding
		
		int i = 0;
		
		ArrayList<Chromosome> pool; //overall pool
		ArrayList<Chromosome> toBreed; //lucky ones to breed this generation
		
		while (i < gen) {
			
			pool = new ArrayList<Chromosome>();
			toBreed = new ArrayList<Chromosome>();
			
			int POPMAX = population.size();
			
			for(int j = 0; j < POPMAX; j++) {
				pool.add(population.poll());
			}

			int prob = pool.size();
			for(int j = 0; j < pool.size(); j++) { //having troubles here. Just breed everything for now
				
				if (j < prob) {
					toBreed.add(pool.get(j));
				}	
			}//end for
			
			if(toBreed.size() < 2) { //if we don't have enough to breed, don't
				
				for(int j = 0; j < POPMAX; j++) {
					population.add(pool.get(j));
				}
				
				i++;
				continue;
			}
			
			int breedingSize = toBreed.size();
			for(int j = 1; j < breedingSize; j+=2) {
				population.add( breed(toBreed.get(j - 1),toBreed.get(j), semlen) );
			}
			
			for(int j = 0; j < POPMAX; j++) {
				population.add(pool.get(j));
			}
			
			i++;
			
			//EVERY FEW GENERATIONS NEED TO CULL SOME OF THE SAMPLE
			if(population.size() > 1000)
				cull(population);
			
			System.out.println(population.size());
		}// END WHILE

		
	}