code: @Override
      public SubsetMove getRandomMove(SubsetSolution solution, Random rnd) {
          // check size limit
          if(maxSizeReached(solution)){
              // size limit would be exceeded
              return null;
          }
          // get set of candidate IDs for addition (possibly fixed IDs are discarded)
          Set<Integer> addCandidates = getAddCandidates(solution);
          // check if addition is possible
          if(addCandidates.isEmpty()){
              return null;
          }
          // select random ID to add to selection
          int add = SetUtilities.getRandomElement(addCandidates, rnd);
          // create and return addition move
          return new AdditionMove(add);
      }
docs: Generates a random addition move for the given subset solution that adds a single ID to the selection.
  Possible fixed IDs are not considered to be added and the maximum subset size is taken into account.
  If no addition move can be generated, <code>null</code> is returned.
  
  @param solution solution for which a random addition move is generated
  @param rnd source of randomness used to generate random move
  @return random addition move, <code>null</code> if no move can be generated