Modelo de programação inteira (cplex)

Com a evolução das aplicações de Python para resolver problemas de programação linear e suas variações, os analistas de Supply Chain e ou Pesquisa Operacional tem acesso a inúmeros pacotes e ferramentas que suportam a tomada de decisão, baseando-se nisso vamos demonstrar a aplicação de PLI em uma indústria automotiva.
A programação linear trata da maximização (ou minimização) de uma função objetivo linear, sujeita a restrições lineares, onde todas as variáveis ​​de decisão são contínuas. Ou seja, nenhuma variável discreta é permitida. O objetivo linear e as restrições devem consistir em expressões lineares.

Formulação programação linear

Formula da programação linear

Já a programação inteira pode ser entendida como uma caso específico da programação linear, onde as variáveis devem ser inteiras (ou ao menos, parte destas variáveis).

Formulação programação inteira

Formula da programação inteira

Neste paragrafo, você analisará um problema de produção simples em termos de variáveis ​​de decisão, função objetivo e restrições. Apenas para conhecimento acadêmico esse problema trata-se de alocação de recursos. Devido as caracteristicas dos output necessitarem ser variaveis inteiras torna o problema abaixo, uma variação da programação linear, conhecida como programação inteira. Todos os dados usados nesse problema são fictícios, mas podem ser adaptados para problemas reais.

Descrição do problema

Uma pequena manufatura produz dois modelos, standard e luxo, de um certo produto. Cada unidade do modelo standard exige 1 hora de lixação e 1 hora de polimento. Cada unidade do modelo luxo exige 1 hora de lixação e 4 horas de polimento. A fábrica dispõe de 2 lixadoras e 3 polidoras, cada um trabalhando 40 horas semanais. As margens de lucro são R$ 24 e R$ 34, respectivamente, para cada unidade standard e luxo. Não existem restrições de demanda para ambos os modelos. Vamos calcular a produção semanal que maximiza a margem total de lucro do fabricante. ANDRADE, E. L. Introdução à Pesquisa Operacional – métodos e modelos para análise de decisão. LTC editora. 2ª edição. 2002

Informações

Em primeiro lugar, para chegar a um modelo descritivo, consideremos as seguintes questões:

  • Quais são as variáveis ​​de decisão?
  • Qual é o objetivo?
  • Quais são as restrições?

Variáveis ​​de decisão
x1 = carro standard
x2 = carro luxo

Objetivo: Maximizar o lucro
Lucro Máximo = 24 * X1 + 34 * X2

Em segundo lugar, vamos realizar a instalação dos pacotes CPLEX(solver) e DOCPLEX , para ser possível a execução do nosso modelo de programação inteira:

Importando o pacote Docplex e o Solver Cplex da IBM

!pip install cplex
!pip install docplex

Além disso, após o carregamento dos pacotes precisamos criar uma instancia com o nome do modelo a ser resolvido:

from docplex.mp.model import Model

# creando uma instancia com o nome:
m = Model(name='carro_producao')

Esse é um ponto importante para resolução deste modelo, a declaração das variáveis deve ser feita como inteiras.

# por padrão todas as variaveis do Docplex tem limite inferior 0 e superior infinito
x1 = m.integer_var(name='Standard')
x2 = m.integer_var(name='Luxo')

Restrições
1 * x1 + 1 * x2 <= 80 (40h semanais 2 lixadoras)
1 * x1 + 4 * X2 <= 120 (40 h semanais * 2 polidoras)

# incluindo as restrições

# restrição #1: Limite Lixadora
ct_prod = m.add_constraint( 1 * x1 + 1 * x2 <= 80) # 40h semanais x 2Lixadoras

# restrição #4: Limite Polidora
ct_prod = m.add_constraint( 1 * x1 + 4 * x2 <= 120) # 40h semanais x 3 Polidoras

Objetivo
Sobre tudo, como dito no começo, nosso objetivo principal é maximizar o lucro, através da alocação correta dos recursos, para decidir quanto produzir de cada modelo de veículo, após rodarmos o codigo abaixo, termos informações importantes tais como, nome do modelo, quantidade de variaveis de decisão, tipo de variavel, numero de restrições e objetivo do modelo.

m.maximize(24 * x1 + 34 * x2)
m.print_information()
Model: carro_producao
 - number of variables: 2
   - binary=0, integer=2, continuous=0
 - number of constraints: 2
   - linear=2
 - parameters: defaults
 - objective: maximize
 - problem type is: MILP

Resolução do modelo
Em conclusão, com a resolução do modelo vimos que para garantir o ganho máximo de R$2050 é necessário produzir 67 carros do modelo standard e 13 do modelo de luxo.

s = m.solve()
m.print_solution()
objective: 2050
  Standard=67
  Luxo=13

Em trabalhos futuros, explorarei outras variações dos problemas de programação lienar buscando resolver problemas ligados ao gerenciamento da cadeia de suprimentos.

You May Also Like

Leave a Reply

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.