【问题标题】:How to achieve that only a specified number of events are in the system (using simmer R package)?如何实现系统中只有指定数量的事件(使用 simmer R 包)?
【发布时间】:2019-10-04 18:58:56
【问题描述】:

我只是想模拟一个机器维修系统。 输入:5 台触发停机事件的机器,2 个维修人员处理停机事件

注意:一旦机器停机(由于故障而无法工作),add_generator 函数将不再生成“停机事件”,因为机器已经停机/损坏(因此无法产生任何停机事件!)。

到目前为止,这是我的简单方法(它有效,但没有上述限制):

```
library(simmer)

set.seed(42)

env <- simmer("andi_simu") %>% add_global("cnt",0)
env

cnt<-0
NUM_MACHINES<-6 # equals: max. number of down machines! (obviously)
BREAK_MEAN<-1/20 # 20 = MTTF
NUM_ENGINEERS<-3
REPAIR_TIME<-1.3 # in hours
engineers <- paste0("engineer", 1:NUM_ENGINEERS-1)

downevent <- trajectory("downevents' path") %>%
    ## add an intake activity 
    select(engineers, policy = "random") %>%
    set_attribute("start_time", function() {now(env)}) %>%
    seize_selected(1) %>%
    log_(function() {paste("Waited: ", now(env) - get_attribute(env, "start_time"))}) %>%
    timeout(function() rexp(1,REPAIR_TIME)) %>%
    release_selected(1)

for (i in engineers) env %>%
  add_resource(i, 1, 0) #, preemptive = TRUE) %>%

env %>%
  add_generator("downevent",downevent,function() rexp(1,BREAK_MEAN*NUM_MACHINES))

env %>% 
  run(80) %>%
  now()


result <-
  env %>%
  get_mon_arrivals() %>%
  transform(waiting_time = end_time - start_time - activity_time)

print(paste("Mean waiting time: ", mean(result$waiting_time)))
```

将不胜感激每一个提示如何做到这一点! 谢谢, 安德烈亚斯

【问题讨论】:

  • 嘿 Andreas82,也许可以看看 help center 提问。你的问题似乎太宽泛了。
  • 好吧,也许我解释得不够清楚:要点是“add_generator()”函数会生成具有相应分布的“downevents/failures”。 - 我需要的是:应该生成“故障”,但前提是故障数量不超过机器数量(实际触发这些故障)。这未在 Simmer R 帮助中指定...谢谢

标签: r simulation event-simulation


【解决方案1】:

我将使用capacity=NUM_MACHINESqueue_size=0 设置一个额外的资源,以确保每台机器只有一个活动故障(只会丢弃额外的事件)。当然,您必须在抓住工程师之前抓住这个资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多