【发布时间】:2019-05-04 16:34:28
【问题描述】:
我正在尝试创建一个模拟模型来描述医院药房的配药过程。我考虑了 3 个主要活动,即验证、分发和最终检查。如果需要,我将如何定义“集合资源”,即提供某些活动不仅可以使用一种资源,而且可以使用两种类型的资源?换句话说,如果没有可用的最终检查器(因为它们在过程中被使用),我怎么能让药剂师完成这项任务,如果它们可用?
请参阅下面的代码示例。我没有设法以任何方式在轨迹中使用 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')"
这很奇怪,因为我相信我使用了高级轨迹使用教程 (https://cran.r-project.org/web/packages/simmer/vignettes/simmer-03-trajectories.html) 中描述的选择命令。
【问题讨论】:
-
把上面的轨迹改成
标签: r