3

我想知道我可以在给定范围内生成随机数(C++11),并且可以控制某些数字出现的可能性。假设我生成 0 到 4 之间的随机数,其中数字“1”有 50% 可能在集合中被绘制。

4

3 回答 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_distributionstd::piecewise_linear_distribution<random>以及标题 中的许多其他不同分布。

于 2013-08-14T20:12:32.560 回答
1

您正在寻找std::discrete_distribution

于 2013-08-14T20:10:58.343 回答
0

有不同概率分布/模型的度量对接,所有这些都可以通过大多数模拟教科书中描述的各种技术生成。如果您想更具体地回答您的问题,则需要更具体地了解您想要从中生成的分布。您只指定了五种可能结果之一的概率,其余四种可能的概率分配是无限的。

如果您打算在没有充分理解概率论和分布建模的情况下生成随机数,那您就是在自找麻烦。我强烈建议您阅读Law 的“模拟建模和分析”的第 4、6、7和 8 章,或一些类似的文本。

于 2013-08-14T21:03:29.440 回答