首页 > 解决方案 > 将代理位置保存在“占用”块中,并在“移动到”块中使用位置

问题描述

我的模型是一个基本的仓库情况模型。卡车进入模型,被空的装卸平台资源占用,然后被叉车卸载。卡车的位置(装载区 1、装载区 2 等)由占用的可用资源确定。我的“移动到”块然后勾选了“移动到被占用资源的位置”选项。在这种情况下,模型的卡车一半按预期工作。

叉车的一半有点硬。有人建议我将托盘代理注入模型中,而不是将它们从进货卡车中分离出来。问题是我无法将代理的位置指定到特定资源。

如何将新停放的卡车的位置(装载区 1、装载区 2 等)保存在变量中,然后调用同一个变量将代理注入该位置?充当装载区的节点是特定资源(装载区)的归属位置。

当我保存位置 (varAgentLocation = getNetworkNode();) 时,我必须将变量类型设置为键入“自定义”(INode) 以避免错误。如果我在源的位置框中键入“varAgentLocation”,我会收到一条错误消息,指出类型不同(INode 和 InitialLocationType)

标签: locationanylogicagent

解决方案


没有必要为您的(非移动的)装载区资源使用家庭位置。

只需将它们作为自定义资源代理类型(例如,代理类型LoadingBay,而不是 vanilla Agent),并在模型启动时设置类型Node参数作为相关的空间标记节点。(您需要让资源池将资源代理添加到LoadingBay您事先创建的自定义(最初为空)群体中;这允许您在模型启动时循环通过资源代理为它们设置任何参数等.)

那么可能最连贯的方式是

  • 通过块的 on-seize 操作将此值复制到Truck代理中的变量中Seize

  • 让您的代理使用对它们来自Pallet的代理的引用(在变量或参数中)创建。Truck对于托盘是否预先存在(您可以使用Unbatch块来“释放”它们)或是否动态创建它们,有多种设计替代方案。

  • 当您将托盘代理注入到一个Source块中时,将其设置为让到达节点(可以是动态表达式)从“父”卡车代理(例如,类似的东西)获取相关节点agent.arrivalTruck.loadingBayNode


推荐阅读