code: public static EvaluationStrategy<Long, Long> instantiateStrategy(final Properties properties, final DataModelIF<Long, Long> trainingModel, final DataModelIF<Long, Long> testModel)
              throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
          Double threshold = Double.parseDouble(properties.getProperty(RELEVANCE_THRESHOLD));
          String strategyClassName = properties.getProperty(STRATEGY);
          Class<?> strategyClass = Class.forName(strategyClassName);
          // get strategy
          EvaluationStrategy<Long, Long> strategy = null;
          if (strategyClassName.contains("RelPlusN")) {
              Integer number = Integer.parseInt(properties.getProperty(RELPLUSN_N));
              Long seed = Long.parseLong(properties.getProperty(RELPLUSN_SEED));
              strategy = new RelPlusN(trainingModel, testModel, number, threshold, seed);
          } else {
              Object strategyObj = strategyClass.getConstructor(DataModelIF.class, DataModelIF.class, double.class).newInstance(trainingModel, testModel, threshold);
              if (strategyObj instanceof EvaluationStrategy) {
                  @SuppressWarnings("unchecked")
                  EvaluationStrategy<Long, Long> strategyTemp = (EvaluationStrategy<Long, Long>) strategyObj;
                  strategy = strategyTemp;
              }
          }
          return strategy;
      }
docs: Instantiates an strategy, according to the provided properties mapping.
  
  @param properties the properties to be used.
  @param trainingModel datamodel containing the training interactions to be
  considered when generating the strategy.
  @param testModel datamodel containing the interactions in the test split
  to be considered when generating the strategy.
  @return the strategy generated according to the provided properties
  @throws ClassNotFoundException when {@link Class#forName(java.lang.String)}
  fails
  @throws IllegalAccessException when {@link java.lang.reflect.Constructor#newInstance(java.lang.Object[])}
  fails
  @throws InstantiationException when {@link java.lang.reflect.Constructor#newInstance(java.lang.Object[])}
  fails
  @throws InvocationTargetException when {@link java.lang.reflect.Constructor#newInstance(java.lang.Object[])}
  fails
  @throws NoSuchMethodException when {@link Class#getConstructor(java.lang.Class[])}
  fails