消除时间间隔独立性(AKA创建遗留)

时间:2016-11-14 15:53:12

标签: r time

我正在尝试为对象分配过程编写一个程序,因此我将对实际过程进行一些概述,然后解释我的主要挂起的位置。 因此,对象进入系统,系统中有多个工作人员/服务器以先进先出的方式处理对象。
由于每个工作人员都有一个特定/唯一的时间表,我将时间段分成每周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])
}

0 个答案:

没有答案