This is an old revision of the document!
not in code
#Transposition in JuMP of the basic transport model used in the GAMS tutorial # #This problem finds a least cost shipping schedule that meets #requirements at markets and supplies at factories. # #- Original formulation: Dantzig, G B, Chapter 3.3. In Linear Programming and Extensions. #Princeton University Press, Princeton, New Jersey, 1963. #- Gams implementation: This formulation is described in detail in: #Rosenthal, R E, Chapter 2: A GAMS Tutorial. In GAMS: A User's Guide. #The Scientific Press, Redwood City, California, 1988. #- JuMP implementation: Antonello Lobianco using JuMP, DataFrames # Sets plants = ["seattle","san_diego"] # canning plants markets = ["new_york","chicago","topeka"] # markets # Parameters a = Dict( # capacity of plant i in cases "seattle" => 350, "san_diego" => 600, ) b = Dict( # demand at market j in cases "new_york" => 325, "chicago" => 300, "topeka" => 275, ) # distance in thousands of miles d_table = wsv""" plants new_york chicago topeka seattle 2.5 1.7 1.8 san_diego 2.5 1.8 1.4 """ d = Dict( (r[:plants],m) => r[Symbol(m)] for r in eachrow(d_table), m in markets) f = 90 # freight in dollars per case per thousand miles c = Dict() # transport cost in thousands of dollars per case ; [ c[p,m] = f * d[p,m] / 1000 for p in plants, m in markets] # Model declaration trmodel = Model() # transport model # Variables @variables trmodel begin x[p in plants, m in markets] >= 0 # shipment quantities in cases end # Constraints @constraints trmodel begin supply[p in plants], # observe supply limit at plant p sum(x[p,m] for m in markets) <= a[p] demand[m in markets], # satisfy demand at market m sum(x[p,m] for p in plants) >= b[m] end # Objective @objective trmodel Min begin sum(c[p,m]*x[p,m] for p in plants, m in markets) end print(trmodel) status = solve(trmodel) if status == :Optimal println("Objective value: ", getobjectivevalue(trmodel)) println("Shipped quantities: ") println(getvalue(x)) println("Shadow prices of supply:") [println("$p = $(getdual(supply[p]))") for p in plants] println("Shadow prices of demand:") [println("$m = $(getdual(demand[m]))") for m in markets] else println("Model didn't solved") println(status) end # Expected result: # obj= 153.675 #['seattle','new-york'] = 50 #['seattle','chicago'] = 300 #['seattle','topeka'] = 0 #['san-diego','new-york'] = 275 #['san-diego','chicago'] = 0 #['san-diego','topeka'] = 275