我通过
std::discrete_distribution
迭代生成随机数。如果在每次迭代后重置分布的内部状态(相当于在循环内创建 std::discrete_distribution
对象),随机数的质量是否会降低:
// inputs:
// int n_samples
// int n_energies
// double energies[n_energies]
std::mt19937_64 generator;
for (int i = 0; i < n_samples; ++i ) {
std::discrete_distribution<int> d(energies, energies + n_energies);
int index = d(generator);
// DO SMTH WITH INDEX
// energies array may change between iterations here.
}
我问的原因是
energies
可能会在迭代之间发生变化(取决于算法流程,这是不可预测的)。
在一种边界情况下,他们会更改每次迭代,因此上面的代码没问题,因为我在这里无能为力。
在另一种边界情况下,它们在迭代之间根本不会改变。这相当于在概率相同的情况下重置
std::discrete_distribution
的内部状态。
在后一种情况下,生成的随机数的质量是否低于未重置分布状态时的质量(即在循环外创建
std::discrete_distribution
对象)?
根据@pjs 和@Igor Tandetnik 评论,答案是:
不,随机数的质量不会降低。
本身不包含任何不确定的内部状态。它只是执行简单的确定性数学,将均匀 [0, 1] 分布转换为离散分布。discrete_distribution