Anylogic M / M / 2 / [4]系统未正确模拟?

时间:2018-06-05 14:16:29

标签: anylogic

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

系统如下:

流入Poisson流(指数分布),每2分钟1个代理的速率。

容量为2的队列。

两(2)台服务器,每个服务器每3分钟服务一次。

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

在Anylogic中我已经像这样建模了系统: Model

使用到达间隔时间' 2'指定源元素。并且代理在无法进入系统时被销毁(因为队列已满)。 source 编辑:正如费利佩指出的那样,应该是指数(0.5)"而不仅仅是" 2&#34 ;;然而,这并没有解决问题。测量结果仍然是错误的:现在队列的平均长度为0.55而不是0.413(应该是),系统现在的平均代理数为1.92对1.727(应该是),平均丢失率为8.67%vs 12.4%(应该是)。

指定队列容量' 2'和FIFO机制。 queue

延迟元素用容量' 2'指定。延迟持续时间为指数(1.0 / 3.0)'分钟。 delay

水槽是普通香草。 sink

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

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

可以通过“弃牌”轻松计算损失率。行动在 '源' element:" CountLost ++;" (' CountLost'是我创建的变量)然后我可以比较' CountLost'变量与创建的完整代理数量相对应。

我的错误是什么?

非常感谢你的帮助! 马丁

EDIT2:Felipe要求进行计算:Calculation

1 个答案:

答案 0 :(得分:0)

好的,我解开了这个谜。 事实上,Anylogic在使用时似乎在源元素中有一个错误 “无法退出的代理商:被销毁”。 我使用源中的“强制推送”和直接连接到源的selectOutput重新构建了系统。如果队列已满,selectOutput将代理路由到第二个(discard)-sink。 像这样:NewModel

现在测量结果是正确的。

编辑:我收到了Anylogic支持部门的消息: “实际上,如果队列已满,则销毁代理的源块会在内部存储1个代理(如果代理无法退出)。只有第二个和后续代理被销毁。在这种情况下,模型的行为类似于容量= 1的队列,然后去容量= 2的队列,最后是Delay和Sink。这是源块的旧功能,它是由于pull协议而发生的。我已经发布了开发人员实现该选项的任务,即时销毁不能代理的代理退出“。