code: public Analysis<SolutionType> addProblem(String ID, Problem<SolutionType> problem){
          if(problem == null){
              throw new NullPointerException("Problem can not be null.");
          }
          if(problems.containsKey(ID)){
              throw new DuplicateIDException("Duplicate problem ID: " + ID + ".");
          }
          problems.put(ID, problem);
          return this;
      }
docs: Add a problem to be analyzed. Returns a reference to the analysis object on which this
  method was called so that methods can be chained.
  
  @param ID unique ID of the added problem
  @param problem problem to be added to the analysis
  @return reference to the analysis object on which this method was called
  @throws DuplicateIDException if a problem has already been added with the specified ID
  @throws NullPointerException if <code>problem</code> is <code>null</code>