我正在AnyLogic混合仿真(DES + Agent )中建模一个服务流程。在这个过程中,我有不同的resourcePools,每个员工在流程中都有一个。我想知道的是,如果我能够通过一个AnyLogic函数获得当前由ResourcePool block.The使用的信息,那么我需要这些信息的原因是,通过使用函数,我将根据所捕获的resourcePool分配不同的延迟(例如,10分钟是rpA,15分钟是rpB)。我附上一个例子来说明我的问题。让我们假设这是我的过程:
我试着遵循本文OtherQuestion中显示的示例
因此,我创建了一个变量myPool
在“获取和”模块中使用。
在resourcePool中
但是,在编译模型时,我经常会收到错误(例如,rpA和rpB中的“Main类型未定义的方法myPool()”,以及捕捉中的“Main类型未定义的方法myPool()”。
我的java技能是非常基本的,所以我并没有真正理解如何编写我在这个问题中所需要的代码,OtherQuestion来解决我的问题。
发布于 2022-03-08 10:20:22
在给出答案之前,这里有一个重要的背景知识: AnyLogic中的所有东西都是代理。通过延迟、ResourceUnit、Delay和ResourcePool本身的东西都是代理的实例。
知道了这一点,这里有一种方法可以获得使用资源池的延迟时间:
double delayTime = (agent.resourceUnitOfPool(rpA) != null)? 10.0 : 20:0;
上述语句在Java中使用三元表达式。这意味着对第一个agent.resourceUnitOfPool(rpA)
进行了计算。该方法“在被捕获的资源单元中返回给定池的资源单元的第一次出现,如果未找到则返回null。”,这意味着:
然而,这并不是一个好的方法。它将与此模型一起工作,但如果您将来需要更改该模型,则可能会不够。
一种很好的方法是创建资源单元类型,并将延迟时间指定为单元属性。有关如何制作自定义资源单元的说明可以找到这里。
https://stackoverflow.com/questions/71392139
复制相似问题