LoadError: MethodError a pesar de (aparentemente) usar código de trabajo
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
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.
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