Simmer R软件包:模拟2名患者以恒定的到达时间到达

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

我意识到在R中使用Simmer软件包进行离散事件模拟的问题并不多,但我已经看完了所有的小插曲,找不到执行这项看似简单的任务的答案

我想模拟两个随机到达的客户,三角形分布的签入,固定的到达时间为10分钟。以下是我使用simmer创建的轨迹:

 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