自定义分发在 Anylogic 中总是给出相同的值

Custom distribution is always giving the same value in Anylogic

我正在使用 AnyLogic 进行模拟,在我创建的函数中,我正在根据存储在数据库 table 中的观察列表(整数)创建自定义分布(一些值是 10,12,10,14,16,20,21,23,11,...).

问题是在以编程方式创建自定义分布后,它 returns 始终与分布 (14) 中的值相同。我认为将种子固定为 0 是导致问题的原因,所以我编写了这段代码来计算每次执行的随机种子,并使用它从自定义分布中获取随机值:

CustomDistribution dist = new CustomDistribution(leadtimes);
int seed = ThreadLocalRandom.current().nextInt(0, 100 + 1);
traceln("Seed : "+seed);
delay = dist.get(new Random(seed));

这段代码中,leadtimes是整数观察列表,seed每次随机生成,dist是自定义分布对象,delay是我想得到的随机值。

简而言之:

如何生成每次都与以编程方式创建的自定义分布不同的随机值?

您做的事情完全正确,但是您选择的种子范围可能会产生相同的值...

试试这个,你会看到你得到不同的值:

for(int i=0;i<1000000;i+=10221){
    traceln(dist.get(new Random(i)));
}

种子允许您有 1 个可重现的 运行,但是无法控制这将产生什么结果,因此您可以有一个非常大的连续种子值范围,这些值将给您完全相同的结果.