Constraints are taken into account when generating random solutions.
Also, if random walk walks outside of constraints, the solution
is not abandoned. Rather, another random walk is performed from
the previous solution until a constrained solution is found.