public void crossover() {
		
		// Chromosome lengths
		int chr_length_1 = chromosome1.getBrainStates().length;
		int chr_length_2 = chromosome2.getBrainStates().length;
		
		// Longest length
		int shortest = (chr_length_1 < chr_length_2) ? chr_length_1 : chr_length_2;
		
		// Determine crossover point
		int cr_point = random.nextInt(shortest);
		
		// Lengths will invert
		BrainState[] _bs1 = new BrainState[chr_length_2];
		BrainState[] _bs2 = new BrainState[chr_length_1];
		
		// Pull out the original set of BrainStates
		BrainState[] bs1 = chromosome1.getBrainStates();
		BrainState[] bs2 = chromosome2.getBrainStates();
		
		// Create new chromosome1
		for (int i = 0; i < _bs1.length; i++) {
			if (i < cr_point) {
				_bs1[i] = bs1[i].clone();
			} else {
				_bs1[i] = bs2[i].clone();
			}
		}
		
		// Create new chromosome2
		for (int i = 0; i < _bs2.length; i++) {
			if (i < cr_point) {
				_bs2[i] = bs2[i].clone();
			} else {
				_bs2[i] = bs1[i].clone();
			}
		}
		
		// Update the inter-BrainState pointers to match their index values
		_bs1 = AntBrainGenerator.cleanStates(_bs1);
		_bs2 = AntBrainGenerator.cleanStates(_bs2);
		
		// Update the chromosomes
		chromosome1 = new AntBrain(_bs1,AntColour.RED);
		chromosome2 = new AntBrain(_bs2,AntColour.RED);
		
	}