在Anylogic中制作可重复的模型源

时间:2018-06-15 22:14:46

标签: model simulation anylogic reproducible-research

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

我正在尝试在更改参数(例如护士或医生)时制作可重现的模型源到达。我的源块中有一个到达率计划。在不更改参数的情况下运行模拟可以获得可重现的到达模式,但是更改模型中护士的数量也会改变到达模式!为什么会这样? 我查看一个创伤中心的示例模型,这里它和我的模型一样。即使使用固定种子也是如此。尝试改变医生的数量,你可以看到到达的数量改变?

最好的问候莫滕

1 个答案:

答案 0 :(得分: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. 对于许多具有足够复制的模型,使用不同数量的医生进行的模拟具有不同的到达流并不重要。您运行足够的代表以确保方案中存在真正的差异,而不是由于随机抽样而产生的差异。