0

我正在尝试定义一个包含对两个索引 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

运行代码时出现以下错误:

错误:LoadError:UndefVarError:k 未定义

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

4

2 回答 2

1

这是 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 也应如此。

于 2017-07-07T16:57:57.123 回答
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]))

这解决了这个问题。

于 2017-07-06T18:23:42.937 回答