我试图定义一个包含两个索引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()内的数组的索引吗?
答案 0 :(得分: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。
答案 1 :(得分: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]))
这解决了这个问题。