从C++中概率分布向量生成随机数发生器

问题描述:

我有和这里Distributed probability random number generator相同的问题,但在C++中。我知道如何实现它,但我的问题是 - 函数构建在当前版本的C++中吗?从C++中概率分布向量生成随机数发生器

+0

有应该要的东西在这里为你:http://en.cppreference.com/w/cpp/numeric/random – jrok 2013-02-23 10:54:26

+3

HTTP: //en.cppreference.com/w/cpp/numeric/random/discrete_distribution多数民众赞成它!为什么我第一次没有看到它?好,谢谢。你的回答帮助了我。 – Houp 2013-02-23 10:58:52

+0

不幸的是,Visual Studio不支持使用迭代器的构造函数。 (dist(someVector.begin(),someVector.end()):( – Houp 2013-02-23 11:19:14

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

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

std::discrete_dstribution的构造函数在权重序列或权重的一个迭代器范围内。然后根据权重序列中的相应索引对生成的数字进行加权。也就是说,如果{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;