-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtransportation.py
69 lines (51 loc) · 2.21 KB
/
transportation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
__author__ = 'nick'
# Import PuLP modeler functions
from pulp import *
# Creates a list of all the supply nodes
warehouses = ['A', 'B']
# Creates a dictionary for the number of units of supply for each supply node
supply = {'A': 1000,
'B': 4000}
# Creates a list of all demand nodes
bars = ['1', '2', '3', '4', '5']
# Creates a dictionary for the number of units of demand for each demand node
demand = {'1': 500,
'2': 900,
'3': 1800,
'4': 200,
'5': 700}
# Creates a list of costs of each transportation path
costs = [#Bars
#1 2 3 4 5
[2, 4, 5, 2, 1],#A Warehouses
[3, 1, 3, 2, 3] #B
]
# The cost data is made into a dictionary
costs = pulp.makeDict([warehouses, bars], costs,0)
# Creates the ’prob’ variable to contain the problem data
prob = pulp.LpProblem("Beer Distribution Problem", pulp.LpMinimize)
# Creates a list of tuples containing all the possible routes for transport
routes = [(w,b) for w in warehouses for b in bars]
print(routes)
# A dictionary called x is created to contain quantity shipped on the routes
x = pulp.LpVariable.dicts("route", (warehouses, bars), lowBound=0, cat=pulp.LpInteger)
print(x)
# The objective function is added to ’prob’ first
prob += sum([x[w][b]*costs[w][b] for (w, b) in routes]), "Sum_of_Transporting_Costs"
# Supply maximum constraints are added to prob for each supply node (warehouse)
for w in warehouses:
prob += sum([x[w][b] for b in bars]) <= supply[w], "Sum_of_Products_out_of_Warehouse_%s"%w
# Demand minimum constraints are added to prob for each demand node (bar)
for b in bars:
prob += sum([x[w][b] for w in warehouses]) >= demand[b], "Sum_of_Products_into_Bar%s"%b
# The problem data is written to an .lp file
prob.writeLP("BeerDistributionProblem.lp")
# The problem is solved using PuLP’s choice of Solver
prob.solve()
# The status of the solution is printed to the screen
print("Status:", pulp.LpStatus[prob.status])
# Each of the variables is printed with it’s resolved optimum value
for v in prob.variables():
print(v.name, "=", v.varValue)
# The optimised objective function value is printed to the screen
print("Total Cost of Transportation = ", prob.objective.value())