如何在煨包的轨迹上编写循环

问题描述:

我试图用R的包Simmer模拟一个排队网络。但是,我很难将主循环合并到主轨迹中。一个简单的一个节点队列代码以下:如何在煨包的轨迹上编写循环

to_queue_1 <- trajectory() %>% 
for(i in 1:100){ 
    seize("nurse", 1) %>% 
    timeout(1) %>% 
    release("nurse", 1) 
} 

env <- simmer() 
add_resource("nurse",1) 
env %>% 
add_generator("arrival1_", to_queue_1, function() rexp(1, 1),mon=2) %>% 
run(200) 

乳宁轨迹函数后,它显示我认为“错误在用于(在我。)1:100:传递给4个参数‘的’这需要3” 。

实际的网络更加复杂,这需要一个环路,其中不同的节点进行通信。例如,我希望节点1流向节点2和3.节点2流向节点1和3.节点3流向节点1和2.唯一可能的出口是节点3.

在此先感谢。

rollback活动服务于这一目的:

library(simmer) 

to_queue_1 <- trajectory() %>% 
    seize("nurse", 1) %>% 
    timeout(1) %>% 
    release("nurse", 1) %>% 
    rollback(3, 100) 

env <- simmer() %>% 
    add_resource("nurse",1) %>% 
    add_generator("arrival1_", to_queue_1, function() rexp(1, 1), mon=2) %>% 
    run(200) 

3是活动的数量来回滚,并100是重复的次数。

+0

感谢您的回复。然而,是否有可能在rollback()中有功能参数?例如,释放“护士”后,我抓住“医生”并释放“医生”。之后,我可能不想使用回滚(3,100),而是用概率p回滚(1〜3,1),用概率q回滚(4〜6,1),并以概率1-p-q退出。基本上它是一个护士医生串联队列,而医生可以以一定的概率将病人送回护士。 –

+0

'rollback' activity有一个可选的参数'check',它覆盖第二个参数'times'(如果存在),所以每次到达'rollback'时,都会检查它是否应该返回。 如果您需要根据某种概率回退不同数量的活动,则可以使用“分支”并在其中放置多个“回滚”。 –

+0

非常感谢!我会检查! –