code: @Override
      public WeightedIndexEvaluation evaluate(SolutionType solution, DataType data) {
          // initialize evaluation object
          WeightedIndexEvaluation eval = new WeightedIndexEvaluation();
          // add evaluations produced by contained objectives
          weights.keySet().forEach(obj -> {
              // evaluate solution using objective
              Evaluation objEval = obj.evaluate(solution, data);
              // flip weight sign if minimizing
              double w = weights.get(obj);
              if(obj.isMinimizing()){
                  w = -w;
              }
              // register in weighted index evaluation
              eval.addEvaluation(obj, objEval, w);
          });
          // return weighted index evaluation
          return eval;
      }
docs: Produces an evaluation object that reflects the weighted sum of evaluations of all underlying objectives.
  
  @param solution solution to evaluate
  @param data data to be used for evaluation
  @return weighted index evaluation