Как установить условные тарифы обслуживания в пакете simmer в R для моделирования дискретных событий? - PullRequest
1 голос
/ 21 марта 2020

Я пытаюсь смоделировать отказ и ремонт 2 машин с 1 доступным ресурсом (ремонтником), что я могу сделать следующим образом:

reset(env.ex3)
env.ex3 <- simmer("FailureRepair ex3")

lambda1 <- 0.01 # Failure rate
lambda2 <- 0.02
mu1 <- 0.2 # Repair rate
mu2 <- 0.4

traj <- trajectory() %>%
  seize("Repairman") %>%
  timeout(function() rexp(1, mu1)) %>%
  release("Repairman")

env.ex3 %>%
  add_resource("Repairman", queue_size = Inf) %>%
  add_generator("failureOne", traj, function() rexp(1, lambda1)) %>%
  add_generator("failureTwo", traj, function() rexp(1, lambda2)) %>%
  run(until = 1000000)

env.ex3 %>% get_mon_arrivals(per_resource = T) 

Обратите внимание, что я использовал только одну траекторию для ресурса с mu1 , Я хотел бы расширить эту модель так, чтобы «faultOne» и «faultTwo» имели разные скорости обслуживания (mu1 и mu2 соответственно) от одного и того же ресурса. Таким образом, основное предположение заключается в том, что если ресурс занят обслуживанием сбоя, другой сбой должен ждать, пока ресурс не станет доступным.

Если я использую две отдельные траектории, согласно моему пониманию, это будет означать, что есть два отдельных ресурса для восстановления, и если время отказов двух машин перекрывается, то они будут ремонтироваться одновременно, что я не хочу модель.

Может кто-нибудь помочь, пожалуйста?

1 Ответ

2 голосов
/ 23 марта 2020

Вы определили одну единицу «ремонтника», и вы можете использовать этот ресурс с любого количества траекторий: если один получает ресурс, другие ждут. Используйте две траектории:

traj1 <- trajectory() %>%
  seize("Repairman") %>%
  timeout(function() rexp(1, mu1)) %>%
  release("Repairman")

traj2 <- trajectory() %>%
  seize("Repairman") %>%
  timeout(function() rexp(1, mu2)) %>%
  release("Repairman")

env.fr2 %>%
  add_resource("Repairman", queue_size = Inf) %>%
  add_generator("M1.failure", traj1, M1.running) %>%
  add_generator("M2.failure", traj2, M2.running) %>%
  run(100000)

...