【发布时间】:2021-10-07 19:52:33
【问题描述】:
美好的一天!
请帮助我了解延迟块在 AnyLogic 中的工作原理。假设我们处理一个多通道传输网络。 该模型有 2 个来源。假设这些源每 1 秒生成一次数据包。来自不同来源的数据包具有不同的优先级,需要提供不同数量的资源(分别设置了 Priority 和 Resource_quantity 参数)。模型中的 Priority_queue 是基于优先级的。所提出的模型根据通道中的资源可用性将数据包放入通道中。首先,它尝试将数据包放入第一个通道。如果没有可用资源,它将数据包放入第二个通道。如果两个通道都没有资源,则等待(通过 Hold 块实现)。
我注意到,如果我使用静态参数(例如 2 秒)在块 delay1 和 delay2 中设置延迟,则模型可以正常工作。但是后来我尝试在模型根本没有考虑到这些块之前计算它。在这种情况下,模型可以毫无延迟地工作。 我在这里做错了什么?
我将不胜感激。
延迟在退出块中计算并写入代理的变量延迟。我尝试在计算延迟后立即按照@Jaco-Ben 的建议添加 traceln(agent.delay) ,结果显示为零。在这种情况下,它也不会占用资源:(
【问题讨论】:
-
你在延迟块里写了什么?
-
我假设您的代理有一个名为 delay 的变量,您在延迟块中使用它?我建议您在计算到达代理
traceln(agent.delay延迟的位置添加一个跟踪,看看您的计算是否可能导致0 -
@Felipe 在延迟块中,我在延迟时间中写了“agent.delay”。容量是最大的。仅此而已
-
@Jaco-Ben,你是对的。延迟在Exit 块中计算并写入代理的变量delay。我尝试在计算延迟后立即添加 traceln(agent.delay) 并且它显示为零...:但是,在 Exit 块中我还写了 Exit 块的结果i>agent.delay 到一个名为 delays 的数据库中。它表明延迟计算正确。为什么?
-
@EkaterinaPakulova,感谢您的确认。希望我的帮助值得回答,而不仅仅是评论。数据库在使用它们时有一些细微差别,而是确保您的公式始终使用 traceln 生成一个数字,(在您保存到数据库之前)
标签: delay priority-queue anylogic