Supply Chain Analytics in Python
Aaren Stubberfield
Supply Chain Analytics Mgr.
General Concept:
Why:
Context - Glass Company - Resource Planning:
Resource | Prod. A | Prod. B | Prod. C |
---|---|---|---|
Profit $US | $500 | $450 | $600 |
Constraints:
Risks:
# Initialize Class, & Define Variables
model = LpProblem("Max Glass Co. Profits", LpMaximize)
A = LpVariable('A', lowBound=0)
B = LpVariable('B', lowBound=0)
C = LpVariable('C', lowBound=0)
# Define Objective Function
model += 500 * A + 450 * B + 600 * C
# Define Constraints & Solve
model += 6 * A + 5 * B + 8 * C <= 60
model += 10.5 * A + 20 * B + 10 * C <= 150
model += A <= 8
model.solve()
a, b, c = normalvariate(0,25),
normalvariate(0,25),
normalvariate(0,25)
# Define Objective Function
model += (500+a)*A + (450+b)*B + (600+c)*C
# Initialize Class, & Define Variables
model = LpProblem("Max Glass Co. Profits",
LpMaximize)
A = LpVariable('A', lowBound=0)
B = LpVariable('B', lowBound=0)
C = LpVariable('C', lowBound=0)
a, b, c = normalvariate(0,25),
normalvariate(0,25),
normalvariate(0,25)
# Define Objective Function
model += (500+a)*A + (450+b)*B + (600+c)*C
# Define Constraints & Solve
model += 6 * A + 5 * B + 8 * C <= 60
model += 10.5 * A + 20 * B + 10 * C <= 150
model += A <= 8
model.solve()
def run_pulp_model():
# Initialize Class
model = LpProblem("Max Glass Co. Profits", LpMaximize)
A = LpVariable('A', lowBound=0)
B = LpVariable('B', lowBound=0)
C = LpVariable('C', lowBound=0)
a, b, c = normalvariate(0,25), normalvariate(0,25), normalvariate(0,25)
# Define Objective Function
model += (500+a)*A + (450+b)*B + (600+c)*C
# Define Constraints & Solve
model += 6 * A + 5 * B + 8 * C <= 60
model += 10.5 * A + 20 * B + 10 * C <= 150
model += A <= 8
model.solve()
o = {'A':A.varValue, 'B':B.varValue, 'C':C.varValue, 'Obj':value(model.objective)}
return(o)
def run_pulp_model():
# Initialize Class
model = LpProblem("Max Glass Co. Profits",
LpMaximize)
A = LpVariable('A', lowBound=0)
B = LpVariable('B', lowBound=0)
C = LpVariable('C', lowBound=0)
a, b, c = normalvariate(0,25),
normalvariate(0,25),
normalvariate(0,25)
# Define Objective Function
model += (500+a)*A + (450+b)*B +
(600+c)*C
# Define Constraints & Solve
model += 6 * A + 5 * B + 8 * C <= 60
model += 10.5 * A + 20 * B + 10 * C <= 150
model += A <= 8
model.solve()
o = {'A':A.varValue, 'B':B.varValue,
'C':C.varValue,
'Obj':value(model.objective)}
return(o)
for i in range(100):
output.append(run_pulp_model())
df = pd.DataFrame(output)
print(df['A'].value_counts())
print(df['B'].value_counts())
print(df['C'].value_counts())
Output: (results may be different)
6.666667 73
0.000000 14
8.000000 13
Name: A, dtype: int64
4.000000 73
5.454546 14
2.400000 13
Name: B, dtype: int64
0.000000 86
4.090909 14
Name: C, dtype: int64
Product A:
Product B:
Product C:
Objective Values:
Benefits
Steps
normalvariate
Supply Chain Analytics in Python