docs: static List<ExperimentAlgorithm<DoubleSolution, List<DoubleSolution>>> configureAlgorithmList(
            List<ExperimentProblem<DoubleSolution>> problemList) {
      List<ExperimentAlgorithm<DoubleSolution, List<DoubleSolution>>> algorithms = new ArrayList<>();
      for (int run = 0; run < INDEPENDENT_RUNS; run++) {
  
        for (int i = 0; i < problemList.size(); i++) {
          Algorithm<List<DoubleSolution>> algorithm = new NSGAIIBuilder<>(
                  problemList.get(i).getProblem(),
                  new SBXCrossover(1.0, 20),
                  new PolynomialMutation(1.0 / problemList.get(i).getProblem().getNumberOfVariables(), 20.0),
                  100)
                  .setMaxEvaluations(25000)
                  .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
  
        for (int i = 0; i < problemList.size(); i++) {
          Algorithm<List<DoubleSolution>> algorithm = new SPEA2Builder<DoubleSolution>(
                  problemList.get(i).getProblem(),
                  new SBXCrossover(1.0, 10.0),
                  new PolynomialMutation(1.0 / problemList.get(i).getProblem().getNumberOfVariables(), 20.0))
                  .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
  
        for (int i = 0; i < problemList.size(); i++) {
          double mutationProbability = 1.0 / problemList.get(i).getProblem().getNumberOfVariables();
          double mutationDistributionIndex = 20.0;
          Algorithm<List<DoubleSolution>> algorithm = new SMPSOBuilder((DoubleProblem) problemList.get(i).getProblem(),
                  new CrowdingDistanceArchive<DoubleSolution>(100))
                  .setMutation(new PolynomialMutation(mutationProbability, mutationDistributionIndex))
                  .setMaxIterations(250)
                  .setSwarmSize(100)
                  .setSolutionListEvaluator(new SequentialSolutionListEvaluator<DoubleSolution>())
                  .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
        for (int i = 0; i < problemList.size(); i++) {
          double cr = 0.5;
          double f = 0.5;
  
          Algorithm<List<DoubleSolution>> algorithm = new GDE3Builder((DoubleProblem) problemList.get(i).getProblem())
                  .setCrossover(new DifferentialEvolutionCrossover(cr, f, "rand/1/bin"))
                  .setSelection(new DifferentialEvolutionSelection())
                  .setMaxEvaluations(25000)
                  .setPopulationSize(100)
                  .setSolutionSetEvaluator(new SequentialSolutionListEvaluator<>())
                  .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
  
        for (int i = 0; i < problemList.size(); i++) {
          Algorithm<List<DoubleSolution>> algorithm = new MOCellBuilder<DoubleSolution>(
                  (DoubleProblem) problemList.get(i).getProblem(),
                  new SBXCrossover(1.0, 20.0),
                  new PolynomialMutation(1.0 / problemList.get(i).getProblem().getNumberOfVariables(), 20.0))
                  .setSelectionOperator(new BinaryTournamentSelection<>())
                  .setMaxEvaluations(25000)
                  .setPopulationSize(100)
                  .setArchive(new CrowdingDistanceArchive<DoubleSolution>(100))
                  .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
      }
      return algorithms;
    }