code: @Override
      public CrossoverResult crossover() {
          double[][] parents = parentSelection.selectParents();
  
          double[] offspringValues = new double[parents[0].length];
  
          if (rng.nextDouble() < crossoverRate) {
              for (int i = 0; i < offspringValues.length; ++i) {
                  double t = rng.nextDouble();
                  offspringValues[i] = t * parents[0][i] + (1.0 - t) * parents[1][i];
              }
              return new CrossoverResult(true, offspringValues);
          }
  
          return new CrossoverResult(false, parents[0]);
      }
docs: Has a probability <i>crossoverRate</i> of performing the crossover where each gene is a linear combination of:<br>
  <i>t*parentA + (1-t)*parentB, where t is [0, 1] and different for each gene.</i><br>
  Otherwise, returns the genes of a random parent.
  
  @return The crossover result. See {@link CrossoverResult}.