在 Anylogic 中将一个代理移动到另一个代理中

Moving one agent within another agent in Anylogic

我正在 Anylogic.I 中制作简单的配送中心确实制作了卡车代理,我能够将它从一个 gis 点移动到另一个 gis 点。

但我想将其他一些代理(比方说香蕉代理)加载到我的卡车代理中,然后卡车开始他们的旅程(如果卡车装满香蕉)。我该怎么做?

我希望你已经解决了将近一年前的问题。但是,由于没有具体的答案,我会把它留给可能遇到同样问题的任何人。

Anylogic 的 流程建模库 (PML) 有一个名为 Pickup 的元素及其相反的元素,Dropoff.这用于完全按照您的要求进行操作:将一些元素装载到运输车(卡车、叉车,甚至是人)中。

要按照您的要求使用该块,您需要如图所示的拓扑结构:

Queue 元素是保留元素所必需的,直到拾取发生。 Pickup 元素可能会以三种模式拾取元素:

  • 当给定条件为真时;
  • 确切数量(如果可用);
  • 所有可用代理。

我假设所有卡车 必须 完全装满其最大容量。因此,选择的模式将是第二种模式,其中确切数量将是 TruckCapacity,代理的参数 Truck。 选定的模式会拾取所需数量的代理(在本例中为 Bananas)。但是,如果没有可用的或当前数量低于所需数量,Pickup 块的本机行为是允许 container 元素简单地浏览它并只选择可用的。

为了防止此类行为,我创建了一个限制区域,一次只能容纳 1 辆 Truck。此外,HoldWaitFullyLoaded(设置为初始阻塞)强制容器代理 Truck 完全加载。每当 Banana 进入 Queue waitTruck 时,执行验证以检查是否 1 卡车可以装满。如果是这样,请允许那辆卡车通过:

if(self.size()/TruckCapacity>=1){
    WaitFullyLoaded.unblock();
}

再次阻塞WaitFullyLoaded,当卡车经过restrictedAreaEnd阻塞时,它执行 WaitFullyLoaded.block();

主要思想是这样的。但是,可以添加和更改许多功能。

希望这对您有所帮助,

路易斯