Simmer R软件包:模拟2名患者以恒定的到达时间到达
我意识到在R中使用Simmer软件包进行离散事件模拟的问题并不多,但我已经看完了所有的小插曲,找不到执行这项看似简单的任务的答案 我想模拟两个随机到达的客户,三角形分布的签入,固定的到达时间为10分钟。以下是我使用simmer创建的轨迹:Simmer R软件包:模拟2名患者以恒定的到达时间到达,r,event-simulation,R,Event Simulation,我意识到在R中使用Simmer软件包进行离散事件模拟的问题并不多,但我已经看完了所有的小插曲,找不到执行这项看似简单的任务的答案 我想模拟两个随机到达的客户,三角形分布的签入,固定的到达时间为10分钟。以下是我使用simmer创建的轨迹: library(simmer) traj <- trajectory("admin") %>% seize("check_in") %>% timeout(function() rtriangle(a=1, b=3, c
library(simmer)
traj <- trajectory("admin") %>%
seize("check_in") %>%
timeout(function() rtriangle(a=1, b=3, c=2)) %>%
release("check_in")
outpat_clinic <- simmer() %>%
add_generator("customer", traj, function(){c(0,rep(20,5),-1)}) %>%
add_resource("check_in", 1)
对此有任何见解都将不胜感激。我自己刚刚开始玩这个漂亮的软件包。您是否可以为同一轨迹添加另一个
add_生成器
# with inter-arrival time = 10 mins
clinic <- simmer() %>%
add_generator("customer_1", traj, function(){c(0,rep(10,5),-1)}) %>%
add_generator("customer_2", traj, function(){c(0,rep(10,5),-1)}) %>%
add_resource("check_in", 1)
另外,我认为你的
轨迹
在随机三角距离之后有超时
,而不是到达。还有一些关于组合不同轨迹的信息。我自己刚开始玩这个漂亮的包。您是否可以为同一轨迹添加另一个add_生成器
# with inter-arrival time = 10 mins
clinic <- simmer() %>%
add_generator("customer_1", traj, function(){c(0,rep(10,5),-1)}) %>%
add_generator("customer_2", traj, function(){c(0,rep(10,5),-1)}) %>%
add_resource("check_in", 1)
另外,我认为你的
轨迹
在随机三角距离之后有超时
,而不是到达。还有一些关于组合不同轨迹的信息。在这种情况下,鉴于到达间隔时间是确定的,您可以设置另一个生成器。但是,如果要批量生成n
,最常用的方法是插入最多n-1
零。例如,随机到达的3位客户:
library(simmer)
traj <- trajectory() %>%
timeout(1)
simmer() %>%
add_generator("dummy", traj, function() c(rexp(1, 1), 0, 0)) %>%
run(4) %>%
get_mon_arrivals()
#> name start_time end_time activity_time finished replication
#> 1 dummy0 0.4226528 1.422653 1 TRUE 1
#> 2 dummy1 0.4226528 1.422653 1 TRUE 1
#> 3 dummy2 0.4226528 1.422653 1 TRUE 1
#> 4 dummy3 2.4100059 3.410006 1 TRUE 1
#> 5 dummy4 2.4100059 3.410006 1 TRUE 1
#> 6 dummy5 2.4100059 3.410006 1 TRUE 1
#> 7 dummy6 2.6899432 3.689943 1 TRUE 1
#> 8 dummy7 2.6899432 3.689943 1 TRUE 1
#> 9 dummy8 2.6899432 3.689943 1 TRUE 1
在这种情况下,假设到达间隔时间是确定的,您可以设置另一个生成器。但是,如果要批量生成
n
,最常用的方法是插入最多n-1
零。例如,随机到达的3位客户:
library(simmer)
traj <- trajectory() %>%
timeout(1)
simmer() %>%
add_generator("dummy", traj, function() c(rexp(1, 1), 0, 0)) %>%
run(4) %>%
get_mon_arrivals()
#> name start_time end_time activity_time finished replication
#> 1 dummy0 0.4226528 1.422653 1 TRUE 1
#> 2 dummy1 0.4226528 1.422653 1 TRUE 1
#> 3 dummy2 0.4226528 1.422653 1 TRUE 1
#> 4 dummy3 2.4100059 3.410006 1 TRUE 1
#> 5 dummy4 2.4100059 3.410006 1 TRUE 1
#> 6 dummy5 2.4100059 3.410006 1 TRUE 1
#> 7 dummy6 2.6899432 3.689943 1 TRUE 1
#> 8 dummy7 2.6899432 3.689943 1 TRUE 1
#> 9 dummy8 2.6899432 3.689943 1 TRUE 1
你解决这个问题了吗?simmer的在线板非常棒——通过谷歌运行,你可能会更快地得到答案。出于好奇,您是否总是需要两名患者同时到达?这是为了课堂练习,因此规定两名患者同时到达,且到达时间固定;我不认为这在现实世界的模型中很常见。你解决这个问题了吗?simmer的在线板非常棒——通过谷歌运行,你可能会更快地得到答案。出于好奇,您是否总是需要两名患者同时到达?这是为了课堂练习,因此规定两名患者同时到达,且到达时间固定;我不认为这在现实世界的模型中很常见。谢谢你的回答。我将比较竞技场模拟得到的结果,看看这是否会产生一个类似的答案,并重复很多次(我不确定如何对齐种子值,因此会略有不同)。很抱歉,我最初的描述很繁琐。有一个固定的到达时间间隔,但是签入延迟是三角分布的,所以你的代码应该是我所要写的。再次感谢。我还没有使用竞技场,所以不知道如何对齐那里的种子。但是如果你使用Python(例如),这里有一些关于对齐种子值的信息。谢谢你的回答。我将比较竞技场模拟得到的结果,看看这是否会产生一个类似的答案,并重复很多次(我不确定如何对齐种子值,因此会略有不同)。很抱歉,我最初的描述很繁琐。有一个固定的到达时间间隔,但是签入延迟是三角分布的,所以你的代码应该是我所要写的。再次感谢。我还没有使用竞技场,所以不知道如何对齐那里的种子。但是如果你使用Python(例如),这里有一些关于调整种子值的信息。感谢你为DES制作一个优秀的R包所做的所有工作和你的回复。为了验证我的理解,您为到达固定到达时间20的两个客户提出的建议如下:`library(simmer)traj%jack(“check_in”)%%>%timeout(function()rtriangle(a=1,b=3,c=2))%%>%release(“check_in”)outpat_clinic%add_generator(“customer”,traj,function(){c(rep(20,5),0,-1)})%%>%添加资源(“签入”,1)`不完全正确。这将是
c(0,0,rep(c(20,0),5),-1)
。感谢您为DES制作出色的R包所做的所有工作和您的回复。为了验证我的理解,您为到达固定到达时间20的两个客户提出的建议如下:`library(simmer)traj%jack(“check_in”)%%>%timeout(function()rtriangle(a=1,b=3,c=2))%%>%release(“check_in”)outpat_clinic%add_generator(“customer”,traj,function(){c(rep(20,5),0,-1)})%%>%添加资源(“签入”,1)`不完全正确。它将是c(0,0,rep(c(20,0),5),-1)
。
simmer() %>%
add_generator("dummy", traj, function() c(rexp(1, 1), rep(0, rpois(1, 2)))) %>%
run(4) %>%
get_mon_arrivals()
#> name start_time end_time activity_time finished replication
#> 1 dummy0 0.6791102 1.67911 1 TRUE 1
#> 2 dummy1 2.7856000 3.78560 1 TRUE 1
#> 3 dummy2 2.7856000 3.78560 1 TRUE 1
#> 4 dummy3 2.7856000 3.78560 1 TRUE 1