2017-07-06 3 views
0

J'essaie de définir une contrainte contenant une sommation sur deux indices, k et t.juMP - utilise la variable définie dans la plage de somme

for i in data.I  
    for j in 1:length(data.P[i]) 
     @constraint(m, w[i, j, length(data.T[data.P[i][j]])]/(1+sum(data.A[i][k][t] for k in 1:length(data.P[i]), t in data.T[data.P[i][k]])) <= s[i, j]) 
    end 
end 

je reçois l'erreur suivante dans l'exécution du code:

ERROR: LoadError: UndefVarError: k not defined

J'ai mis en œuvre le même modèle pour CPLEX OPL de la même manière, et ce ne fut pas un problème. Ne suis-je pas autorisé à introduire une variable comme un index dans la sommation, puis l'utiliser ensuite comme un index d'un tableau dans la même somme() que j'essaie de faire ci-dessus?

Répondre

1

C'est une question de syntaxe Julia:

julia> sum(i+j for i in 1:3, j in 1:i) 
ERROR: UndefVarError: i not defined 

julia> sum(i+j for i in 1:3 for j in 1:i) 
24 

La même chose devrait tenir pour JuMP.

0

Mon collègue a trouvé une solution de contournement à ce problème. Conversion de la somme dans la double somme équivalente fait le travail, i.e. .:

sum(data.A[i][k][t] for k = 1:length(data.P[i]), t = data.T[data.P[i][k]]) 

a été modifiée:

sum(sum(data.A[i][k][t] for t = data.T[data.P[i][k]]) for k = 1:length(data.P[i])) 

Cela résout le problème.