docs: public List<BinarySolution> doCrossover(double probability,
                                            BinarySolution parent1,
                                            BinarySolution parent2) throws JMetalException {
      List<BinarySolution> offspring = new ArrayList<>();
      offspring.add((BinarySolution) parent1.copy()) ;
      offspring.add((BinarySolution) parent2.copy()) ;
  
      if (randomGenerator.getRandomValue() < probability) {
        for (int var = 0; var < parent1.getNumberOfVariables(); var++) {
          BinarySet p1 = parent1.getVariableValue(var) ;
          BinarySet p2 = parent2.getVariableValue(var) ;
  
          for (int bit = 0; bit < p1.size(); bit++) {
            if (p1.get(bit) != p2.get(bit)) {
              if  (randomGenerator.getRandomValue() < 0.5) {
                offspring.get(0).getVariableValue(var).set(bit, p2.get(bit)) ;
                offspring.get(1).getVariableValue(var).set(bit, p1.get(bit)) ;
              }
            }
          }
        }
      }
  
      return offspring;
    }