我如何在退货区为旅客配行李?

时间:2019-08-07 19:27:28

标签: anylogic

我正在模拟一个安全控制过程,但我不能做到每个乘客都拿起行李。我已经尝试过使用“匹配”,“合并”,“拾取”,但是仍然无法正确执行命令。

我创建了以下流程图,问题出在wReclaimPax,pick和wReclaimBags块中(您可以在图片中看到它们)。 https://ibb.co/v3V57Tm

我看到此链接Anylogic - Combined multiple items back to original owner可以理解某些内容,但我仍然需要帮助。

我已经创建了3个函数:

isMatch:

if(equipaje.pasajeroLink.equals(pasajero.equipajeLink)){
  return true;
}
return false;

paxBags:

for(int i=0;i<wait.size();i++){
   Pasajero p=(Pasajero)wait.get(i);
   if(isMatch(p,bag))
     return p;
}
return null;

bagsPax:

for(int i=0;i<wait.size();i++){
   Equipaje e=(Equipaje)wait.get(i);
   if(isMatch(pasajero,e))
     return e;
}

return null;

1 个答案:

答案 0 :(得分:0)

假定的上下文

您还没有真正解释您的代码与流程之间的关系,但我假设以下内容:

  1. 因为这是行李提取,所以您要确保一名乘客 代理人(Pasajero)仅进入分拣区(代表从 旋转木马),当他的包(从外观上看是伊基帕耶特工) 到达wReclaimBag等待中,并从中释放到 queue4队列。

  2. 为此,您需要在以下情况下触发(从“等待”块中删除代理) 要么乘客(Pasajero)到达wReclaimPax,要么等待行李(Equipaje)到达 在wReclaimBag等待中(因为您不知道乘客或其行李将先到达各自的“等待”区)。

因此,您的paxBags函数在wReclaimBag等待的进入动作中被调用,而您的bagsPax函数在wReclaimPax等待的进入动作中被调用。

当前方法可能存在的问题

在不了解更多模型的情况下,很难说,但是根据您提供的内容,我可以想到的问题是:

  • 如果有匹配的函数,则您的函数将返回Pasajero或Equipaje。您的匹配检查似乎依赖于Pasajero和Equipaje之间的双向连接(链接)。显然,如果未正确安装它们,则该模型将无法正常工作;如果使用双向连接,则无需检查两端。

  • 您的函数需要调用,以便如果它们返回非null,则它们将匹配的代理从另一个Wait块中释放出来,释放自己。你在那样吗如果不进行检查,则在您输入Wait块时可能自己调用​​free可能会出现问题(因为这种情况取决于AnyLogic内部,是否在此阶段您是否算在该块中并且可以释放) )。如果这似乎是问题,则可以创建一个超时0动态事件实例来进行释放,以免在on-enter动作范围内执行该操作。

  • 您的提取块(因为已经设置好了,以便进入的业务代表始终希望提取queue4中的第一个业务代表(Equipaje))只需设置为等待数量1(尽管请参见下面)。

  • 完成所有这些操作后,最可能的问题是AnyLogic的基础事件顺序正在影响事物。当您释放代理时,我可以肯定释放实际上发生在计划在暗中安排的超时0事件中。因此,如果您将“接客”设置为“确切数量(等待)”,那么乘客可能会在他们的设备到达queue4之前先到达接客 ,它应该可以处理。

过程的动画效果(每个块中的进/出/内数字以及单击块时的详细信息)还应该帮助您调试出了什么问题;例如,应将本应放开的行李留在“等待”中,等等。

P.S。有了这种东西,您应该始终创建一个最小的示例模型,以使问题/解决方案的测试变得更加容易(并在诸如此类的帮助论坛中共享,而其余的模型复杂性都不相关)。通常,您会在尝试构建以最小方式重现问题的模型的过程中“自然地”发现问题。