为伪随机数生成器生成种子值

时间:2013-12-29 05:34:08

标签: random seed

我有4个整数,我想将其转换为种子以生成随机数。我知道这在大多数情况下都是随意的,但是我确实想确保我目前所做的并不是过度杀戮(或者在种子值中没有产生足够的传播)。

我有大约1000个对象,我想根据它们的一些变量获得随机属性。

两个变量是常量并且在0到1000范围内并且对于每个对象是随机的,可以发生重复但是根本不可能(constant1constant2)。通过程序的运行,其他两个变量在长时间段内以1的增量变化,从0开始,可以在有符号的int32范围内的任何位置,但往往在-100和100之间(variable1和{ {1}})。

如何从这4个值中适当地生成种子?

1 个答案:

答案 0 :(得分:0)

  1. 在初始化类实例时,您应该只初始化Random生成器一次,因此您应该只使用其中的2个属性(其他2个默认设置为0,不是&t; t他们?)获得种子。

  2. 由于1.并且假设constant1constant2默认在0-1000之间是随机的,您可以使用constant1 * 1000 + constant2获取0到1000000之间的随机数。我不确定随机性分布,但它应该足以获得种子。

  3. <强>更新

    如果你真的需要让种子依赖于其他两个变量,你可以按照以下模式进行:

    var seed = ((variable1 * 200 + variable) * 1000 + constant1) * 1000 + constant2;
    

    但是因为它超出Int32范围,您必须在unsafe上下文中执行此操作,以防止OverflowException被抛出。

    最后一件事:我并非100%确定它会为您提供生成值的标准化分布。