我正在尝试为对象分配过程编写一个程序,因此我将对实际过程进行一些概述,然后解释我的主要挂起的位置。
因此,对象进入系统,系统中有多个工作人员/服务器以先进先出的方式处理对象。
由于每个工作人员都有一个特定/唯一的时间表,我将时间段分成每周30分钟的时间间隔(每小时2个时间间隔*一天中24小时*一周中7天=每周336个时间间隔)。
我的问题来自时间独立。
实际上,在某些或大多数班次中,都会有这些物品的遗留物。因为,无论什么都没有在时间间隔内完成,一个应该延续到时间间隔二,但我无法找到一种方法来做到这一点。所以对我来说,每次间隔都是一个新鲜的板岩,这是不好的!
如果有人能帮助我找到解决方法,我将非常感激!我将附上我目前拥有的代码。如果这对于社区来说似乎过于“个人化”,对社区没什么好处,我理解,如果他们能够解决我的问题,愿意补偿某人的时间:)除非我不被允许要说,在这种情况下划伤那个想法。
processobjects <- function(workers = 100,t.end = 30,Ta , Ts = 40.59/60){
t.clock <- 0 # sim time
t1 <- 0 # time for next arrival
t2 <- rep(t.end,workers) # time for next departure
tn <- rep(t.clock,workers) # tmp var for last event time
tb <- rep(0,workers) # tmp var for last busy-time start
n <- 0 # number in system
s <- rep(0,workers) # cumulative number-time product
b <- rep(0,workers) # total busy time
c <- 0 # total completions
qc <- 0 # plot instantaneous queue size
tc <- 0 # plot time delta
plotSamples <- 100
set.seed(1)
workersavailability <-rep(0,workers)
arrive11 <- list()
while (t.clock < t.end) {
arrive11 <- c(arrive11,list(t1,t2))
for(i in 1:workers){
if (t1 < t2[i]) { # arrival event
if ( workersavailability[i] == 1 & 0 %in% workersavailability){
next
}
workersavailability[i] = 1
t.clock <- t1
n <- n + 1 # number in system
t1 <- t.clock + rexp(1, 1/Ta) # time for next arrival
# cat("t1 arrive is ", t1,"\n")
if(n <= workers & n != 0) {
t2[i] <- t.clock + rexp(1, 1/Ts) # exponential interarrival period
}
break
} else { # departure event
t.clock <- t2[i]
n <- n - 1
c <- c + 1
if (n >= workers) {
t2[i] <- t.clock + rexp(1, 1/Ts) # exponential service period
}
else {
t2[i] <- t.end
workersavailability[i] = 0
break
}
}
}
}
print (c)
}
# u <- b/t.clock # utilization B/T
# N <- s/t.clock # mean queue length (see the Load Average notes)
# x <- c/t.clock # mean throughput C/T
# r <- N/x # mean residence time (from Little's law: Q = XR)
# q <- sum(qc)/max(tc) # estimated queue length for plot
library(xlsx)
ccu <- read.xlsx("objects.xlsx",sheetIndex = 1,header = F)
ccuarrivalrate <- ccu/30
workers
for (i in 1 : 336){
processobjects(Ta = 1/ccuarrivalrate[i,1])
}