private void updateParticlePositions() {
		for(int i = 0; i < velocities.length / 2; i++){
			for(int k = 0; k < velocities[i].length; k++){
				if(Math.abs(velocities[i][k] - 1.0) <= epsilon){
					double exchange = personalBest[i][k];
					for(int n = 0; n < positions[i].length; n++){
						if(Math.abs(positions[i][n] - exchange) <= epsilon){
							double temp = positions[i][k];
							positions[i][k] = positions[i][n];
							positions[i][n] = temp;
						}
					}
					velocities[i][k] = 0;
				}else{
					int index = combinatorialVelocityUpdate.getNeighbourhood().neighbourhoodBest(i);
					double exchange = personalBest[index][k];
					for(int n = 0; n < positions[i].length; n++){
						if(Math.abs(positions[i][n] - exchange) <= epsilon){
							double temp = positions[i][k];
							positions[i][k] = positions[i][n];
							positions[i][n] = temp;
						}
					}
					velocities[i + velocities.length / 2][k] = 0;
				}
			}
		}
		
	}