Dictionary 尺寸变化
我使用的是Julia 0.6.2和JuMP 0.18.5(我不能使用更新的版本,因为我需要使用旧的软件包) 使用索引上的条件创建跳转变量将导致跳转dict而不是数组 例如:Dictionary 尺寸变化,dictionary,julia,dimensions,julia-jump,Dictionary,Julia,Dimensions,Julia Jump,我使用的是Julia 0.6.2和JuMP 0.18.5(我不能使用更新的版本,因为我需要使用旧的软件包) 使用索引上的条件创建跳转变量将导致跳转dict而不是数组 例如: m = Model(solver = CplexSolver()) # type of x: JuMP.JuMPDict{JuMP.Variable,2} @variable(m, x[i in 1:3, j in 1:3; i < j] >= 0) # type of y: JuMP.JuMPDict{J
m = Model(solver = CplexSolver())
# type of x: JuMP.JuMPDict{JuMP.Variable,2}
@variable(m, x[i in 1:3, j in 1:3; i < j] >= 0)
# type of y: JuMP.JuMPDict{JuMP.Variable,3}
@variable(m, y[i in 1:3, j in 1:3, k in 1:3; i < j] >= 0)
我可以在x上使用该函数,但不能在y上使用:
f(x) # Works
for k in 1:3
f(y[:, :, k]) # does not work as y is not an array
end
我的最后一个想法是将y转换为几个JuMP.JuMPDict{JuMP.Variable,2}:
function f(input::JuMP.JuMPDict{JuMP.Variable,2})
...
end
function convertTo2D(dict3D::JuMP.JuMPDict{JuMP.Variable,3}, k::Int)
dict2D = JuMP.JuMPDict{JuMP.Variable,2}() # This line returns "ERROR: KeyError: key :model not found"
for (key, value) in keys(dict3D)
if key[3] == k
dict2D[(key[1], key[2])] = value # Not sure if it will work
end
end
return dict2D
end
如果这起作用,我可以使用:
for k in 1:3
f(convertTd2D(y, k))
end
你知道我如何修复convertTo2D或者用另一种方式做我想做的事情吗?匿名变量解决了我的问题。由于它们,我可以在for循环中连续创建y的变量。变量y现在是“2D字典”数组,而不是“3D字典”:
y=Array{JuMP.JuMPDict{JuMP.Variable,2},1}([])
以1:3计算k
yk=@变量(m,[i在1:3,j在1:3;i=0)
f(yk)
推(y,yk)
结束
y = Array{JuMP.JuMPDict{JuMP.Variable,2}, 1}([])
for k in 1:3
yk = @variable(m, [i in 1:3, j in 1:3; i < j] >= 0)
f(yk)
push!(y, yk)
end