Задача размещения производств с ограничениями — часть 2

Аналитика цепочек поставок на Python

Aaren Stubberfield

SuSupply Chain Analytics Mgr.

Модель размещения производств с ограничениями

Моделирование

  • Производство на региональных объектах
    • Два размера заводов (малый / большой)
  • Экспорт продукции в другие регионы
  • Открытие / закрытие производственных объектов

изображение глобуса с региональным производством

Аналитика цепочек поставок на Python

Переменные решения

Управляемые параметры:

  • x$_{\text{ij}}$ = объём производства в точке _i_, отгруженного в _j_
  • y$_{\text{is}}$ = 1, если завод в точке _i_ мощностью _s_ открыт; 0 — закрыт
    • s = мощность low или high
Аналитика цепочек поставок на Python

Ограничения

  • Суммарное производство = Суммарный спрос
    • $\sum_{i=1}^{n}$ x$_{ij}$ = D$_{\text{j}}$ для $j = 1, ..., m$
    • $n$ = число производственных объектов
    • $m$ = число рынков или региональных точек спроса
Аналитика цепочек поставок на Python

Ограничения

  • Суммарное производство ≤ Суммарная производственная мощность
    • $\sum_{j=1}^{m}$ x$_{ij}$ ≤ $\sum_{s=1}$ K$_{is}$y$_{is}$
    • K$_{is}$ = потенциальная мощность завода _i_ размера _s_
Аналитика цепочек поставок на Python
from pulp import *

# 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]))
Аналитика цепочек поставок на Python

Продолжение примера кода

# 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

Итоги

Модель размещения производств с ограничениями:

  • Ограничения
    • Суммарное производство = Суммарный спрос
    • Суммарное производство ≤ Суммарная производственная мощность
Аналитика цепочек поставок на Python

Повторение пройденного

Аналитика цепочек поставок на Python

Preparing Video For Download...