【问题标题】:Priority queue from 2 sources in AnyLogicAnyLogic 中来自 2 个源的优先级队列
【发布时间】:2021-10-05 02:56:09
【问题描述】:

美好的一天!我尝试在 AnyLogic 8.7.6 中构建网络模型。我有 2 个具有不同优先级的源(来自第一个源的数据包获得优先级 2,来自第二个源的数据包获得优先级 1)。来自源的数据包被传输到队列。队列应该按优先级对它们进行排序。

优先级参数在 Agents at the Sources 中定义。

我做了一个简单的实验。源 1 每秒生成 1 个代理,源 2 每秒生成 10 个代理。我们看到队列是空的:(

我不知道为什么。队列不会根据它们的优先级对它们进行排序。

附:抱歉,我有俄文版的 Anylogic。

【问题讨论】:

  • 如果队列中没有任何内容,我们如何知道排序是否不起作用?请删除队列中的所有连接,以便建立一个队列...如果您有两个相互连接的队列,代理将进入第一个并立即转到下一个队列...所以他们永远不会优先级,因为他们从不在第一个队列中排队,我假设您设置了优先级。
  • 谢谢!我明白我的问题是什么。队列无法对任何内容进行排序,因为它不收集任何内容。代理立即离开队列。如此简单....然而,我的代理数量以 39 开头。不是 1....
  • (这是我在原始答案中的第一个陈述;-))您可以忽略代理编号,也可以创建自己的函数并选择要显示的内容。在我更新的问题中检查我的最终图片。 (如果我的回答帮助你解决了你的问题记得采纳)

标签: priority-queue anylogic


【解决方案1】:

如果没有看到队列容量,如果您有两个相互连接的队列,代理将进入第一个队列并立即进入下一个队列......所以他们永远不会被优先考虑,因为他们永远不会在第一个队列中排队,我在那里假设您设置了优先级。

尝试删除两个队列之间的连接,然后查看代理是否根据您的优先级排序。

请看下面的小测试

我有一个带有变量 priority 的自定义代理类型和一个带有 2 个源和一个队列的简单流程图

根据您的示例,我将 Source1 中生成的代理的优先级变量设置为 2,而在源 2 中它们设置为 1。

在队列中,我将我的排序设置为基于优先级,并告诉块使用代理内部的优先级变量(越高优先级越高)

例如,我将 source1 设置为每分钟生成代理,将 source 2 设置为每秒生成。

期望一旦生成了来自 source1 的代理,它就会跳入队列并排在第一位

当我运行模型并单击查看队列的详细信息时,我可以看到来自 source1 的代理一经创建,它就会跳线。

您始终可以创建自定义 toString() 函数来确定单击队列块时必须显示的内容

【讨论】:

  • 感谢您的回答。不,它不起作用。我只留下两个源,将它们与队列连接,然后将队列与接收器连接。源生成具有参数“优先级”的代理。队列的排序由该参数进行。队列的容量是无限的。
  • 感谢您的反馈,我用一个非常简单的示例更新了我的答案。我希望这可以帮助您找到可行的解决方案来解决您的问题。如果这仍然没有帮助,请提供您的块的优先级详细信息,类似于我所做的
  • 而更有趣的是队列可以对同时生成的代理内的数据包进行排序。因此,如果我将两个来源更改为一个来源。此 Source 通过 uniform_discr(1,5) 生成代理,队列在一个创建时间戳内对数据包进行排序。
  • 每次有新坐席到达队列时,队列都会对坐席进行排序。不确定您的问题现在是否已解决?
  • 我已经更新了任务。不,它仍然不起作用:(
猜你喜欢
  • 2018-05-06
  • 2021-07-28
  • 1970-01-01
  • 2021-01-24
  • 2011-12-20
  • 2012-03-03
  • 2020-03-02
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多