AnyLogic - 识别占用的资源池

AnyLogic - Identify seized ResourcePool

我正在通过混合仿真(基于 DES + 代理)在 AnyLogic 中对服务流程进行建模。 在此过程中,我有不同的资源池,一个用于过程中可用的每个员工。我想知道的是,如果我可以通过 AnyLogic 函数获取 seize block.The 当前使用的 ResourcePool,我需要此信息的原因是,通过使用函数,我将分配不同的基于占用的资源池的延迟(例如,10 分钟是 rpA,15 分钟是 rpB)。 我附上一个镜头示例来说明我的问题。 假设这是我的过程:

我尝试按照此 post OtherQuestion

中显示的示例进行操作

因此,我创建了一个变量 myPool

用于抓取和模块

并在资源池中

但我在编译模型时不断收到错误消息(例如,rpA 和 rpB 中的“Main 类型的方法 myPool() 未定义”,以及“Main 类型的方法 myPool() 未定义” 》在抢.

我的 java 技能非常基础,所以我不太了解如何编写这个问题中需要的代码 OtherQuestion 来解决我的问题。

在提供答案之前,这里有一个重要的背景知识:AnyLogic 中的一切都是 Agent. The thing going through the Delay, the ResourceUnit, the Delay and ResourcePool themselves are all instances of Agent

知道了,这是一种根据使用的资源池获取延迟时间的方法:

double delayTime = (agent.resourceUnitOfPool​(rpA) != null)? 10.0 : 20:0;

上述语句在Java中使用了三元表达式。这意味着第一个 agent.resourceUnitOfPool(rpA) 被评估。该方法“returns 给定池的资源单元在已占用资源单元中的第一次出现,如果未找到则为 null。”,意思是:

  • 如果使用 rpA 则返回的值将不为空,
  • 否则,如果使用 rpB,则返回的值将为空。

但是,这不是一个好的方法。它适用于此模型,但如果您将来需要更改模型,它可能会不够用。

一个好的方法是创建资源单元类型并将延迟时间指定为单元属性。有关如何制作自定义资源单元的说明,请参见 here