Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 尺寸变化_Dictionary_Julia_Dimensions_Julia Jump - Fatal编程技术网

Dictionary 尺寸变化

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

我使用的是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{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