我正在尝试创建一个模拟模型,以描述医院药房的分配过程。我考虑了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)中所述的select命令。
答案 0 :(得分:0)
关于相关行:
log_(get_server_count("dispenser")) %>%
get_server_count
的帮助页面。它需要两个参数:1)仿真环境和2)资源的名称。您只提供了资源的名称。get_server_count
的输出是数字,但是log_
活动需要一个字符串,因此您需要对其进行转换。将1:3放在一起,该行应如下所示:
log_(function() paste(get_server_count(pharmacy, "dispenser"))) %>%
关于if
语句,不能在活动级别使用控制语句。如果根据某些情况需要不同的路径,请参见branch
活动。
最后,大约select
,simmer
和dplyr
都导出一个select
函数。如果在dplyr
之后加载simmer
,则select
指的是dplyr
函数,您应将simmer
的版本称为simmer::select
。 / p>