AnyLogic中的计算动态延迟
Posted
技术标签:
【中文标题】AnyLogic中的计算动态延迟【英文标题】:Calculation dynamic delay in AnyLogic 【发布时间】: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 生成一个数字,(在您保存到数据库之前)
【参考方案1】:
感谢 @Jaco-Ben 提供有用的 cmets。
延迟为零,因为
Java 中除法的结果取决于操作数的类型。 如果两个操作数都是整数,则结果也将是整数。到 让 Java 在 至少有一个操作数必须是实数类型。
所以这是我的问题。
为了解决这个问题,我将double
分配给了其中一个操作数:
agent.delay = (double)agent.Resource_quantity/ChannelResources1.idle();
但是,奇怪的是为什么它在数据库中显示正确的值。
【讨论】:
以上是关于AnyLogic中的计算动态延迟的主要内容,如果未能解决你的问题,请参考以下文章
表格数据从 Excel 输入到 Anylogic 中的系统动态库存
anylogic中的Agent连接: 我在使用Anylogic建立Agent模型时,在系统开始动态运行时,加入Agent,想让新加