手动释放代理占用的资源?

Manually releasing a seized resource from an agent?

我有一个相当简单的过程:

batch-seize-delay process

Order agent types 被分批为 Batch agent type,然后第三个 agent type 作为该 Batch 的 Resource。在占用时,一条消息被发送到资源代理的状态图,以便采取一些行动。但是,如果在收到消息后满足特定条件,则 Batch 代理需要释放 Resource 代理并占用另一个资源代理,以便完成该过程。我在 Resource 代理中编写了代码,当它被拒绝 (rejectionsCollection.add(Batch)) 时,将被拒绝的 Batch 代理添加到上面显示的集合中。然后,使用注入调用将 Batch 代理重新插入到第二个源块中,我用 rejectionsCollection.get(0) 对 'New agent' 选项进行了编码。但是,我还必须在 seize 和 delay 块中调用 remove() 否则我会得到流程图错误(同一代理同时在两个块中)。

当我使用 seize.remove(batch) 作为满足条件时要采取的操作,但问题是资源代理没有被释放。我还将 seize 高级选项 'Canceled units' 设置为 'go to release' 并将 'Release for canceled units' 设置为我的释放块,但这不起作用。第三个代理仍然被占用,最终我 运行 没有资源代理(这不应该发生)。

我也试过将它复制到 NewBatch 代理中 Batch newBatch = batch; 但它仍然给出流程图错误。我也尝试过使用 clone() 但我还没有找到正确的语法(我不是最有经验的 java 程序员)。我收到错误消息 'cannot convert from Object to Batch'。不确定它是否相关,但 Batch 代理中也有两个集合。

我的下一个想法是我可以手动释放资源代理,但帮助文件说即使被占用的资源可以公开访问,用户也不应该这样做。我还能尝试什么?

抱歉文字墙,但任何想法都会受到赞赏!

您没有手动释放资源。该设置以代理为中心,因此您必须告诉代理放弃资源。这是通过让代理“移动”到释放块来完成的。

在您的情况下,您可以将延迟持续时间设置为有条件的:如果代理满足您的条件,则延迟时间应为 0,否则为正常延迟时间。

使用这种表示法:agent.condition == true ? 0. : normalDelayTime

您也可以在“Seize”之后使用“Split”元素,并为您的特工完全绕过“delay”对象。

很多选项,但请记住以代理为中心:)