这是我的代码,我解释了一些我认为存在问题的部分。
set.seed(5623)
t_llegada <- (1:30)
t_viaje <- (1:30)
t_intervalo<- (1:30)
#Prob. morning
pllegadaM <- rexp(30,rate=0.81) #Prob
pviajeM <- rexp(30,rate=30.47) #Prob
pinterM<- rexp(30,rate=0.12) #Prob
#Prob afternoon
pllegadaT <- rexp(30,rate=0.096) #Prob
pviajeT <- rexp(30,rate=31.80) #Prob
pinterT<- rexp(30,rate=0.97) #Prob
#Prob night
pllegadaN <- rexp(30,rate=0.12) #Prob
pviajeN <- rexp(30,rate=32.12) #Prob
pinterN<- rexp(30,rate=0.9) #Prob
sim <-NULL
##Dimension variables:
minutos.dia<-numeric(600)
min.llegada <- minutos.dia
min.salida <- minutos.dia
tinterval <- minutos.dia
tservicio.llegada<-minutos.dia
##Sample time with probs
tintervalM <- sample(t_intervalo,size=1, replace=TRUE, prob= pinterM)
tllegadasM <- sample(t_llegada,size=1,replace = TRUE,prob=pllegadaM)
tviajeM <- sample(t_viaje,size=1,replace = TRUE,prob=pviajeM)
tintervalT <- sample(t_intervalo,size=1, replace=T, prob= pinterT)
tllegadasT <- sample(t_llegada,size=1,replace = TRUE,prob=pllegadaT)
tviajeT <- sample(t_viaje,size=1,replace = TRUE,prob=pviajeT)
tintervalN <- sample(t_intervalo,size=1, replace=T, prob= pinterN)
tllegadasN <- sample(t_llegada,size=1,replace = TRUE,prob=pllegadaN)
tviajeN <- sample(t_viaje,size=1,replace = TRUE,prob=pviajeN)
##Count first person
min.llegada[1]<- 1
tinterval[1]<- 1
min.salida[1]<-tinterval[1]+tviajeM[1]
###Save in data frame "Sim"
uno <- data.frame (caso = 1,
minuto_llegada = min.llegada[1],
minuto_inicio_del_viaje = tinterval[1],
Tiempo_viaje = tviajeM [1],
minuto_salida_del_cliente = min.salida[1])
sim <- rbind(sim, uno)
##Loop to asigne probs acording to number cases
for (c in 2:600){
tllegadasM[c] <- if(c <300){sample(t_llegada,size=1,replace =TRUE,prob=pllegadaM)#VAL 2
} else{
sample(t_llegada,size=1,replace = TRUE,prob=pllegadaT)}
tviajeM[c] <- if(c<300){sample(t_viaje,size=1,replace = TRUE,prob=pviajeM)#VAL 3
}
else{
sample(t_viaje,size=1,replace = TRUE,prob=pviajeT)}
tintervalM[c]<-if(c <300){sample(t_intervalo,size=1, replace=TRUE, prob=pinterM)#VAL 2
} else{
sample(t_intervalo,size=1, replace=T, prob= pinterT)
}}
我以前打过号码aleat。到变量tintervalM,在第二个循环我接触到我只从变量aleats中选择数字。一个正义的总和。我希望得到很好的解释和帮助。
#Loop for times
for (c in 3:600){
min.llegada[c]<-min.llegada[c-1]+tllegadasM[c] #VAL 1
tinterval[c]<-if(min.llegada[c-1]>tinterval[c-1]){
tinterval[c-1]+ tintervalM[c]+tintervalM[c+1]} #VAL 2 HERE IS THE PROBLEM
min.salida[c]<-tinterval[c]+tviajeM[c] #VAL 4
nuevo <- data.frame (caso = c,
minuto_llegada = min.llegada[c],#1
minuto_inicio_del_viaje = tinterval[c],#2
Tiempo_viaje = tviajeM [c],#3
minuto_salida_del_cliente = min.salida[c])#4
sim <- rbind(sim, nuevo)
}
我想确定tinterval [c-1]的优先数加上tintervalM [c]生成的数字和tintervalM [c]生成的下一个数字加到变量tinterval [c]的总和,如果min.salida [c]大于tinverval [c],但我认为错误的长度为零,
答案 0 :(得分:0)
尽管不了解你的代码做了什么,我想我可以指出错误。如果if
中的条件不是TRUE
。
tinterval[c] <- if(min.llegada[c-1]>tinterval[c-1]){
tinterval[c-1] + tintervalM[c] + tintervalM[c+1]
} #VAL 2 HERE IS THE PROBLEM
如果条件为FALSE,则if
子句返回NULL,并且无法将其分配给tinterval[c]
。
我猜应该如何编写如下
if( min.llegada[c-1] > tinterval[c-1] ){
tinterval[c] <- tinterval[c-1] + tintervalM[c] + tintervalM[c+1]
}
现在如果条件为FALSE,则没有任何反应。