1

我目前正在急诊室制作一个小型模型。但是,我遇到了一个问题,我可以找到解决方案:

我试图在更改参数(例如护士或医生)时制作可重现的模型源到达。我的源块中有一个到达率时间表。在不更改参数的情况下运行模拟给了我可重复的到达模式,但是改变模型中护士的数量也会改变到达模式!!为什么会这样????我查看了创伤中心的示例模型,在这里它与我的模型相同。即使使用固定种子。尝试更改医生的数量,您可以看到到达的数量发生了变化??

最好的问候莫腾

4

1 回答 1

2

默认情况下,您的整个模型使用单个随机数流。拥有更多资源意味着患者可能会以不同的顺序到达某些区块,并且某些区块会比其他运行中更多/更少地调用随机数。

除了默认值外,您还可以为到达使用另一个随机数流。即使其他情况发生变化,这也将使实验中的到达保持不变。

我会通过使用一个事件来做到这一点,该事件的作用是将代理注入您的源代码块(将您的源代码块转换为手动)。注入一个实体后,将事件重置为下一次到达。如果您有指数到达间隔时间,您可以执行以下操作:

Arrivals.inject( 1 );

double dTimeUntilNextArrivale = exponential( 0.5, 1, myRandom);
// where myRandom is defined somewhere for the model to use - I would typically 
// define the variable in the class with the source block and then instantiate
// in the startup code
// example: Random myRandom = new Random();
self.restart( dTimeUntilNextArrival, TimeUnits.MINUTE );

想要在不同的随机数流上有不同的区域是很常见的,所以上面的代码只是一种可能的方法。

需要考虑的一些更大的事情:

  1. AnyLogic 帮助菜单有一些关于打开随机性和确保结果可重复的建议。
  2. 对于许多模型,只要有足够的复制,您的模拟与不同数量的医生有不同的到达流无关紧要。您运行足够的代表以确保场景中存在真正的差异,而不是由于随机抽样而产生的差异。
于 2018-06-15T22:56:35.363 回答