Самостоятельная политика приоритета очереди для моделирования с помощью Simmer in R

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

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

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

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

С уважением, Роос


person Roos    schedule 09.04.2020    source источник


Ответы (1)


Приоритеты статичны, но вы можете использовать хитрость, чтобы пересчитать все приоритеты на основе этого веса или других атрибутов. Идея состоит в том, что поступающие должны подписаться на сигнал, запускающий перерасчет приоритета, который должен быть повышен при поступлении, которое собирается освободить ресурс. Ключевым действием является 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") %>%
  # ...

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

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

person Iñaki Úcar    schedule 09.04.2020