R Simmer - «Количество ключей и значений не совпадают» - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь смоделировать систему JSQ (d) (join-самая короткая очередь из d выборочных очередей), но у меня возникают проблемы при выполнении моего кода. В этом случае предположим, что 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 голосов
/ 31 мая 2019

Атрибуты хранят одно значение. Почему бы вам не сделать выборку непосредственно в упражнении 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...