Ich bin ein Anfänger in R. Ich arbeite an linearer Programmierung mit R Studio Cplex, um ein Modell zu lösen. Eine der Einschränkungen in meinem Modell ist Xl (i, j, t) < = D (i, j, t). Ich kann dies mit geschachtelten for-Schleife mit einer kleinen Dimension (16X16X6) tun. Aber ich möchte mein Modell ein viel größeres Modell betreiben, eher wie 2500X2500X60. Ich muss Speicher sparen und es schneller als die geschachtelte for-Schleife ausführen. Ich habe über die Anwendung nachgedacht, aber ich weiß nicht, wie ich es zum Laufen bringen kann. Jede Hilfe würde sehr geschätzt werden!Ersetzen Sie eine verschachtelte For-Schleife mit 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
Hier ist eine weitere Einschränkung.
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)))
}
}
}
Ich versuche, dies zu tun:
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
Ist 'Xl_null' und' Xe_null' das gleiche Objekt zu verwenden, oder ist 'Xe_null' die ursprünglichen Daten? – Llopis
Ja, Xl_null und Xe_null sind leer mit Null. – pkjli