Собственная политика приоритетов очереди для Simulation с Simmer в R - PullRequest
1 голос
/ 09 апреля 2020

Я хочу смоделировать процесс планирования в R. Я обнаружил, что мне нужно использовать пакет simmer для моделирования в R.

Когда задачи приходят в мое моделирование, они все приходят в «Ожидание». Список'. Задачи, которые должны быть запланированы, имеют разные приоритеты и характеристики. Решение, какое задание будет запланировано, должно зависеть от «веса». Этот вес зависит от количества дней, которые он ожидает в Списке ожидания, и приоритета. Но я могу найти только функцию приоритета, для которой требуется предварительно определенное значение приоритета (и мой вес становится выше, когда задача длиннее в Списке ожидания).

Я надеюсь, что возможно сделать функцию на основе информации в атрибутах прибытия, которая решает, какая задача должна быть запланирована. Это возможно?

Заранее спасибо.

С уважением, Roos

1 Ответ

0 голосов
/ 10 апреля 2020

Приоритеты: stati c, но есть способ, который вы можете сделать, чтобы пересчитать все приоритеты на основе этого веса или других атрибутов. Идея состоит в том, что поступающие должны подписаться на сигнал, который запускает пересчет приоритетов, который должен быть повышен при поступлении, которое собирается освободить ресурс. Ключевое действие - renege_if(), которое заставляет прибытие покинуть очередь и следовать за обработчиком сигнала. Например:

traj <- trajectory() %>%
  # ... 
  renege_if(
    "recompute priority",
    out = trajectory() %>%
      set_prioritization(function() {
        # check attributes using get_attribute()
        # then, return the new prioritization values
      }) %>%
      # go 2 steps back to renege_if
      rollback(2)) %>%
  seize("your resource") %>%
  renege_abort() %>%
  timeout(some_task) %>%
  # trigger this before releasing the resource
  send("recompute priority") %>%
  timeout(0) %>%
  release("your resource") %>%
  # ...

Каждый поступающий подписывается на сигнал «пересчитать приоритет» и пытается захватить ресурс. Те, кто находится в очереди, в конечном итоге получат сигнал, последуют за обработчиком сигнала, чтобы установить новый приоритет, а затем откатятся до той же ситуации, что и раньше: они снова подписываются на сигнал и входят в очередь. Но теперь ресурс освобожден, поэтому ресурс с наивысшим приоритетом захватит ресурс.

Обновление: см. этот раздел о реализации пользовательских политик обслуживания.

...