Julia JuMP优化错误中的错误生成器

我正在将julia 0.6的代码转换为1.2。 这是旧版本:

@variable(model,use[i=eachindex(n),j=1:m],Bin)

Used  = [indmax(getvalue(use[i,j])
                           for j=1:m) for i=eachindex(n)]

我转换为以下内容,

@variable(model,Bin)

JuMP.optimize!(model)
Used = [argmax(JuMP.value(use[i,j])
                    for j=1:m) for i=eachindex(n)]

但有错误:

MethodError: no method matching keys(::Base.Generator{UnitRange{Int64},getfield(Main,Symbol("##261#266")){Int64,JuMP.Containers.SparseAxisArray{VariableRef,2,Tuple{Any,Any}}}})
Closest candidates are:
  keys(!Matched::Core.SimpleVector) at essentials.jl:606
  keys(!Matched::Cmd) at process.jl:963
  keys(!Matched::BenchmarkTools.BenchmarkGroup) at /Users/shuaiwang/.julia/packages/BenchmarkTools/7aqwe/src/groups.jl:31
  ...
pairs(::Base.Generator{UnitRange{Int64},Any}}}}) at abstractdict.jl:132
_findmax(::Base.Generator{UnitRange{Int64},Any}}}},::Colon) at array.jl:2068
findmax(::Base.Generator{UnitRange{Int64},Any}}}}) at array.jl:2065
argmax(::Base.Generator{UnitRange{Int64},Any}}}}) at array.jl:2153
(::getfield(Main,Symbol("##260#265")){ScenarioGraph,Any}}})(::Int64) at none:0
iterate at generator.jl:47 [inlined]
collect at array.jl:606 [inlined]
xinshiye111 回答:Julia JuMP优化错误中的错误生成器

该问题似乎与JuMP无关。您的代码的解决方法是:

Used = [argmax([JuMP.value(use[i,j]) for j=1:m]) for i=eachindex(n)]

(由于代码不完整,我没有测试整个代码)

问题的核心是不允许您在生成器上使用argmax,必须将支持pairs的集合传递给它,例如:

julia> argmax(i for i in 1:3)
ERROR: MethodError: no method matching keys(::Base.Generator{UnitRange{Int64},getfield(Main,Symbol("##15#16"))})

失败,但是

julia> argmax([i for i in 1:3])
3

julia> argmax((1,2,3))
3

julia> argmax((a=1,b=2,c=3))
:c

julia> argmax(Dict(:a=>1,:b=>2,:c=>3))
:c

工作

本文链接:https://www.f2er.com/3043334.html

大家都在问