【发布时间】:2019-04-06 00:01:51
【问题描述】:
出于教育目的,我需要在 Julia 中解决这个问题:
我正在使用 Julia 1.1.0 和 JuMP v0.19.0
我设法编写了一个解决方案。但是,我对最终结果没有信心。这是我的代码:
using JuMP
using GLPK
using Cbc # Open source solver. Must support integer programming.
nm = Model(with_optimizer(GLPK.Optimizer))
@variable(nm, A_b1>=0,Int)
@variable(nm, A_b2>=0, Int)
@variable(nm, A_b3>=0, Int)
@variable(nm, B_b1>=0, Int)
@variable(nm, B_b2>=0, Int)
@variable(nm, B_b3>=0, Int)
@variable(nm, C_b1>=0, Int)
@variable(nm, C_b2>=0, Int)
@variable(nm, C_b3>=0, Int)
@variable(nm, D_b1>=0, Int)
@variable(nm, D_b2>=0, Int)
@variable(nm, D_b3>=0, Int)
@objective(nm, Min, (A_b1*7) + (A_b2*1) + (A_b3*9) +
(B_b1*11) + (B_b2*6) + (B_b3*15) +
(C_b1*3) + (C_b2*0) + (C_b3*8) +
(D_b1*2) + (D_b2*1) + (D_b3*5))
# Max vol capacity 3.6 cubic meters
@constraint(nm, A_b1 + B_b1 + C_b1 + D_b1 <=6)
@constraint(nm, A_b2 + B_b2 + C_b2+ D_b2 <=1)
@constraint(nm, A_b3 + B_b3 + C_b3+ D_b3 <=10)
@constraint(nm, A_b1 + A_b2 + A_b3==2)
@constraint(nm, B_b1 + B_b2 + B_b3==3)
@constraint(nm, C_b1 + C_b2 + C_b3==5)
@constraint(nm, D_b1 + D_b2 + D_b3==7)
# Solve
optimize!(nm)
println("A_b1 n. of cars going to A via branch 1 -> ",value(A_b1))
println("B_b1 -- -> ",value(B_b1))
println("C_b1 -- -> ",value(C_b1))
println("D_b1 -- -> ",value(D_b1))
println("A_b2 -- -> ",value(A_b2))
println("B_b2 -- -> ",value(B_b2))
println("C_b2 -- -> ",value(C_b2))
println("D_b2 -- -> ",value(D_b2))
println("A_b3 -- -> ",value(A_b3))
println("B_b3 -- -> ",value(B_b3))
println("C_b3 -- -> ",value(C_b3))
println("D_b3 -- -> ",value(D_b3))
println(" ")
println("Total cars going to A: ",value(A_b3)+value(A_b1)+value(A_b2))
println("Total cars going to B: ",value(B_b3)+value(B_b1)+value(B_b2))
println("Total cars going to C: ",value(C_b3)+value(C_b1)+value(C_b2))
println("Total cars going to D: ",value(D_b3)+value(D_b1)+value(D_b2))
println(" ")
println("Total cars using branch 1: ",value(A_b1)+value(B_b1)+value(C_b1) + value(D_b1))
println("Total cars using branch 2: ",value(A_b2)+value(B_b2)+value(C_b2) + value(D_b2))
println("Total cars using branch 3: ",value(A_b3)+value(B_b3)+value(C_b3) + value(D_b3))
println(" ")
println("Total cost: ", objective_value(nm), " american dollars")
我的代码返回:
Total cars going to A: 2.0
Total cars going to B: 3.0
Total cars going to C: 5.0
Total cars going to D: 7.0
Total cars using branch 1: 6.0
Total cars using branch 2: 1.0
Total cars using branch 3: 10.0
Total cost: 100.0 american dollars
我看到了这些数字,并用铅笔和纸稍微思考了一下。他们似乎是合理的。但是,我仍然对最终结果没有信心。
实际上,我对这个问题本身感到不舒服。我多次阅读它以了解目标是什么。
我最担心的是变量定义:
@variable(nm, A_b1>=0,Int)
@variable(nm, A_b2>=0, Int)
@variable(nm, A_b3>=0, Int)
@variable(nm, B_b1>=0, Int)
@variable(nm, B_b2>=0, Int)
@variable(nm, B_b3>=0, Int)
@variable(nm, C_b1>=0, Int)
@variable(nm, C_b2>=0, Int)
@variable(nm, C_b3>=0, Int)
@variable(nm, D_b1>=0, Int)
@variable(nm, D_b2>=0, Int)
@variable(nm, D_b3>=0, Int)
考虑问题陈述是否有意义? 对吗?
提前致谢。
【问题讨论】:
标签: julia mathematical-optimization linear-programming julia-jump