有容量限制的工厂选址——案例研究 P3

Python 供应链分析

Aaren Stubberfield

Supply Chain Analytics Mgr.

有容量限制的工厂选址模型

建模

  • 区域工厂的生产
    • 两种工厂规模(低/高)
  • 向其他地区出口产量
  • 工厂开/关决策

带有各地区生产的地球图

Python 供应链分析

预期范围

我们的决策变量应取何值?

生产量:

  • 在可变生产与运输成本低的地区产量高
  • 在固定成本也较低的地区产量打满

工厂开/关:

  • 需求高的地区选择高产能工厂
  • 固定成本较低的地区选择高产能工厂
Python 供应链分析

约束的敏感性分析

总产量 = 总需求:

  • shadow prices:每增加一单位地区需求带来的总成本变化
  • slack:应为 0

总产量 ≤ 总产能:

  • shadow prices:每增加一单位产能带来的总成本变化
  • slack:有剩余产能的地区
Python 供应链分析
from pulp import *
import pandas as pd

# Initialize Class
model = 
    LpProblem("Capacitated Plant Location Model",
               LpMinimize)

# Define Decision Variables
loc = ['A', 'B', 'C', 'D', 'E']
size = ['Low_Cap','High_Cap']
x = LpVariable.dicts(
                "production_", 
                [(i,j) for i in loc for j in loc],
                 lowBound=0, upBound=None, 
                 cat='Continuous')

y = LpVariable.dicts(
               "plant_", 
               [(i,s) for s in size for i in loc], 
                cat='Binary')
# Define Objective Function
model += 
  (lpSum([fix_cost.loc[i,s]*y[(i,s)] 
          for s in size for i in loc])
 + lpSum([var_cost.loc[i,j]*x[(i,j)] 
          for i in loc for j in loc]))

# Define the Constraints
for j in loc: model += 
  lpSum([x[(i, j)] 
        for i in loc]) == demand.loc[j,'Dmd']
for i in loc: model += 
  lpSum([x[(i, j)] for j in loc]) <= lpSum(
             [cap.loc[i,s]*y[(i,s)]for s in size])
Python 供应链分析
# Solve
model.solve()

# Print Decision Variables and Objective Value print(LpStatus[model.status]) o = [{'prod':"{} to {}".format(i,j), 'quant':x[(i,j)].varValue} for i in loc for j in loc] print(pd.DataFrame(o)) o = [{'loc':i, 'lc':y[(i,size[0])].varValue, 'hc':y[(i,size[1])].varValue} for i in loc] print(pd.DataFrame(o)) print("Objective = ", value(model.objective))
# Print Shadow Price and Slack o = [{'name':name, 'shadow price':c.pi, 'slack': c.slack} for name, c in model.constraints.items()] print(pd.DataFrame(o))
Python 供应链分析

业务问题

可能的问题:

  • 该供应链网络模型的预期总成本是多少?

  • 若某地区需求上升,需增加多少利润才能覆盖该地区的生产与运输成本?

  • 哪些地区仍有产能以应对未来需求增长?

Python 供应链分析

小结

回顾:

  • 决策变量的预期范围
  • 解释敏感性分析输出(shadow pricesslack
  • 求解与结果输出的代码
  • 可能的业务问题
Python 供应链分析

做得好!轮到你了

Python 供应链分析

Preparing Video For Download...