LoadError: MethodError trotz (scheinbar) Verwendung von Arbeitscode

Oct 01 2020

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

3 PrzemyslawSzufel Oct 01 2020 at 02:11

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.

2 CameronBieganek Oct 01 2020 at 02:31

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