如何在AnyLogic中选择通过另一个代理连接的最近的代理?

问题描述

在模型中,我通过“链接到其他代理”对象连接了网络中的不同代理类型。我使用了一个函数来创建网络:

shopLink.connectTo(this.getNearestAgent(main.shops));
homeLink.connectTo(this.getNearestAgent(main.homes));

因此,每个工厂代理仅连接到最近的商店和家中。在工厂代理类型内的“启动时”字段中调用函数

enter image description here

让我们假设红色代表的类型是工厂,黄色代表商店,绿色代表房屋。还要假设所有Factory-agent都包含Person-agent,并且我想将Person-agent发送到连接到Factory-agent的最近的Shop-agent。我需要使用什么Java代码来选择与工厂代理连接的最近的商店代理?

解决方法

如果您的Person代理存在于Factory父代理中,并且您具有如图所示的连接,则这取决于在Factory中如何建立连接:

(a)如果Factory的默认connections链接到“代理”对象仅包含 个商店代理连接,请使用

getNearestAgent(factory.getConnections())

(b)如果Factory的店铺连接位于特殊的“链接到代理”对象(例如shopConnections)中,则使用

getNearestAgent(factory.shopConnections.getConnections())

(c)如果您在Factory的默认connections链接中混合了与所有其他座席类型(商店,工厂等)的连接,则必须首先过滤该列表以仅包括Shop座席所以

(Shop) getNearestAgent(filter(factory.getConnections(),f -> f instanceof Shop))

(关于Java的细微之处,原因是为什么情况(c)在一开始需要(Shop)位,这是Java强制转换,但是(a)不需要。这与以下事实有关: getNearestAgentgetConnectionsgeneric methods,并且正在使用type inference。)