首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >between基于队列大小在pots之间重新分配资源

between基于队列大小在pots之间重新分配资源
EN

Stack Overflow用户
提问于 2021-04-14 09:45:38
回答 1查看 79关注 0票数 0

我有一个简单的门诊部服务的工作例子。有高优先级和低优先级的病人,每个人都有一个专门的诊所。高优先级门诊每天5个时段,低优先级诊所每天1个时段。下面是测试代码:

代码语言:javascript
复制
testmixcap <- simmer()

highpriority <- trajectory("high") %>%
  log_("High priority arrival - add to wl") %>%
  select("highpclinic") %>%
  seize_selected() %>%
  log_("Attend appointment") %>%
  timeout(1) %>%
  release_selected() %>%
  log_("Discharge")

lowpriority <- trajectory("low") %>%
  log_("Low priority arrival - add to wl") %>%
  select("lowpclinic") %>%
  seize_selected() %>%
  log_("Attend appointment") %>%
  timeout(1) %>%
  release_selected() %>%
  log_("Discharge")

testmixcap %>%
  add_generator("high",highpriority,at(1,1,1,2,2,3,3,3,4)) %>%
  add_generator("low",lowpriority,at(1,1,1,1,2,2,2,3,3,3,4,4,4,5,5,6)) %>%
  add_resource("highpclinic",5) %>%
  add_resource("lowpclinic",1) 

testmixcap %>%
  run(until = 100)

testmixcap %>%
  get_mon_resources()

我的问题是,在不需要高优先级门诊时段(或不需要全部5个)的日子里,有什么方法可以告诉将其余的时段释放给低优先级资源吗?例如,高优先级诊所需要2名患者,但剩下的3名患者被添加到低优先级诊所,并通过4名患者进行治疗?

然后,诊所将需要在第二天重新调整到正常的容量,但我认为我可以用一个时间表,而不是固定的优先次序。

我认为答案在于使用信号,但我就是不能把我的头放在他们的头上。我亦曾考虑将两间诊所合并为一间诊所,并以优先次序分配给较优先的病人。但这意味着,可能会有几天,我们看到零低优先病人,这是非常不可能的。

任何感激的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-20 13:12:31

我设法找到了一个使用全局变量的解决方案,并找到了一个假的到达生成器,它充当了一个日常监控系统,用于监测何时将过剩的容量分配给了一个高优先级的诊所。

代码语言:javascript
复制
library(simmer)
library(dplyr)

testmixcap <- simmer()

highpriority <- trajectory("high") %>%
  log_("High priority arrival - add to wl") %>%
  select("highpclinic") %>%
  seize_selected() %>%
  set_global("highpseentoday",1,"+") %>%
  log_("Attend appointment") %>%
  timeout(1) %>%
  release_selected() %>%
  log_("Discharge")

lowpriority <- trajectory("low") %>%
  log_("Low priority arrival - add to wl") %>%
  select("lowpclinic") %>%
  seize_selected() %>%
  log_("Attend appointment") %>%
  timeout(1) %>%
  release_selected() %>%
  log_("Discharge")

cap_monitor <- trajectory() %>%
  set_global("highpseentoday",0) %>% 
  timeout(0.1) %>%
  log_("Check if all today's slots used in high priority clinic") %>%
  branch(
    function(){
      seentoday <- get_global(testmixcap,"highpseentoday")
      highpcap <- get_capacity(testmixcap,"highpclinic")
      if(seentoday < highpcap) {1} else {0}
    }
    ,continue = TRUE
    ,trajectory() %>% set_capacity("lowpclinic",value = function(){
      seentoday <- get_global(testmixcap,"highpseentoday")
      highpcap <- get_capacity(testmixcap,"highpclinic")
      highpcap - seentoday
    },mod = "+")
  ) %>%
  timeout(0.9) %>%
  rollback(Inf)


testmixcap %>%
  add_generator("high",highpriority,at(1,1,1,2,2,3,3,3,4),mon = 2) %>%
  add_generator("low",lowpriority,at(1,1,1,1,2,2,2,3,3,3,4,4,4,5,5,6)) %>%
  add_resource("highpclinic",5) %>%
  add_resource("lowpclinic",schedule(c(1,2),c(1,1),2)) %>% 
  add_generator("monitor",cap_monitor,at(1))

testmixcap %>%
  run(until = 100)

testmixcap %>%
  get_mon_resources()

testmixcap %>%
  get_mon_arrivals()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67089345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档