为什么没有触发有条件的事件?

Why does an event with conditional is not being triggered?

提问人:Zainab 提问时间:11/1/2023 最后编辑:Zainab 更新时间:11/2/2023 访问量:35

问:

我正在尝试将 JavaClass 从一个代理发送到另一个代理。为此,我首先在一个事件中创建该 JavaClass 的实例。该事件在模拟中以每秒 1 的速率运行。第一个事件是填充数组。条件是,只要该数组有值,我的第二个事件就应该触发。

在此处输入图像描述

问题是第一个事件工作正常,但第二个事件仅在模型仿真时间的前几秒钟触发,而不是在我自定义的 3000 秒模型仿真时间单位触发。

我试图检查任何事件中的逻辑是否不正确。为此,我调试了我的代码。

我发现卸载和unassignedTasks的集合永远不会为空以触发第一个事件,因此我通过应用//unassignedTasks.clear() //Offloading.clear();无论在哪里需要它。这有助于第一个事件运行 200 次,而不是之前的 100 次。

卸载数组给出的预期结果是空的,但 unassignedTasks 数组在模拟结束之前填充了 1 个 JavaClass。这应该使 OffloadTask 被触发。但是,不会触发 OffloadTask。

我不明白是什么阻碍了第二个事件的触发。即使满足了条件。任何指导或建议都非常感谢。

数组 事件 集合 anylogic

评论

0赞 Benjamin 11/2/2023
你能不能把它简化为核心问题,看起来前80%与你最新的问题无关。请学会关注根本问题,让我们的生活更轻松 🤗
0赞 Zainab 11/2/2023
对此造成的不便,我们深表歉意。请立即检查。
0赞 Zainab 11/2/2023
@Benjamin 感谢您的指导。我找到了这个问题的解决方案。

答:

1赞 Zainab 11/2/2023 #1

有条件的事件不会再次被触发,因为AnyLogic中的事件在基于条件的情况下只发生一次。 我在这里找到了详细信息:https://anylogic.help/anylogic/statecharts/events.html

应用 eventname.restart();在事件结束时,操作可以解决此问题。

评论

0赞 Benjamin 11/2/2023
谢谢分享。永远不要使用条件事件或转换,除非你非常高级并且了解底层机制。他们很容易欺骗