【问题标题】:Random generator from vector with probability distribution in C++C++中具有概率分布的向量的随机生成器
【发布时间】:2013-02-08 23:40:17
【问题描述】:

我和Distributed probability random number generator 有同样的问题,但在 c++ 中。我知道如何实现它,但我的问题是 - 该功能是否在当前版本的 c++ 中构建?

【问题讨论】:

标签: c++ random generator distribution probability


【解决方案1】:

为了完整起见,我会回答这个问题。

可以使用 C++11 的随机数生成库生成此分布。这首先需要播种一个随机数引擎(这里我使用std::mt19937),然后将该引擎与std::discrete_distribution 随机数分布一起使用。

std::discrete_dstribution 的构造函数采用权重序列上的迭代器范围或权重initializer_list。然后根据权重序列中的相应指标对生成的数字进行加权。也就是说,如果{10, 5, 1} 是权重,则0 将以10/(10 + 5 + 1) = 0.625 的概率产生,以此类推。

以下代码演示了另一个问题的解决方案:

std::random_device device;
std::mt19937 engine(device()); // Seed the random number engine
std::discrete_distribution<> dist({150, 40, 15, 3}); // Create the distribution

// Now generate values with:
std::cout << (dist(engine) + 1) << std::endl;

【讨论】: