public void hyperMutate(int mutations, Random rand) {
		
		int mutationsDone = 0;
		
		while (mutationsDone < mutations) {
					
			int indexA = rand.nextInt(projectSize);
			int indexB = rand.nextInt(projectSize);
			
			if (indexA == indexB) {
				if (indexB == projectSize-1)
					indexB--;
				else
					indexB++;
			}
			
			ArrayList<WorkUnit> personWorkList = personWorkLists.get(
					rand.nextInt(projectSize)
			);
			
			Collections.swap(personWorkList, indexA, indexB);
			
			if (rand.nextDouble() < 0.4) {
				
				personWorkList = personWorkLists.get(
						rand.nextInt(projectSize)
				);
				
				int distance = rand.nextInt(projectSize-1);
				
				int positive = 1;
				if (rand.nextBoolean())
					positive = -1;
				
				Collections.rotate(personWorkList, positive*distance);
				
			}
			
			mutationsDone++;
			
		}
		
	}