我想知道我可以在给定范围内生成随机数(C++11),并且可以控制某些数字出现的可能性。假设我生成 0 到 4 之间的随机数,其中数字“1”有 50% 可能在集合中被绘制。
问问题
210 次
3 回答
8
如果范围是 [0, n) 那么你可以使用std::discrete_distribution
.
对于将 1 设置为 50% 的具体示例,您可以执行以下操作:
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::discrete_distribution<> d({10, 50, 30, 10});
for(unsigned i = 0; i < 10; ++i) {
std::cout << d(gen) << '\n';
}
}
您可以使用其他采样分布,例如std::piecewise_constant_distribution
和std::piecewise_linear_distribution
。<random>
以及标题 中的许多其他不同分布。
于 2013-08-14T20:12:32.560 回答
1
于 2013-08-14T20:10:58.343 回答
0
有不同概率分布/模型的度量对接,所有这些都可以通过大多数模拟教科书中描述的各种技术生成。如果您想更具体地回答您的问题,则需要更具体地了解您想要从中生成的分布。您只指定了五种可能结果之一的概率,其余四种可能的概率分配是无限的。
如果您打算在没有充分理解概率论和分布建模的情况下生成随机数,那您就是在自找麻烦。我强烈建议您阅读Law 的“模拟建模和分析”的第 4、6、7和 8 章,或一些类似的文本。
于 2013-08-14T21:03:29.440 回答