从C++中概率分布向量生成随机数发生器
问题描述:
我有和这里Distributed probability random number generator相同的问题,但在C++中。我知道如何实现它,但我的问题是 - 函数构建在当前版本的C++中吗?从C++中概率分布向量生成随机数发生器
答
为了完整性,我会回答这个问题。
此分布可以使用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;
有应该要的东西在这里为你:http://en.cppreference.com/w/cpp/numeric/random – jrok 2013-02-23 10:54:26
HTTP: //en.cppreference.com/w/cpp/numeric/random/discrete_distribution多数民众赞成它!为什么我第一次没有看到它?好,谢谢。你的回答帮助了我。 – Houp 2013-02-23 10:58:52
不幸的是,Visual Studio不支持使用迭代器的构造函数。 (dist(someVector.begin(),someVector.end()):( – Houp 2013-02-23 11:19:14