LoadError: MethodError a pesar de (aparentemente) usar código de trabajo

Oct 01 2020

Hola chicos, programando novatos aquí.

Estoy tratando de resolver un problema de programación lineal usando Julia y GLPK, con énfasis en intentarlo porque hasta ahora he estado obteniendo errores sin importar lo que intente. Este es el 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))

Por lo que puedo decir, el error está en la segunda línea, llamando a GLPK (o tal vez al primero porque no "importa" GLPK). El código anterior es el código exacto que mi profesor cargó como solución al problema, pero no ejecutar en mi PC con Windows, sospechaba que tenía algo que ver con Windows Defender, así que probé sin, desinstalé y reinstalé Julia y Atom (y los paquetes), intenté incluir el código directamente en la terminal de Julia, también como hacer todo esto en mi computadora portátil, pero fue en vano. Julia ver .: 1.5.2 y también he probado 1.0.5

Me está costando saber qué hacer y tampoco he podido encontrar nada en Google. Espero que mi pregunta no sea demasiado tonta, ¡y agradeceré enormemente una solución o información!

Mensaje de error:

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

Estado del paquete ():

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

Respuestas

3 PrzemyslawSzufel Oct 01 2020 at 02:11

Quizás este ejemplo esté usando una versión antigua de API que ha cambiado hace un año.

Prueba (requiere al menos JuMP0.21.0):

m = Model(optimizer_with_attributes(GLPK.Optimizer))

También hay una versión más corta si no planea agregar atributos (o tiene JuMP anterior a 0.21.0 pero al menos 0.18.0):

m = Model(with_optimizer(GLPK.Optimizer))

Sin embargo, siempre termino usando el primero. Un atributo común que siempre uso es la cantidad de mensajes que quiero ver, por ejemplo:

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

Editar

Mirando su paquete, statushaga lo siguiente:

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

esto debería solucionarlo con las versiones del paquete. Cuando haga esto, la primera versión de mi código funcionará (ahora tiene una versión de JuMP desactualizada).

Además, tenga en cuenta que Atomya no se mantiene: considere cambiar a VS CODE.

2 CameronBieganek Oct 01 2020 at 02:31

Recopilar mis comentarios en una respuesta para facilitar la lectura.

El paquete GLPKMathProgInterface.jl está reteniendo su versión de GLPK.jl. Ejecute lo siguiente para actualizar sus paquetes:

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

Alternativamente, puede ejecutar los comandos equivalentes en modo paquete. Para ingresar al modo paquete, escriba ]. Luego, en modo paquete, ejecute lo siguiente:

(@v1.5) pkg> rm GLPKMathProgInterface

(@v1.5) pkg> update