C++中具有概率分布的向量的随机生成器

Random generator from vector with probability distribution in C++

本文关键字:随机 向量 C++ 概率分布      更新时间:2023-10-16

我有和这里相同的问题分布式概率随机数生成器,但在c++中。我知道如何实现它,但我的问题是——这是在当前版本的c++中功能性构建的吗?

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

这个分布可以使用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;