Anylogic:如何制作一个可以释放物品并总是在之后立即将其取回的运输装置?

问题描述 投票:0回答:1

所以,我正在研究一个这样工作的模型:有一个代理(uld)来了,带来了 10 件物品。然后,这些物品由运输车(叉车)移动到特定区域。在该区域(理论上),他们会放下物品,等待几秒钟,然后将其收回并放入存储区域。

本来,我希望叉车不要掉落物品,只是进入节点,稍等一下,然后到达最终位置。我不知道如何在不发布该项目的情况下实现它,所以我让发布发生。现在,在大多数情况下,它工作正常:叉车放下物品,等待,将其取回并存放。但有时,当太多的 uld 过来并丢弃太多的物品时,叉车似乎会直接去取新的物品,而不是先存放物品。 有没有办法,要么让它看起来像没有释放物品,要么有没有办法让同一台叉车总是重新拿走它的物品?

这里是叉车应该放下并重新取回物品的区域

这是我用于将叉车移动到该区域的逻辑

这是移动逻辑

这是商店逻辑

java anylogic
1个回答
0
投票

本来,我希望叉车不要掉落物品,只是进入节点,稍等一下,然后到达最终位置。我不知道如何在不发布该项目的情况下实现它

如果您有 MoveByTransporter1-Delay-MoveByTransporter2 流程,则可以执行此操作,其中您不在 MoveByTransporter1 中释放传输器,也不在 MoveByTransporter2 中捕获传输器。

但是由于您之后使用了商店区块,目前无法与已捕获的运输车一起使用,因此我建议使用代理链接。这样,即使在释放后,您的叉车和物品也可以保持连接,并且它们可以再次“找到彼此”。对于此示例,我们将您的代理类型称为 Uld 和 Forklift。 (您需要自定义代理类型才能使用链接)

  1. 在 Uld 和 Forklift 代理之间创建双向单链接。将它们命名为 myForklift 和 myItem。
  2. 您想要占用一辆免费叉车,但该叉车没有连接的项目。在 MoveByTransporter 块中,启用 自定义传输器选择 并将此条件写入 传输器选择条件
    ((Forklift)unit).myItem.isConnected()==false
    。要连接物品和叉车,请将此线放入同一块的On capture Transporter
    agent.myForklift.connectTo((Forklift)unit)
  3. 要使用相同的叉车来存储物品,请在商店区块中启用自定义运输工具选择,并将以下代码写入运输工具选择条件
    ((Forklift)unit).myItem.getConnectedAgent().equals(agent)
    。完成任务后要释放叉车,请将此行写入存储块的Onreleasetransporter
    ((Forklift)unit).myItem.disconnect()
© www.soinside.com 2019 - 2024. All rights reserved.