anylogic - 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 似乎在源元素中存在错误。我已经使用源中的“强制推送”和直接连接到源的 selectOutput 对系统进行了改造。如果队列已满,则 selectOutput 将代理路由到第二个(丢弃)接收器。像这样:NewModel
现在测量是正确的。
编辑:我收到来自 Anylogic 支持的消息: “实际上,如果队列已满,则销毁代理的 Source 块在内部存储 1 个代理(如果代理无法退出)。只有第二个和后续代理被销毁。在这种情况下,模型的行为就像有容量= 1的队列,然后进入容量= 2的队列,最后是Delay和Sink。这是Source块的旧功能,由于拉协议而出现。我已经发布了任务供开发人员实现立即销毁无法退出的代理的选项。”
推荐阅读
- android - 将 BarCode Scanner 与 react-native 应用程序连接起来
- r - data.table 的意外结果 fintersect all = TRUE
- python - 使用 Django 和 Vue.js 显示按其所属类别(看板样式)分组的模型项
- javascript - React Leaflet - 让 Tiles 离线
- postgresql - 每个用户的 postgresql message_id 自动递增
- python - 在浏览器调试工具中发现的 Websocket 消息(接收和发送)不是人类可读的
- react-native - 如何自定义 textInput 以确保用户只能添加数字,不能添加逗号、点或其他符号?
- python - 在 Python 中使用不同的比例缩放元组
- arrays - C 数组分配问题 / CS50 分数计算器
- python - 仅保留数据框中每行的前 N 个值,并将其他值设置为零