code: @Override
      public SubsetMove getRandomMove(SubsetSolution solution, Random rnd) {
          // check minimum size
          if(minSizeReached(solution)){
              return null;
          }
          // get set of candidate IDs for deletion (possibly fixed IDs are discarded)
          Set<Integer> removeCandidates = getRemoveCandidates(solution);
          // check if removal is possible
          if(removeCandidates.isEmpty()){
              return null;
          }
          // select random ID to remove from selection
          int del = SetUtilities.getRandomElement(removeCandidates, rnd);
          // create and return deletion move
          return new DeletionMove(del);
      }
docs: Generates a random deletion move for the given subset solution that removes a single ID from the selection.
  Possible fixed IDs are not considered to be removed and the minimum subset size is taken into account.
  If no deletion move can be generated, <code>null</code> is returned.
  
  @param solution solution for which a random deletion move is generated
  @param rnd source of randomness used to generate random move
  @return random deletion move, <code>null</code> if no move can be generated