@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();

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

		boolean changed = false;
		for (int i = 0, n = min(v.length(), w.length()); i < n; ++i) {
			final double vi = v.get(i).doubleValue();
			final double wi = w.get(i).doubleValue();

			final double t = a*vi + (1 - a)*wi;
			final double s = b*wi + (1 - b)*vi;

			if (t >= min && s >= min && t < max && s < max) {
				v.set(i, v.get(i).newInstance(t));
				w.set(i, w.get(i).newInstance(s));
				changed = true;
			}
		}

		return changed ? 2 : 0;
	}
Creates a new linear-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/LineCrossover.java