Better choices algorithm

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Minor cleanup on RVar Monad instance

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Initial DE draft.

This is the initial DE algorithm definition. The algorithm is nothing
more than a piecewise application of a function to a single entity
within a collection of entities. The iteration scheme (either
synchronous or asynchronous) are responsible for creating the new
population and then potentially selecting the new population from both
old and new.

Some thought is still needed around this as the iteration schemes are
really algorithm independent - perhaps the selection of the new
population should be a function that is composed onto the iteration
function where the new population is created. Perhaps something along
the lines of a Reducer? If a Reducer is used, there must be a monoid
structure available.

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Ensure crossover logic is correct in DE

Corrected a small typo where the offspring vector component was never
selected from the pair of parent and offspring.

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Generate discrete uniform numbers correctly.

The algorithm that was used to calculate discrete uniform numbers
in the range [from, to) was incorrect and resulted in strange values
which were not as random as expected. The new implementation corrects
this problem and also changes the manner in which the solection is done
so that the range for the selection is now [from, to], i.e: the upper
bound is now inclusive.

Signed-off-by: Gary Pamparà <gpampara@gmail.com>