LoadError: MethodError malgré (apparemment) l'utilisation de code de travail
Salut les gars programmant les débutants ici
J'essaie de résoudre un problème de programmation linéaire en utilisant Julia et GLPK, en mettant l'accent sur les essais, car jusqu'à présent, j'ai eu des erreurs, peu importe ce que j'essaye. Voici le 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))
D'après ce que je peux dire, l'erreur se trouve dans la deuxième ligne, appelant GLPK (ou peut-être la première car elle n'importe pas GLPK) Le code ci-dessus est le code exact que mon conférencier a téléchargé comme solution au problème, mais il ne le sera pas exécuté sur mon PC Windows, je soupçonnais que cela avait quelque chose à voir avec Windows Defender, donc essayé sans, j'ai désinstallé et réinstallé Julia et Atom (et les packages), j'ai également essayé d'inclure le code directement dans le terminal Julia. comme faisant tout cela sur mon ordinateur portable mais en vain. Julia ver .: 1.5.2 et j'ai également testé 1.0.5
J'ai du mal à savoir quoi faire et je n'ai rien trouvé sur Google non plus. J'espère que ma question n'est pas trop stupide et j'apprécierai grandement une solution ou une info!
Message d'erreur:
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
État du paquet ():
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
Réponses
Peut-être que cet exemple utilise une ancienne version d'API qui a changé quelque chose comme il y a un an.
Essayez (nécessite au moins JuMP0.21.0):
m = Model(optimizer_with_attributes(GLPK.Optimizer))
Il existe également une version plus courte si vous ne prévoyez pas d'ajouter d'attributs (ou si vous avez JuMP antérieur à 0.21.0 mais au moins 0.18.0):
m = Model(with_optimizer(GLPK.Optimizer))
Cependant, je finis toujours par utiliser le premier. Un attribut commun que j'utilise toujours est la façon dont les messages verbeux que je veux voir, par exemple:
m = Model(optimizer_with_attributes(GLPK.Optimizer, "msg_lev" => GLPK.GLP_MSG_ALL))
Éditer
En regardant votre colis, statusprocédez comme suit:
using Pkg
pkg"rm GLPKMathProgInterface"
pkg"up JuMP"
cela devrait vous permettre de régler les versions de package. Lorsque vous faites cela, la première version de mon code fonctionnera (vous avez maintenant une version JuMP obsolète).
De plus, notez que ce Atomn'est plus maintenu - envisagez de passer à VS CODE.
Rassembler mes commentaires dans une réponse pour une lecture plus facile.
Le package GLPKMathProgInterface.jl retient votre version de GLPK.jl. Exécutez ce qui suit pour mettre à jour vos packages:
Pkg.rm("GLPKMathProgInterface")
Pkg.update()
Vous pouvez également exécuter les commandes équivalentes en mode package. Pour entrer en mode package, tapez ]. Ensuite, en mode package, exécutez ce qui suit:
(@v1.5) pkg> rm GLPKMathProgInterface
(@v1.5) pkg> update