LoadError: MethodError trotz (scheinbar) Verwendung von Arbeitscode
Hallo Leute, die hier Neulinge programmieren
Ich versuche, ein lineares Programmierproblem mit Julia und GLPK zu lösen, wobei der Schwerpunkt auf dem Versuch liegt, da ich bisher Fehler erhalten habe, egal was ich versuche. Dies ist der Code:
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))
Soweit ich weiß, befindet sich der Fehler in der zweiten Zeile und ruft GLPK auf (oder vielleicht die erste, weil GLPK nicht "importiert" wird). Der obige Code ist der genaue Code, den mein Dozent als Lösung für das Problem hochgeladen hat, aber nicht Ich habe vermutet, dass es etwas mit Windows Defender zu tun hat. Ich habe es ohne versucht. Ich habe Julia und Atom (und die Pakete) deinstalliert und neu installiert. Ich habe versucht, den Code auch direkt in das Julia-Terminal aufzunehmen als all dies auf meinem Laptop zu tun, aber ohne Erfolg. Julia Ver.: 1.5.2 und ich haben auch 1.0.5 getestet
Es fällt mir schwer, herauszufinden, was ich tun soll, und ich konnte auch bei Google nichts finden. Ich hoffe, meine Frage ist nicht zu dumm und ich werde eine Lösung oder Informationen sehr schätzen!
Fehlermeldung:
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
Antworten
Vielleicht verwendet dieses Beispiel eine alte API-Version, die sich vor etwa einem Jahr geändert hat.
Versuchen Sie (erfordert mindestens JuMP0,21,0):
m = Model(optimizer_with_attributes(GLPK.Optimizer))
Es gibt auch eine kürzere Version, wenn Sie keine Attribute hinzufügen möchten (oder JuMP älter als 0.21.0, aber mindestens 0.18.0 haben):
m = Model(with_optimizer(GLPK.Optimizer))
Am Ende benutze ich jedoch immer den ersten. Ein häufiges Attribut, das ich immer benutze, ist, wie ausführlich Nachrichten ich sehen möchte, z.
m = Model(optimizer_with_attributes(GLPK.Optimizer, "msg_lev" => GLPK.GLP_MSG_ALL))
Bearbeiten
Wenn Sie sich Ihr Paket ansehen, gehen Sie statuswie folgt vor:
using Pkg
pkg"rm GLPKMathProgInterface"
pkg"up JuMP"
Dies sollte Sie mit Paketversionen aussortieren. Wenn Sie dies tun, funktioniert die erste Version meines Codes (jetzt haben Sie eine veraltete JuMP-Version).
Beachten Sie außerdem, dass dies Atomnicht mehr beibehalten wird - wechseln Sie zu VS CODE.
Sammeln Sie meine Kommentare in einer Antwort, um das Lesen zu erleichtern.
Das Paket GLPKMathProgInterface.jl hält Ihre Version von GLPK.jl zurück. Führen Sie Folgendes aus, um Ihre Pakete zu aktualisieren:
Pkg.rm("GLPKMathProgInterface")
Pkg.update()
Alternativ können Sie die entsprechenden Befehle im Paketmodus ausführen. Geben Sie Folgendes ein, um den Paketmodus aufzurufen ]. Führen Sie dann im Paketmodus Folgendes aus:
(@v1.5) pkg> rm GLPKMathProgInterface
(@v1.5) pkg> update