Я пытаюсь создать имитационную модель, которая описывает процесс выдачи в аптеке больницы.Я рассматриваю три основных вида деятельности: проверка, выдача и окончательная проверка.Как я смогу определить «объединенный ресурс», то есть предусмотреть для определенных действий возможность использовать не только один, но и два типа ресурсов, если это необходимо?Другими словами, если нет доступных окончательных контролеров (потому что они используются в процессе), как я мог бы разрешить фармацевтам выполнять эту задачу, если они доступны?
См. Пример кода ниже.Мне никак не удавалось получить доступ к количеству доступных в данный момент ресурсов времени с помощью get_server_count в траектории.Я обычно получаю сообщения об ошибках в виде:
Error in UseMethod("get_server_count") :
no applicable method for 'get_server_count' applied to an object of class "character"
Я также пытался использовать оператор if в траектории, чтобы разрешить использование резервного ресурса, если основной ресурс недоступен.Это привело меня к тому же и другому сообщению:
In if (.) get_server_count("dispenser") > 0 else { :
the condition has length > 1 and only the first element will be used
См. Пример кода:
library(simmer)
library(dplyr)
set.seed(42)
#Defining Simmer environment:
pharmacy <- simmer("Dispensing Process")
#Defining 3 activities, i.e. verifying, dispensing, and final checking, and their
#durations:
dispProcess <- trajectory("dispensing process") %>%
seize("pharmacist", 1) %>%
timeout(5) %>%
release("pharmacist", 1) %>%
log_(get_server_count("dispenser")) %>%
seize("dispenser", 1) %>%
timeout(15) %>%
release("dispenser", 1) %>%
seize("final checker", 1) %>%
timeout(5) %>%
release("final checker", 1)
#Defining number of resources (i.e. staff) available:
pharmacy %>%
add_resource("pharmacist", 2) %>%
add_resource("dispenser", 4) %>%
add_resource("final checker", 2) %>%
add_generator("prescription", dispProcess, function() {10}, mon = 2)
#Defining length of simulation run:
pharmacy %>% run(until = 400)
pharmacy %>% get_mon_arrivals() %>% print()
С кодом, приведенным выше, я ожидал бы количество бесплатных ресурсов "распределителя"в этот момент времени моделирования, которое будет показано.Этого не произошло, как описано выше.
Как я могу получить доступ к этой информации в траектории?Могу ли я использовать оператор if для захвата определенных типов ресурсов в зависимости от их доступности?
При обмене кода траектории на
dispProcess <- trajectory("dispensing process") %>%
seize("pharmacist", 1) %>%
timeout(5) %>%
release("pharmacist", 1) %>%
log_(get_server_count("dispenser")) %>%
seize("dispenser", 1) %>%
timeout(15) %>%
release("dispenser", 1) %>%
select(resources = c("pharmacist","final checker"), policy = "shortest-queue") %>%
seize_selected(amount = 1) %>%
timeout(5) %>%
release_selected(amount = 1)
появилось следующее сообщение об ошибке:
Error in UseMethod("select_") : no applicable method for 'select_' applied to an object of class "c('trajectory', 'R6')"
Это странно, поскольку, как мне кажется, я использовал команду select, как описано в руководстве по расширенному использованию траектории (https://cran.r -project.org / web / packages / simmer / vignettes / simmer-03-trajectories.html ).