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 ของฉันฉันสงสัยว่ามันมีอะไรเกี่ยวข้องกับ Windows Defender ดังนั้นลองโดยไม่ได้ฉันได้ถอนการติดตั้งและติดตั้ง Julia และ Atom ใหม่ (และแพ็คเกจ) ฉันได้ลองรวมรหัสโดยตรงในเทอร์มินัล Julia ด้วย ทำสิ่งเหล่านี้ทั้งหมดบนแล็ปท็อปของฉัน แต่ไม่มีประโยชน์ Julia เวอร์ชั่น: 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, !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
คำตอบ
บางทีตัวอย่างนี้อาจใช้ API เวอร์ชันเก่าที่มีการเปลี่ยนแปลงบางอย่างเช่นหนึ่งปีที่ผ่านมา
ลอง (ต้องใช้อย่างน้อยJuMP0.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