提问人:Zainab 提问时间:11/1/2023 最后编辑:Zainab 更新时间:11/2/2023 访问量:35
为什么没有触发有条件的事件?
Why does an event with conditional is not being triggered?
问:
我正在尝试将 JavaClass 从一个代理发送到另一个代理。为此,我首先在一个事件中创建该 JavaClass 的实例。该事件在模拟中以每秒 1 的速率运行。第一个事件是填充数组。条件是,只要该数组有值,我的第二个事件就应该触发。
问题是第一个事件工作正常,但第二个事件仅在模型仿真时间的前几秒钟触发,而不是在我自定义的 3000 秒模型仿真时间单位触发。
我试图检查任何事件中的逻辑是否不正确。为此,我调试了我的代码。
我发现卸载和unassignedTasks的集合永远不会为空以触发第一个事件,因此我通过应用//unassignedTasks.clear() //Offloading.clear();无论在哪里需要它。这有助于第一个事件运行 200 次,而不是之前的 100 次。
卸载数组给出的预期结果是空的,但 unassignedTasks 数组在模拟结束之前填充了 1 个 JavaClass。这应该使 OffloadTask 被触发。但是,不会触发 OffloadTask。
我不明白是什么阻碍了第二个事件的触发。即使满足了条件。任何指导或建议都非常感谢。
答:
1赞
Zainab
11/2/2023
#1
有条件的事件不会再次被触发,因为AnyLogic中的事件在基于条件的情况下只发生一次。 我在这里找到了详细信息:https://anylogic.help/anylogic/statecharts/events.html
应用 eventname.restart();在事件结束时,操作可以解决此问题。
评论
0赞
Benjamin
11/2/2023
谢谢分享。永远不要使用条件事件或转换,除非你非常高级并且了解底层机制。他们很容易欺骗
评论