code: @Override
    public void run() throws IOException {
      String outputDirectoryName = experiment.getReferenceFrontDirectory() ;
  
      createOutputDirectory(outputDirectoryName) ;
  
      List<String> referenceFrontFileNames = new LinkedList<>() ;
      for (ExperimentProblem<?> problem : experiment.getProblemList()) {
        NonDominatedSolutionListArchive<PointSolution> nonDominatedSolutionArchive =
            new NonDominatedSolutionListArchive<PointSolution>() ;
  
        for (ExperimentAlgorithm<?,?> algorithm : experiment.getAlgorithmList()) {
          String problemDirectory = experiment.getExperimentBaseDirectory() + "/data/" +
              algorithm.getAlgorithmTag() + "/" + problem.getTag() ;
  
          for (int i = 0; i < experiment.getIndependentRuns(); i++) {
            String frontFileName = problemDirectory + "/" + experiment.getOutputParetoFrontFileName() +
                i + ".tsv";
            Front front = new ArrayFront(frontFileName) ;
            List<PointSolution> solutionList = FrontUtils.convertFrontToSolutionList(front) ;
            GenericSolutionAttribute<PointSolution, String> solutionAttribute = new GenericSolutionAttribute<PointSolution, String>()  ;
  
            for (PointSolution solution : solutionList) {
              solutionAttribute.setAttribute(solution, algorithm.getAlgorithmTag());
              nonDominatedSolutionArchive.add(solution) ;
            }
          }
        }
        String referenceSetFileName = outputDirectoryName + "/" + problem.getTag() + ".pf" ;
        referenceFrontFileNames.add(problem.getTag() + ".pf");
        new SolutionListOutput(nonDominatedSolutionArchive.getSolutionList())
            .printObjectivesToFile(referenceSetFileName);
  
        writeFilesWithTheSolutionsContributedByEachAlgorithm(outputDirectoryName, problem,
            nonDominatedSolutionArchive.getSolutionList()) ;
      }
  
    }
docs: The run() method creates de output directory and compute the fronts