docs: static List<ExperimentAlgorithm<BinarySolution, List<BinarySolution>>> configureAlgorithmList(
        List<ExperimentProblem<BinarySolution>> problemList) {
      List<ExperimentAlgorithm<BinarySolution, List<BinarySolution>>> algorithms = new ArrayList<>();
      for (int run = 0; run < INDEPENDENT_RUNS; run++) {
  
        for (int i = 0; i < problemList.size(); i++) {
          Algorithm<List<BinarySolution>> algorithm = new NSGAIIBuilder<BinarySolution>(
              problemList.get(i).getProblem(),
              new SinglePointCrossover(1.0),
              new BitFlipMutation(
                  1.0 / ((BinaryProblem) problemList.get(i).getProblem()).getNumberOfBits(0)),
                  100)
              .setMaxEvaluations(25000)
              .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
  
        for (int i = 0; i < problemList.size(); i++) {
          Algorithm<List<BinarySolution>> algorithm = new SPEA2Builder<BinarySolution>(
              problemList.get(i).getProblem(),
              new SinglePointCrossover(1.0),
              new BitFlipMutation(
                  1.0 / ((BinaryProblem) problemList.get(i).getProblem()).getNumberOfBits(0)))
              .setMaxIterations(250)
              .setPopulationSize(100)
              .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
  
        for (int i = 0; i < problemList.size(); i++) {
          Algorithm<List<BinarySolution>> algorithm = new MOCellBuilder<BinarySolution>(
              problemList.get(i).getProblem(),
              new SinglePointCrossover(1.0),
              new BitFlipMutation(
                  1.0 / ((BinaryProblem) problemList.get(i).getProblem()).getNumberOfBits(0)))
              .setMaxEvaluations(25000)
              .setPopulationSize(100)
              .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
  
        for (int i = 0; i < problemList.size(); i++) {
          CrossoverOperator<BinarySolution> crossoverOperator;
          MutationOperator<BinarySolution> mutationOperator;
          SelectionOperator<List<BinarySolution>, BinarySolution> parentsSelection;
          SelectionOperator<List<BinarySolution>, List<BinarySolution>> newGenerationSelection;
  
          crossoverOperator = new HUXCrossover(1.0);
          parentsSelection = new RandomSelection<BinarySolution>();
          newGenerationSelection = new RankingAndCrowdingSelection<BinarySolution>(100);
          mutationOperator = new BitFlipMutation(0.35);
          Algorithm<List<BinarySolution>> algorithm = new MOCHCBuilder(
              (BinaryProblem) problemList.get(i).getProblem())
              .setInitialConvergenceCount(0.25)
              .setConvergenceValue(3)
              .setPreservedPopulation(0.05)
              .setPopulationSize(100)
              .setMaxEvaluations(25000)
              .setCrossover(crossoverOperator)
              .setNewGenerationSelection(newGenerationSelection)
              .setCataclysmicMutation(mutationOperator)
              .setParentSelection(parentsSelection)
              .setEvaluator(new SequentialSolutionListEvaluator<BinarySolution>())
              .build();
          algorithms.add(new ExperimentAlgorithm<>(algorithm, problemList.get(i), run));
        }
      }
      return algorithms;
    }