首页 > 解决方案 > Anylogic M/M/2/[4] 系统模拟不正确?

问题描述

我傻眼了,为什么我不能正确模拟一个简单的队列系统。

系统如下:

以每 2 分钟 1 个代理的速率流入泊松流(指数分布)。

容量为 2 的队列。

两 (2) 台服务器,每台服务器每 3 分钟有 1 名代理。

如果系统已满(服务器和队列中的两个位置都被占用),新的代理不会进入系统而是被销毁。

在 Anylogic 中,我对系统进行了如下建模: 模型

源元素被指定为间隔时间“2”,并且代理在无法进入系统时被销毁(因为队列已满)。来源 编辑:正如Felipe指出的那样,它应该是“指数(0.5)”而不是简单的“2”;然而这并不能解决问题。测量结果仍然错误:队列现在的平均长度为 0.55 对 0.413(应该是),系统现在的平均代理数量是 1.92 对 1.727(应该是),平均损失率为 8.67% 对. 12.4 %(应该是)。

队列用容量“2”和先进先出机制指定。队列

延迟元素指定为容量“2”和延迟持续时间“指数(1.0/3.0)”分钟。延迟

水槽是普通的香草。下沉

现在,队列理论告诉我们,我们期望在系统中观察到 1.727 的有限平均代理数。并且队列中的限制平均代理数为 0.413。平均损失率(代理销毁)为 12.4%。

但是当我用 Anylogic 模拟系统时,我得到了不同的结果。奇怪的是,队列中代理的平均值是正确的 0.413。但是任何逻辑模拟中的平均损失率约为 1.7%,系统中代理的平均值约为 1.83。

丢失率可以通过“源”元素中的“丢弃”操作轻松计算:“CountLost++;” (“CountLost”是我创建的变量)然后我可以将“CountLost”变量与创建的代理的完整数量进行比较。

我的错误是什么?

非常感谢您的帮助!马丁

EDIT2:费利佩要求计算:计算

标签: anylogic

解决方案


好的,我解开了这个谜。实际上,在使用“无法退出的代理:被销毁”时,Anylogic 似乎在源元素中存在错误。我已经使用源中的“强制推送”和直接连接到源的 selectOutput 对系统进行了改造。如果队列已满,则 selectOutput 将代理路由到第二个(丢弃)接收器。像这样:NewModel

现在测量是正确的。

编辑:我收到来自 Anylogic 支持的消息: “实际上,如果队列已满,则销毁代理的 Source 块在内部存储 1 个代理(如果代理无法退出)。只有第二个和后续代理被销毁。在这种情况下,模型的行为就像有容量= 1的队列,然后进入容量= 2的队列,最后是Delay和Sink。这是Source块的旧功能,由于拉协议而出现。我已经发布了任务供开发人员实现立即销毁无法退出的代理的选项。”


推荐阅读