使用随机种子比较不同的实现

时间:2016-10-21 14:09:28

标签: c++ boost random-seed

我有一个程序的两个实现,一个使用列表,一个使用向量,以便比较它们的运行时。每个实现中的类函数是不同的,因为列表实现允许代码更灵活。他们都使用随机数生成器。

我将两者设置为随机种子0并运行它们,但我得到的结果不一样。

我遇到的一个问题是,如果两个实现都使用随机种子调用函数,例如

boost::variate_generator<boost::mt19937&, boost::exponential_distribution<>> random_n(seed, boost::exponential_distribution<>()) ;

并且一个比其他实现更多地调用更多次,是否会导致随机种子的失步?

更具体地说,向量实现模拟连续实段上的Poisson Process,例如, [0,1],而列表实现模拟不同分区上的PP:{[0,0.1],[0.1,0.2],[0.2,0.3],...,[0.9,1]}然后组合结果。在大分区上模拟PP可能意味着只需1个boost :: exponential_distribution调用,但是在10个分区上进行模拟需要至少10个boost :: exponential_distribution调用,即使它们都不能被使用(例如,如果它们超过了分区) )。

即使在概率上,这些方法应该生成相同类型的结果,程序之间的种子会不同步吗?如果是这样,有没有办法在不改变实现的情况下重新同步它们?

0 个答案:

没有答案