跨模型获得相同的到达率

Get the same arrival rate across models

我复制了一个模型并对其进行了一些调整。当我 运行 两个具有相同固定种子的模型时,我不会得到相同的结果,我理解这一点,因为我在模型中有其他随机性来源。不管怎样,在这两个模型中,我都使用了一个源块,这样到达是由一个费率表定义的,该表是费率类型的,并且是从数据库中提供的。现在,我知道了以下信息:

  1. 通常,我可以在分布中使用我自己的随机数生成器 (RNG),例如 triangular(5, 10, 25, myRNG),这样 Random myRNG = new Random (2)
  2. 默认情况下,具有“类型”比率的时间表遵循使用默认 RNG 的热情分布。
  3. 在模型中的任何时候,我都可以通过调用 setDefaultRandomGenerator(Random r) 将默认的 RNG 替换为我自己的。

问题是:是否可以对到达率使用固定种子以确保我在两个模型中获得完全相同的输入?

当然,只需在“到达定义”中将两个源块设置为“到达间隔时间”即可。

然后,在字段中使用相同的代码 poisson(1, myRNG),确保 myRNG RNG 使用相同的初始种子(即 new Random(1234)

(“速率”设置与对 interarrival-time 使用 poission(1) 相同)

在 anylogic 中,速率始终等同于 lambda 等于您设置的速率的泊松分布,

到达间隔时间不服从任何分布,但在场中使用指数(lambda)等同于使用速率为 lambda 的按速率到达。

但是泊松和指数密切相关,这就是为什么如果您在间隔时间内使用 poisson(1.0/lambda),您的平均到达次数与使用 exponential(lambda) 时相同。

无法为到达率设置种子,这就是为什么您需要在源代码中使用到达间隔时间

但是你需要先创建一个变量,我们称它为rand,类型为Random,初始值为new Random(seed) 其中 seed 是您想要的任何整数(更准确地说是 long)

那么在到达时间间隔内你需要做的是:

exponential(lambda, 0,rand)

这将导致独特的模拟运行,无论您在 AnyLogic 实验中有什么配置