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

Аналітика ланцюга постачань у Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Що таке PuLP

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

  • Підтримується COIN-OR Foundation (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 — планування ресурсів

  • Мета — максимізувати прибуток
    • Profit = 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 = Максимізувати або мінімізувати цільову функцію
    • Minimize = LpMinimize (типово)
    • Maximize = 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. Initialize Class
  2. Означити змінні
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Аналітика ланцюга постачань у Python

Приклад PuLP — планування ресурсів

  1. Initialize Class
  2. Означити змінні
  3. Задати цільову функцію
# Define Objective Function
model += 20 * A + 40 * B
Аналітика ланцюга постачань у Python

Приклад PuLP — планування ресурсів

  1. Initialize Class
  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. Initialize Class
  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 — це засіб моделювання LP/IP у Python
  • Розглянули 5 кроків процесу моделювання в PuLP

    1. Ініціалізувати модель
    2. Означити змінні рішень
    3. Задати цільову функцію
    4. Задати обмеження
    5. Розв'язати модель
  • Завершили приклад планування ресурсів

Аналітика ланцюга постачань у Python

Давайте потренуємось!

Аналітика ланцюга постачань у Python

Preparing Video For Download...