LoadError: MethodError nonostante (apparentemente) utilizzi un codice funzionante
Ciao ragazzi programmatori principianti qui
Sto cercando di risolvere un problema di programmazione lineare usando Julia e GLPK, con enfasi sul tentativo perché finora ho ricevuto errori indipendentemente da ciò che provo. Questo è il codice:
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))
Da quello che posso dire l'errore è nella seconda riga, chiamando GLPK (o forse il primo perché non "importa" GLPK) Il codice sopra è il codice esatto che il mio docente ha caricato come soluzione al problema ma non lo farà eseguito sul mio PC Windows, sospettavo avesse qualcosa a che fare con Windows Defender, quindi ho provato senza, ho disinstallato e reinstallato Julia e Atom (ei pacchetti), ho provato a includere il codice anche direttamente nel terminale Julia come fare tutto questo sul mio laptop ma senza alcun risultato. Julia ver .: 1.5.2 e ho anche testato 1.0.5
Faccio fatica a capire cosa fare e nemmeno su Google sono riuscito a trovare nulla. Spero che la mia domanda non sia troppo stupida e apprezzerò molto una soluzione o informazioni!
Messaggio di errore:
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
Stato pkg ():
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
Risposte
Forse questo esempio utilizza una vecchia versione dell'API che è cambiata qualcosa come un anno fa.
Prova (richiede almeno JuMP0.21.0):
m = Model(optimizer_with_attributes(GLPK.Optimizer))
Esiste anche una versione più breve se non si prevede di aggiungere attributi (o se JuMP è precedente a 0.21.0 ma almeno 0.18.0):
m = Model(with_optimizer(GLPK.Optimizer))
Tuttavia, finisco sempre per usare il primo. Un attributo comune che utilizzo sempre è il modo in cui voglio vedere i messaggi dettagliati, ad es .:
m = Model(optimizer_with_attributes(GLPK.Optimizer, "msg_lev" => GLPK.GLP_MSG_ALL))
modificare
Guardando il tuo pacco statusfai quanto segue:
using Pkg
pkg"rm GLPKMathProgInterface"
pkg"up JuMP"
questo dovrebbe risolverti con le versioni dei pacchetti. Quando lo fai, la prima versione del mio codice funzionerà (ora hai una versione di JuMP obsoleta).
Inoltre, nota che Atomnon viene più mantenuto - considera il passaggio a VS CODE.
Raccogliere i miei commenti in una risposta per una lettura più facile.
Il pacchetto GLPKMathProgInterface.jl sta trattenendo la tua versione di GLPK.jl. Esegui quanto segue per aggiornare i tuoi pacchetti:
Pkg.rm("GLPKMathProgInterface")
Pkg.update()
In alternativa, puoi eseguire i comandi equivalenti in modalità pacchetto. Per accedere alla modalità pacchetto, digitare ]. Quindi in modalità pacchetto, esegui quanto segue:
(@v1.5) pkg> rm GLPKMathProgInterface
(@v1.5) pkg> update