LoadError: MethodError apesar (aparentemente) de usar código de trabalho

Oct 01 2020

Olá pessoal novato em programação aqui

Estou tentando resolver um problema de programação linear usando Julia e GLPK, com ênfase em tentar porque até agora tenho obtido erros não importa o que tente. Este é o código:

using JuMP, GLPK
m = Model(GLPK.Optimizer)
@variable(m,  x1 >= 0  )
@variable(m,  x2 >= 0  )
@variable(m,  x3 >= 0  )
@objective(m, Max,  200x1 +200x2 + 700x3  )
@constraint(m,  2x1 + x2 + 3x3 <= 22  )
@constraint(m,  x1 + 2x2 + 4x3 <= 20  )
@constraint(m,  x1 + x2 + x3 <= 10  )
optimize!(m)
println("Objective value: ", JuMP.objective_value(m))
println("x1 = ", JuMP.value(x1))
println("x2 = ", JuMP.value(x2))
println("x2 = ", JuMP.value(x3))

Pelo que posso dizer, o erro está na segunda linha, chamando GLPK (ou talvez a primeira porque não "importa" GLPK) O código acima é o código exato que meu professor enviou como uma solução para o problema, mas não rodar no meu PC com Windows, suspeitei que tinha algo a ver com o Windows Defender, então tentei sem, desinstalei e reinstalei o Julia e o Atom (e os pacotes), tentei incluir o código diretamente no terminal do Julia também como fazer tudo isso no meu laptop, mas sem sucesso. Julia ver .: 1.5.2 e também testei 1.0.5

Estou tendo dificuldade em descobrir o que fazer e também não consegui encontrar nada no Google. Espero que minha pergunta não seja muito idiota e agradecerei muito uma solução ou informação!

Mensagem de erro:

LoadError: MethodError: no method matching Model(::Type{GLPK.Optimizer})
Closest candidates are:
  Model(::Any, !Matched::Any, !Matched::Any, !Matched::Any, !Matched::Any, !Matched::Any, !Matched::Any, !Matched::Any) at C:\Users\Peter\.julia\packages\JuMP\iGamg\src\JuMP.jl:126
  Model(; caching_mode, solver) at C:\Users\Peter\.julia\packages\JuMP\iGamg\src\JuMP.jl:161
  Model(!Matched::MathOptInterface.AbstractOptimizer, !Matched::Dict{MathOptInterface.ConstraintIndex,AbstractShape}, !Matched::Set{Any}, !Matched::Any, !Matched::Any, !Matched::Dict{Symbol,Any}, !Matched::Int64, !Matched::Dict{Symbol,Any}) at C:\Users\Peter\.julia\packages\JuMP\iGamg\src\JuMP.jl:126
  ...
in expression starting at C:\Users\Peter\iCloudDrive\BSc\Introduktion til operationsanalyse\Opgaver\Week1Ex1.jl:2
top-level scope at Week1Ex1.jl:2
include_string(::Function, ::Module, ::String, ::String) at loading.jl:1088

Pkg.status ():

julia> Pkg.status()
Status `C:\Users\Peter\.julia\environments\v1.5\Project.toml`
  [c52e3926] Atom v0.12.21
  [60bf3e95] GLPK v0.13.0
  [3c7084bd] GLPKMathProgInterface v0.5.0
  [4076af6c] JuMP v0.20.0
  [e5e0dc1b] Juno v0.8.3

Respostas

3 PrzemyslawSzufel Oct 01 2020 at 02:11

Talvez este exemplo esteja usando uma versão antiga da API que mudou algo como um ano atrás.

Experimente (requer pelo menos JuMP0.21.0):

m = Model(optimizer_with_attributes(GLPK.Optimizer))

Há também uma versão mais curta se você não planeja adicionar atributos (ou tem JuMP anterior a 0.21.0, mas pelo menos 0.18.0):

m = Model(with_optimizer(GLPK.Optimizer))

Porém, sempre acabo usando o primeiro. Um atributo comum que sempre uso é como as mensagens detalhadas que desejo ver, por exemplo:

m = Model(optimizer_with_attributes(GLPK.Optimizer,  "msg_lev" => GLPK.GLP_MSG_ALL))

Editar

Olhando para o seu pacote, statusfaça o seguinte:

using Pkg
pkg"rm GLPKMathProgInterface"
pkg"up JuMP"

isso deve resolver você com as versões do pacote. Quando você fizer isso, a primeira versão do meu código funcionará (agora você tem uma versão JuMP desatualizada).

Além disso, observe que Atomnão é mais mantido - considere mudar para VS CODE.

2 CameronBieganek Oct 01 2020 at 02:31

Coletando meus comentários em uma resposta para facilitar a leitura.

O pacote GLPKMathProgInterface.jl está impedindo sua versão de GLPK.jl. Execute o seguinte para atualizar seus pacotes:

Pkg.rm("GLPKMathProgInterface")
Pkg.update()

Como alternativa, você pode executar os comandos equivalentes no modo de pacote. Para entrar no modo de pacote, digite ]. Em seguida, no modo de pacote, execute o seguinte:

(@v1.5) pkg> rm GLPKMathProgInterface

(@v1.5) pkg> update