code: public Analysis<SolutionType> addSearch(String ID, SearchFactory<SolutionType> searchFactory){
          if(searchFactory == null){
              throw new NullPointerException("Search factory can not be null.");
          }
          if(searches.containsKey(ID)){
              throw new DuplicateIDException("Duplicate search ID: " + ID + ".");
          }
          searches.put(ID, searchFactory);
          return this;
      }
docs: Add a search to be applied to solve the analyzed problems. Requires a search factory instead of a
  plain search as a new instance of the search will be created for every run and for every analyzed
  problem. 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 search
  @param searchFactory factory that creates a search given the problem to be solved
  @return reference to the analysis object on which this method was called
  @throws DuplicateIDException if a search has already been added with the specified ID
  @throws NullPointerException if <code>searchFactory</code> is <code>null</code>