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