Аналитика цепочек поставок на Python
Aaren Stubberfield
Supply Chain Analytics Mgr.

Общая идея:
Зачем:
Контекст — Стекольная компания — Планирование ресурсов:
| Ресурс | Прод. A | Прод. B | Прод. C |
|---|---|---|---|
| Прибыль $US | $500 | $450 | $600 |
Ограничения:
Риски:
# 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())
Вывод: (результаты могут отличаться)
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
Продукт A:

Продукт B:

Продукт C:

Значения целевой функции:

Преимущества
Шаги
normalvariate из PythonАналитика цепочек поставок на Python