juMP - 使用总和范围内定义的变量

juMP - use variable defined in sum range

我正在尝试定义一个包含对两个索引 k 和 t 求和的约束。

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

我已经在 CPLEX 的 OPL 中以同样的方式实现了相同的模型,这不是问题。我是否不允许在求和中引入这样的变量作为索引,然后在我上面尝试做的相同的 sum() 中随后将它用作数组的索引?

我的同事找到了解决此问题的方法。将总和转换为等效的双倍总和使其起作用,即:

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]))

这解决了问题。

这是一道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

JuMP 也应如此。