Noções básicas de modelagem com PuLP

Análise de Cadeia de Suprimentos em Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

O que é PuLP

  • PuLP é um framework de modelagem para problemas de Programação Linear (LP) e Inteira (IP) em Python

  • Mantido pela fundação COIN-OR (Computational Infrastructure for Operations Research)

  • PuLP se integra a solvers

    • CPLEX
    • COIN
    • Gurobi
    • etc.
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

  • Consultoria para confeitaria boutique que vende 2 tipos de bolos
  • Mês de 30 dias
  • Há:
    • 1 forno
    • 2 confeiteiros
    • 1 embalador – trabalha só 22 dias
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

  • Necessidades de recursos diferentes para os 2 tipos de bolos:
Bolo A Bolo B
Forno 0,5 dia 1 dia
Confeiteiros 1 dia 2,5 dias
Embaladores 1 dia 2 dias

.

Bolo A Bolo B
Lucro US$ 20,00 US$ 40,00
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

  • Objetivo: maximizar o lucro
    • Lucro = 20*A + 40*B
  • Sujeito a:
    • A ≥ 0
    • B ≥ 0
    • 0,5A + 1B ≤ 30
    • 1A + 2,5B ≤ 60
    • 1A + 2B ≤ 22
Análise de Cadeia de Suprimentos em Python

Processo comum de modelagem no PuLP

  1. Inicializar o modelo
  2. Definir variáveis de decisão
  3. Definir a função objetivo
  4. Definir as restrições
  5. Resolver o modelo
Análise de Cadeia de Suprimentos em Python

Inicializando o modelo - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Nome do problema usado no arquivo .lp de saída, ou seja, "My LP Problem"
  • sense = Maximizar ou minimizar a função objetivo
    • Minimizar = LpMinimize (padrão)
    • Maximizar = LpMaximize
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

  1. Inicializar o modelo
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Análise de Cadeia de Suprimentos em Python

Definir variáveis de decisão - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Nome da variável usada no arquivo .lp de saída
  • lowBound = Limite inferior
  • upBound = Limite superior
  • cat = Tipo da variável
    • Integer
    • Binary
    • Continuous (padrão)
  • e = Usado para modelagem baseada em colunas
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

  1. Inicializar a classe
  2. Definir variáveis
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

  1. Inicializar a classe
  2. Definir variáveis
  3. Definir a função objetivo
# Define Objective Function
model += 20 * A + 40 * B
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

  1. Inicializar a classe
  2. Definir variáveis
  3. Definir a função objetivo
  4. Definir restrições
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

  1. Inicializar a classe
  2. Definir variáveis
  3. Definir a função objetivo
  4. Definir restrições
  5. Resolver o modelo
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Análise de Cadeia de Suprimentos em Python

Exemplo PuLP – alocação de recursos

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))
Análise de Cadeia de Suprimentos em Python

Resumo

  • PuLP é um modelador LP/IP em Python
  • Vimos as 5 etapas da modelagem no PuLP

    1. Inicializar o modelo
    2. Definir variáveis de decisão
    3. Definir a função objetivo
    4. Definir as restrições
    5. Resolver o modelo
  • Concluímos o exemplo de alocação de recursos

Análise de Cadeia de Suprimentos em Python

Vamos praticar!

Análise de Cadeia de Suprimentos em Python

Preparing Video For Download...