@Override
	protected int crossover(final MSeq<G> v, final MSeq<G> w) {
		final var random = RandomRegistry.random();

		final double min = v.get(0).min().doubleValue();
		final double max = v.get(0).max().doubleValue();

		for (int i = 0, n = min(v.length(), w.length()); i < n; ++i) {
			final var g1 = v.get(i);
			final var g2 = w.get(i);

			if (g1.isValid() && g2.isValid()) {
				final double vi = g1.doubleValue();
				final double wi = g2.doubleValue();

				double t, s;
				do {
					final double a = random.nextDouble(-_p, 1 + _p);
					final double b = random.nextDouble(-_p, 1 + _p);

					t = a*vi + (1 - a)*wi;
					s = b*wi + (1 - b)*vi;
				} while (t < min || s < min || t >= max || s >= max);

				v.set(i, v.get(i).newInstance(t));
				w.set(i, w.get(i).newInstance(s));
			}
		}

		return 2;
	}
Creates a new intermediate-crossover with default recombination
probability ({@link #DEFAULT_ALTER_PROBABILITY}) and a <em>p</em> value
of zero, which restricts the recombined chromosomes within the hypercube
of the selected chromosomes (vectors).
jenetics/src/main/java/io/jenetics/IntermediateCrossover.java