docs: public static void main(String[] args) throws JMetalException {
      DoubleProblem problem;
      Algorithm<List<DoubleSolution>> algorithm;
      MutationOperator<DoubleSolution> mutation;
  
      String problemName;
      if (args.length == 1) {
        problemName = args[0];
      } else {
        problemName = "org.uma.jmetal.problem.multiobjective.zdt.ZDT1";
      }
      problem = (DoubleProblem) ProblemUtils.<DoubleSolution>loadProblem(problemName);
  
      List<List<Double>> referencePoints;
      referencePoints = new ArrayList<>();
      referencePoints.add(Arrays.asList(0.2, 0.8));
  
      double mutationProbability = 1.0 / problem.getNumberOfVariables();
      double mutationDistributionIndex = 20.0;
      mutation = new PolynomialMutation(mutationProbability, mutationDistributionIndex);
  
      int maxIterations = 250;
      int swarmSize = 100;
  
      List<ArchiveWithReferencePoint<DoubleSolution>> archivesWithReferencePoints = new ArrayList<>();
  
      for (int i = 0; i < referencePoints.size(); i++) {
        archivesWithReferencePoints.add(
                new CrowdingDistanceArchiveWithReferencePoint<DoubleSolution>(
                        swarmSize / referencePoints.size(), referencePoints.get(i)));
      }
  
      algorithm = new SMPSORP(problem,
              swarmSize,
              archivesWithReferencePoints,
              referencePoints,
              mutation,
              maxIterations,
              0.0, 1.0,
              0.0, 1.0,
              2.5, 1.5,
              2.5, 1.5,
              0.1, 0.1,
              -1.0, -1.0,
              new SequentialSolutionListEvaluator<>());
  
      AlgorithmRunner algorithmRunner = new AlgorithmRunner.Executor(algorithm)
              .execute();
  
      List<DoubleSolution> population = algorithm.getResult();
      long computingTime = algorithmRunner.getComputingTime();
  
      JMetalLogger.logger.info("Total execution time: " + computingTime + "ms");
  
      new SolutionListOutput(population)
              .setSeparator("\t")
              .setVarFileOutputContext(new DefaultFileOutputContext("VAR.tsv"))
              .setFunFileOutputContext(new DefaultFileOutputContext("FUN.tsv"))
              .print();
  
      System.exit(0);
    }