とループの入れ子になったを交換してください。私のモデルの制約の1つはXl(i、j、t)< = D(i、j、t)です。私は小さな次元(16X16X6)で入れ子のforループでこれを行うことができます。しかし、私は2500X2500X60のようにもっと大きなモデルを私のモデルで使いたいと思っています。私はメモリを節約し、ネストされたforループより速く実行する必要があります。私は適用を使用することについて考えたが、私はそれを動作させる方法を知らない。どんな助けでも大歓迎です!は私がモデルを解決するためにRスタジオのCPLEXを使用して、線形計画に取り組んでいますR.で初心者です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はゼロで空です。 – pkjli