Основы моделирования в PuLP

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

Aaren Stubberfield

Supply Chain Analytics Mgr.

Что такое PuLP

  • PuLP — фреймворк для моделирования задач линейного (LP) и целочисленного (IP) программирования на Python

  • Поддерживается фондом COIN-OR (Computational Infrastructure for Operations Research)

  • PuLP взаимодействует с решателями:

    • CPLEX
    • COIN
    • Gurobi
    • и др.
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

  • Консультант пекарни, выпускающей 2 вида тортов
  • Месяц — 30 дней
  • В наличии:
    • 1 духовка
    • 2 пекаря
    • 1 упаковщик — работает только 22 дня
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

  • Потребность в ресурсах для 2 видов тортов:
Торт A Торт B
Духовка 0,5 дня 1 день
Пекари 1 день 2,5 дня
Упаковщик 1 день 2 дня

.

Торт A Торт B
Прибыль $20,00 $40,00
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

  • Цель — максимизация прибыли
    • Прибыль = 20*A + 40*B
  • При ограничениях:
    • A ≥ 0
    • B ≥ 0
    • 0.5A + 1B ≤ 30
    • 1A + 2.5B ≤ 60
    • 1A + 2B ≤ 22
Аналитика цепочек поставок на Python

Типовой процесс моделирования в PuLP

  1. Инициализация модели
  2. Определение переменных решения
  3. Определение целевой функции
  4. Определение ограничений
  5. Решение модели
Аналитика цепочек поставок на Python

Инициализация модели — LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = имя задачи в выходном файле .lp, например, "My LP Problem"
  • sense = максимизация или минимизация целевой функции
    • Минимизация = LpMinimize (по умолчанию)
    • Максимизация = LpMaximize
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

  1. Инициализация модели
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Аналитика цепочек поставок на Python

Определение переменных решения — LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = имя переменной в выходном файле .lp
  • lowBound = нижняя граница
  • upBound = верхняя граница
  • cat = тип переменной
    • Integer
    • Binary
    • Continuous (по умолчанию)
  • e = используется при столбцовом моделировании
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

  1. Инициализация модели
  2. Определение переменных
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

  1. Инициализация модели
  2. Определение переменных
  3. Определение целевой функции
# Define Objective Function
model += 20 * A + 40 * B
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

  1. Инициализация модели
  2. Определение переменных
  3. Определение целевой функции
  4. Определение ограничений
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

  1. Инициализация модели
  2. Определение переменных
  3. Определение целевой функции
  4. Определение ограничений
  5. Решение модели
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Аналитика цепочек поставок на Python

Пример PuLP — планирование ресурсов

from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits",
                   LpMaximize)

# Define Decision Variables
A = LpVariable('A', lowBound=0,
                cat='Integer')
B = LpVariable('B', lowBound=0, 
                cat='Integer')

# Define Objective Function
model += 20 * A + 40 * B
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22

# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Аналитика цепочек поставок на Python

Итоги

  • PuLP — модуль Python для LP / IP моделирования
  • Рассмотрены 5 шагов процесса моделирования в PuLP

    1. Инициализация модели
    2. Определение переменных решения
    3. Определение целевой функции
    4. Определение ограничений
    5. Решение модели
  • Разобран пример планирования ресурсов

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

Давайте потренируемся!

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

Preparing Video For Download...