尽管貌似使用工作代码,但LoadError:MethodError 编辑

问题描述

大家好,在这里编程新手

我正在尝试使用Julia和GLPK解决线性编程问题,并着重于尝试,因为到目前为止,无论尝试如何,我都会遇到错误。这是代码

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))

从我可以知道的错误是在第二行,调用GLPK(或者可能是第一行,因为它没有“导入” GLPK) 上面的代码是我的讲师为解决该问题而上传的确切代码,但无法在我的Windows PC上运行,我怀疑它与Windows Defender有关,因此在没有尝试的情况下,我已卸载并重新安装了Julia和Atom(以及包),我尝试将代码直接包含在Julia终端中,以及在笔记本电脑上完成所有这些操作,但无济于事。朱莉娅ver .: 1.5.2,我也测试了1.0.5

我很难弄清楚该怎么做,而且我也无法在Google上找到任何东西。我希望我的问题不会太愚蠢,我将不胜感激解决方案或信息!

错误消息:

LoadError: MethodError: no method matching Model(::Type{GLPK.Optimizer})
Closest candidates are:
  Model(::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::Dict{Symbol,Any},!Matched::Int64,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

解决方法

也许此示例使用的是旧API版本,但该版本已于一年前发生了变化。

尝试(至少需要JuMP 0.21.0):

m = Model(optimizer_with_attributes(GLPK.Optimizer))

如果您不打算添加属性(或者JuMP的版本早于0.21.0但至少为0.18.0),则还有一个较短的版本:

m = Model(with_optimizer(GLPK.Optimizer))

但是,我总是最终使用第一个。我经常使用的一个常见属性是我希望看到的详细消息,例如:

m = Model(optimizer_with_attributes(GLPK.Optimizer,"msg_lev" => GLPK.GLP_MSG_ALL))

编辑

查看您的包裹status,请执行以下操作:

using Pkg
pkg"rm GLPKMathProgInterface"
pkg"up JuMP"

这应该使您了解软件包的版本。当您执行此操作时,我的代码的第一个版本将可用(现在您已经过时了JuMP版本)。

此外请注意,Atom已不再保留-请考虑切换到VS CODE。

,

将我的评论整理成答案,以便阅读。

GLPKMathProgInterface.jl软件包阻止了您的GLPK.jl版本。运行以下命令以更新您的软件包:

Pkg.rm("GLPKMathProgInterface")
Pkg.update()

或者,您可以在程序包模式下运行等效命令。要进入打包模式,请输入]。然后以打包方式运行以下命令:

(@v1.5) pkg> rm GLPKMathProgInterface

(@v1.5) pkg> update