저는 R의 초보자입니다. 저는 R studio의 Cplex를 사용하여 선형 분석을 수행하여 모델을 풀고 있습니다. 제 모델의 제약 조건 중 하나는 X1 (i, j, t) < = D (i, j, t)입니다. 작은 치수 (16X16X6)의 중첩 for 루프를 사용하여이 작업을 수행 할 수 있습니다. 하지만 내 모델을 2500X2500X60처럼 더 큰 모델로 운영하고 싶습니다. 메모리를 저장하고 중첩 된 for 루프보다 빠르게 실행해야합니다. 나는 apply를 사용하는 것에 대해 생각했지만 어떻게 작동하게하는지 모른다. 어떤 도움이라도 대단히 감사하겠습니다!은 중첩 된 for 루프를 mapply로 대체합니다.
location <-16
horizon <-6
Amat <- NULL
Xe_null <- array(0, dim = c(locations, locations, horizon))
Xl_null <- array(0, dim = c(locations, locations, horizon))
Xl <- array(0, dim = c(locations, locations, horizon))
Xl <- Xl_null
for (t in 1:horizon) {
for (j in 1:locations) {
for (i in 1:locations) {
Xl[i,j,t] <- 1
Amat <- rbind(Amat, c(as.vector(Xe_null), as.vector(Xl)))
Xl <- Xl_null
} } }
dim(Amat) # 1536 3072
또 다른 제약 조건이 있습니다.
R <- array(, dim=c(locations, horizon, horizon))
R_null <- array(, dim=c(locations, horizon, horizon))
R <- R_null
Xe <- Xe_null
Xl <- Xl_null
#
for (t in 1:(horizon-1)) {
for (tp in (t+1):horizon) {
for (j in 1:locations) {
for (i in 1:locations) {
if ((tp-t) ==Travel_time[i,j])
{
Xe[i,j,t]=1
Xl[i,j,t]=1
}
}
R[j,tp,t] = 1
R[j,tp,t+1] = -1
Amat <- rbind(Amat, c(as.vector(Xe), as.vector(Xl),as.vector(R)))
}
}
}
나는이 작업을 수행하려고 :
Xl = function(ii,jj,tt){1}
t =c(1:horizon)
i =c(1:locations)
j =c(1:locations)
output_Xl = apply(expand.grid(i,j,t),1,function(x,y,h) Xl(x[1],x[2],x[3]))
Xl_new <- array(output_Xl, dim = c(locations, locations, horizon))
Amat <- rbind(Amat, c(as.vector(Xe_null), as.vector(Xl_new)))
dim(Amat) # 1 3072
'Xl_null'와'Xe_null' 같은 객체인가, 아니면 'Xe_null'는 원래 데이터입니다 (
?"<<-"
참조)? – Llopis예, Xl_null 및 Xe_null은 0으로 비어 있습니다. – pkjli