R Simmer-“键和值的数量不匹配”

时间:2019-05-30 03:18:41

标签: r queue queueing

我正在尝试模拟JSQ(d)(d个采样队列的join-shortest-queue)系统,但是在执行代码时遇到麻烦。在这种情况下,让我们假设d = 2。我希望确定到达时的工作规模(“ X”的值),以及要选择要采样的2个队列和“ JSQ-ed”的选择(这可能会有所不同,尽管出于我的目的,这超出了最低要求)工作示例,必须在到达时确定这些示例)。

library(simmer)
set.seed(1337)

sim <- simmer("sim")

queues <- vector(length=1000)
for (i in 1:1000) {
  queues[i] <- paste0("q_",i)
}

queueing_system <- trajectory() %>%
  set_attribute("X", function() rexp(1)) %>%
  set_attribute("d", function() sample(1000,2)) %>%
  select(function() queues[get_attribute(sim, "d")], policy="shortest-queue") %>%
  seize_selected()%>%
  timeout(function() get_attribute(sim, "X")*(rpois(1, 1)+1)) %>%
  release_selected()


for (i in 1:1000) {
  sim %>%
    add_resource(queues[i], 1)
}
sim %>%
  add_generator("path", queueing_system, function() rexp(1,1)) %>%
  run(400) %>%
  now()

我收到

Error: 'path0' at 0.15 in [SetAttribute]->SetAttribute->[Select]:
 number of keys and values don't match

似乎是问题所在,我该如何解决?

1 个答案:

答案 0 :(得分:0)

属性存储单个值。您为什么不直接在select活动中进行采样?即

queueing_system <- trajectory() %>%
  set_attribute("X", function() rexp(1)) %>%
  select(function() queues[sample(1000, 2)], policy="shortest-queue") %>%
  seize_selected()%>%
  timeout(function() get_attribute(sim, "X")*(rpois(1, 1)+1)) %>%
  release_selected()

我也将就地调用rexp(1),而不是定义X