public void moveParticle(Random rand) {

		int[] copyProjectWorkUnitIndexes = 
				new int[projectWorkUnitIndexes.length];

		System.arraycopy(
				projectWorkUnitIndexes, 
				0, 
				copyProjectWorkUnitIndexes, 
				0, 
				projectWorkUnitIndexes.length
				);

		List<Integer> mutationIndexes = new ArrayList<Integer>();
		int cnt = 0;
		//magic number!
		int subProjectActivities = 15;
		for (int i = 0; i < velocity.length; i++) {
			
			cnt++;

			if (rand.nextDouble() <= Math.abs(velocity[i])) {
				mutationIndexes.add(i);
			}

			if (cnt == subProjectActivities) {
				
				cnt = 0;

				int[] arrayOfMutationIndexes = list2array(mutationIndexes);

				int[] copyOfArrayOfMutationIndexes = 
						new int[arrayOfMutationIndexes.length];

				System.arraycopy(
						arrayOfMutationIndexes, 
						0, 
						copyOfArrayOfMutationIndexes, 
						0, 
						arrayOfMutationIndexes.length
						);
				
				PSOUtil.shuffleSubArray(
						arrayOfMutationIndexes, 
						arrayOfMutationIndexes.length, 
						rand
						);
				
				for (int j = 0; j < arrayOfMutationIndexes.length; j++) {
					
					projectWorkUnitIndexes[copyOfArrayOfMutationIndexes[j]] =
							copyProjectWorkUnitIndexes[arrayOfMutationIndexes[j]];
					
				}
	
				mutationIndexes.clear();
			
			}

		}

	}