Мне нужно решить эту проблему в Юлии в образовательных целях:
Я использую 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)
Имеет ли смысл рассмотрение проблемы?Это правильно?
Заранее спасибо.