2017-07-06 66 views
0

我試圖定義一個約束,包含兩個索引k和t的求和。juMP - 使用總和範圍內定義的變量

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 

我得到以下錯誤在運行代碼:

ERROR: LoadError: UndefVarError: k not defined

我也以同樣的方式實現了相同的模型OPL爲CPLEX,這是不是一個問題。我不允許在總和中引入這樣的變量作爲索引,然後將它作爲索引用於同一個sum()中的數組,如上面所做的那樣?

回答

1

這是朱莉婭語法的問題:

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 

同樣應該保持跳躍。

0

我的同事找到了解決此問題的解決方法。轉換的總和爲等效的雙總和使它工作,即:

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

改爲:

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

這解決了問題。