Model 在Anylogic中创建可复制的源到达模型
我目前正在急诊室制作一个小模型。但是,我遇到了一个问题,我可以找到解决方案: 我试图在更改参数(如护士或医生)时创建可复制的模型源到达。我在我的源代码块中有一个费率到达时间表。在不更改参数的情况下运行模拟可以为我提供可复制的到达模式,但是更改模型中的护士数量也会更改到达模式!!为什么会这样??。 我查看了创伤中心的示例模型,这里它与我的模型做的相同。即使使用固定的种子。试着改变医生的数量,你会发现到达的人数会改变Model 在Anylogic中创建可复制的源到达模型,model,simulation,anylogic,reproducible-research,Model,Simulation,Anylogic,Reproducible Research,我目前正在急诊室制作一个小模型。但是,我遇到了一个问题,我可以找到解决方案: 我试图在更改参数(如护士或医生)时创建可复制的模型源到达。我在我的源代码块中有一个费率到达时间表。在不更改参数的情况下运行模拟可以为我提供可复制的到达模式,但是更改模型中的护士数量也会更改到达模式!!为什么会这样??。 我查看了创伤中心的示例模型,这里它与我的模型做的相同。即使使用固定的种子。试着改变医生的数量,你会发现到达的人数会改变 向莫顿致以最诚挚的问候默认情况下,您的整个模型使用的是单个随机数流。拥有更多的资源
向莫顿致以最诚挚的问候默认情况下,您的整个模型使用的是单个随机数流。拥有更多的资源意味着患者可能会以不同的顺序到达某些区块,并且某些区块会比其他区块更频繁/更少地调用随机数 除了默认值之外,您还可以使用另一个随机数流来处理到达。这将使实验中的到达率保持不变,即使其他情况发生变化 我将使用一个事件来实现这一点,该事件的操作是将代理注入源代码块(将源代码块转换为手动)。注入一个实体后,将事件重置为在下次到达时停止。如果您有指数级的到达时间,您可以执行以下操作:
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 );
想要在不同的随机数流上有不同的区域是很常见的,所以上面的代码只是实现这一点的一种可能的方法
需要考虑的几个大问题:
我同意一般的答案,但是
事件
的使用在这里是过度的。只需在源
块中使用基于到达间隔时间的到达,到达间隔时间为指数(0.5,1,myRandom)
或任何形式。请注意,基于速率的到达是一个指数分布的到达间隔时间(以lambda为速率)。@StuartRossiter您是对的。你的选择会简单得多。我发现我们使用了很多自定义逻辑(不仅仅是自定义随机数生成器)来创建代理,有时我会默认使用inject()来完成所有操作。感谢你的纠正。