@Override
	protected double[] probabilities(
		final Seq<Phenotype<G, N>> population,
		final int count
	) {
		assert population != null : "Population must not be null. ";
		assert !population.isEmpty() : "Population is empty.";
		assert count > 0 : "Population to select must be greater than zero. ";

		// Copy the fitness values to probability arrays.
		final double[] fitness = new double[population.size()];

		fitness[0] = population.get(0).fitness().doubleValue();
		double min = fitness[0];
		double max = fitness[0];
		for (int i = 1; i < fitness.length; ++i) {
			fitness[i] = population.get(i).fitness().doubleValue();
			if (fitness[i] < min) min = fitness[i];
			else if (fitness[i] > max) max = fitness[i];
		}

		final double diff = max - min;
		if (eq(diff, 0.0)) {
			// Set equal probabilities if diff (almost) zero.
			Arrays.fill(fitness, 1.0/fitness.length);
		} else {
			// Scale fitness values to avoid overflow.
			for (int i = fitness.length; --i >= 0;) {
				fitness[i] = (fitness[i] - min)/diff;
			}

			// Apply the "Boltzmann" function.
			for (int i = fitness.length; --i >= 0;) {
				fitness[i] = exp(_b*fitness[i]);
			}
		}

		return normalize(fitness);
	}
Create a new BoltzmannSelector with a default beta of 4.0.
jenetics/src/main/java/io/jenetics/BoltzmannSelector.java