Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Generating integers with different probabilities

For the source of this example see weighted_die.cpp.

#include <boost/random/mersenne_twister.hpp>
#include <boost/random/discrete_distribution.hpp>

boost::mt19937 gen;

This time, instead of a fair die, the probability of rolling a 1 is 50% (!). The other five faces are all equally likely.

discrete_distribution works nicely here by allowing us to assign weights to each of the possible outcomes.

[Tip] Tip

If your compiler supports std::initializer_list, you can initialize discrete_distribution directly with the weights.

double probabilities[] = {
    0.5, 0.1, 0.1, 0.1, 0.1, 0.1
};
boost::random::discrete_distribution<> dist(probabilities);

Now define a function that simulates rolling this die.

int roll_weighted_die() {
    1return dist(gen) + 1;
}

1

Add 1 to make sure that the result is in the range [1,6] instead of [0,5].


PrevUpHomeNext