首页 > 解决方案 > 如何销毁队列中的所有代理并插入有条件的新代理?

问题描述

基本上我有一个关于 anlylogic 的简单源/汇图:

我的模特

源将代理“CMproduto”插入到我的行中,并将从我的数据库中获取代理的特征。然后,我的代理将按条件对象将其处理到相应队列(第 1/2/3 行)的行进行排序,并且代理将通过条件一一退出我的模型。但是,我的数据库可以更改(根据我的模拟的其余部分),因此,我需要销毁所有 3 个队列中的所有当前代理(以及我的 CMproduto 人口)并通过“源”重新插入它们,但使用新的我更新的数据库中的值。因此,我的数据库将始终注册旧模型(已经进入我的接收器的模型),因为我已经在我的数据库中创建了一个列,如果代理没有或已经被更新为“0”或“1”分别处理。所以,

源盒配置

这就是我的源的配置方式。基本上代理将以“到达之间的时间”为 0 进入(所以它们都同时插入到我的模型中)。如前所述,正在从数据库中捕获参数,并且到达的数量有限。

我的问题是:如果我从“CMproduto”中删除这些代理,它们会自动从我的队列中删除吗?此外,我如何才能将代理重新插入到我的模型中,并使用我的数据库中的特征(并且只有尚未处理的模型)?

标签: anylogic

解决方案


我会从队列中删除代理,然后通过输入块将它们发送回流程。代码看起来像:

while( queue.size() > 0 ){
  // get the agent out of the queue
  Agent agent = queue.removeFirst();
  // maybe insert some code to adjust the paramters
  // then send back to the enter block
  enter.take( agent );
}

您的图表可能类似于:

在此处输入图像描述

您可以使用 agent.deleteSelf() 从总体中删除代理,但如果它仍在流程图块中,您将收到错误消息。此外,当我清理特工时,我总是将它们送到水槽,而不是仅仅将它们从人群中移除。过去,我们注意到这有助于解决内存泄漏,以及清理我们自己的引用。

我注意到您只是将代理发送到等待某些条件(保持块)的队列。您可能需要考虑等待块(请参阅帮助菜单)。您可能还想考虑一个分离队列,当您满足条件时,您只需将代理从队列中拉出......实际上,如果您只是将代理保留在队列中,您可能根本不需要这些块 - 您可以只将代理存储在集合中,并根据需要添加/删除/排序等。


推荐阅读