【发布时间】:2022-07-30 20:23:14
【问题描述】:
我正在尝试如下建模系统:
有两种不同类型的呼叫,到达率分别为 lambda1 和 lambda2,并由不同的熟练代理 S1 和 S2 应答。(S1=S2=1)。 S1 处理的类型 1 调用的处理时间为 mu1,S2 处理的类型 2 调用的处理时间为 mu2。
如果系统 1 中的服务器 S1 正忙(因此新的呼入呼叫必须在队列中等待),则等待呼叫被重定向到系统 2 中的服务器 S2,并以处理时间 mu3 完成。 服务器 S2 先应答来自系统 1 的呼叫,当系统 1 中的队列为空时,服务器 S2 再应答来自系统 2 的呼叫。
我多次尝试对环境进行建模,但这是我能想到的一切:
## Create arrivals
## rho = traffic load (0:1)
rho = 0.5
inter_arrival1 = rexp(500, 1.3*rho)
inter_arrival2 = rexp(500, 0.4*rho)
mu1 = 1
mu2= 1
mu3= 0.5
m = 1 # number of servers
## Queue model System 1
m.queue <- trajectory() %>%
seize("server", amount=1) %>%
timeout(function() rexp(1, mu1)) %>%
release("server", amount=1)
mean(mmc.df.arr$activity_time)
mmc.env <- simmer() %>%
add_resource("server", capacity=1, queue_size=Inf) %>%
add_generator("arrival", m.queue, function() rexp(500, 1.3*rho)) %>%
run(2000)
mmc.df.res <- get_mon_resources(mmc.env)
mmc.df.arr <- get_mon_arrivals(mmc.env)
mmc.df.arr
mmc.df.res
#Data dataframe system1
system1 <- data.frame("Call number"=(1:length(mmc.df.res$time)),
"Arrival time"=mmc.df.res$time,
"Arrival rate"= (system1$Call.number/system1$Arrival.time),
"Expected start"=mmc.df.arr$start_time,
"Expected end" = mmc.df.arr$end_time,
"Processing time"= mmc.df.arr$activity_time,
"Waiting time" = mmc.df.arr$start_time-mmc.df.res$time,
"Number of calls in the system" = mmc.df.res$system,
"Time spent in the system"=system1$Expected.end-system1$Arrival.time)
## Queue model System 2
m.queue2 <- trajectory() %>%
seize("server", amount=1) %>%
timeout(function() rexp(1, mu2)) %>%
release("server", amount=1)
mmc.env2 <- simmer() %>%
add_resource("server", capacity=1, queue_size=Inf) %>%
add_generator("arrival", m.queue, function() rexp(500, 0.4*rho)) %>%
run(2000)
mmc.df.res2 <- get_mon_resources(mmc.env2)
mmc.df.arr2 <- get_mon_arrivals(mmc.env2)
我对 R 很陌生,所以我正在努力寻找一种方法来识别系统 1 队列中等待的呼叫,并将它们优先重定向到系统 2 中的代理。如果有人能建议我摆脱困境,我将不胜感激。
【问题讨论】:
-
嗨@Luna你能分享用于运行代码的包
-
嗨@Isa,包是“simmer”和“simmer.plot”
标签: r queue priority-queue