@Override
			public Optional<Constraint<G, C>> constraint() {
				return Optional.ofNullable(constraint);
			}
Return a new optimization <i>problem</i> with the given parameters. The
given {@code constraint} is applied to the {@link Engine}, via
{@link Engine.Builder#constraint(Constraint)}, and the {@link Codec}, via
{@link Constraint#constrain(Codec)}.
<p>
<b>Note</b><br>
    When creating a new {@code Problem} instance with this factory method,
    there is no need for additionally <em>constraining</em> the given
    {@code codec} with {@link Constraint#constrain(Codec)}.

@since 6.1

@see Engine.Builder#constraint(Constraint)
@see Constraint#constrain(Codec)

@param fitness the problem fitness function
@param codec the evolution engine codec
@param constraint the problem constraint, may be {@code null}
@param <T> the (<i>native</i>) argument type of the problem fitness function
@param <G> the gene type the evolution engine is working with
@param <C> the result type of the fitness function
@return a new problem object from the given parameters
@throws NullPointerException if the {@code fitness} or {@code codec} is
        {@code null}
jenetics/src/main/java/io/jenetics/engine/Problem.java