自定义分发在 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 个可重现的 运行,但是无法控制这将产生什么结果,因此您可以有一个非常大的连续种子值范围,这些值将给您完全相同的结果.
我正在使用 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 个可重现的 运行,但是无法控制这将产生什么结果,因此您可以有一个非常大的连续种子值范围,这些值将给您完全相同的结果.