Você está na página 1de 26

Aula 06: Modelagem e Python-MIP

Otimização Linear e Inteira

Túlio A. M. Toffolo
http://www.toffolo.com.br

BCC464/PCC174 – 2019/2
Departamento de Computação – UFOP
Previously...

Aula Anterior:

Algoritmo Simplex (Parte 1)

2 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Aula de Hoje

1 Formato LP

2 Exemplo de modelagem 1

3 Exemplo de modelagem 2

4 Aula Prática

3 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Aula de Hoje

1 Formato LP

2 Exemplo de modelagem 1

3 Exemplo de modelagem 2

4 Aula Prática

3 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Introdução

Formatos conhecidos para entrada de programas lineares:


MPS Mathematical Programming System :
padrão da indústria
pouco intuitivo, confuso e com limitações

LP CPLEX LP file format :


padrão criado para uso com o resolvedor CPLEX
mais fácil e prático do que o formato MPS
aceito nos principais resolvedores modernos
arquivos podem ser convertidos para MPS

4 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Formato LP

Componentes
função objetivo
restrições
informações de variáveis
limites
variáveis inteiras genéricas
variáveis binárias

5 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Problema da Dieta

DIETA . LP
1 Minimize
2 custo: 3 x1 + 2.5 x2
3
4 Subject to
5 vitaminas: 6 x1 + 4 x2 >= 32
6 proteinas: 5 x1 + 6 x2 >= 36
7
8 End

6 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Resolvendo usando Python-MIP + Solver
Comando
1 from mip.model import *
2 model = Model()
3 model.read('dieta.lp')
4 model.optimize()

Exemplo Limites
1 Optimize a model with 2 rows, 2 columns and 4 nonzeros
2 Coefficient statistics:
3 Matrix range [4e+00, 6e+00]
4 Objective range [2e+00, 3e+00]
5 Bounds range [0e+00, 0e+00]
6 RHS range [3e+01, 4e+01]
7 Presolve time: 0.02s
8 Presolved: 2 rows, 2 columns, 4 nonzeros
9
10 Iteration Objective Primal Inf. Dual Inf. Time
11 0 0.0000000e+00 8.500000e+00 0.000000e+00 0s
12 2 1.7750000e+01 0.000000e+00 0.000000e+00 0s
13
14 Solved in 2 iterations and 0.02 seconds
15 Optimal objective 1.775000000e+01

7 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Limites e Integralidade

Podem ser especificadas restrições específicas sobre algumas variáveis

Essas restrições são informadas após a seção das restrições normais e


podem ser dos seguintes tipos:

Restrição de limites -Seção Bounds:

Exemplo Limites
1 Subject to
2 ...
3 Bounds
4 0 <= x1 <= 40
5 2 <= x4 <= 3

8 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Limites e Integralidade (cont.)

Para variáveis para as quais não são permitidos valores fracionários


temos as seções:

General: variáveis inteiras de modo geral


Binary: variáveis inteiras que somente podem assumir valor zero ou um

Exemplo Integralidade
1 Subject to
2 ...
3 General
4 x1
5 x2
6 Binary
7 x3

9 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Aula de Hoje

1 Formato LP

2 Exemplo de modelagem 1

3 Exemplo de modelagem 2

4 Aula Prática

10 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Modelagem - Planejamento da Produção

Nossa companhia fabrica tapetes artesanais, um produto com demanda sazonal.


Obtivemos as demandas demanda1 , demanda 2 , . . . , demanda 12 para o ano que se
inicia. As mesmas variam desde 440 até 920.

Atualmente temos 30 empregados, e cada um faz 20 tapetes por mês e recebe $


2.000,00. Estamos sem estoque de carpetes no momento.

As flutuações de demanda podem ser gerenciadas do seguinte modo:


1 trabalho extra: nesse caso paga-se 80% a mais do que o salário regular; cada
funcionário pode ter um máximo de 30% de trabalho a mais no mês;
2 contratar ou despedir: custo de $ 320 e $ 400, respectivamente;
3 manter estoques: custa $ 8 por tapete por mês; atualmente não temos tapetes
estocados e precisamos terminar o ano sem estoque também.

Como atender toda a demanda minimizando os custos de produção ?

11 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Planejamento da Produção - Variáveis

ti trabalhadores no i-ésimo mês; (t0 = 30);


xi número de tapetes feitos i-ésimo mês;
ei número de tapetes feitos utilizando-se trabalho extra no
mês i;
ci , di respectivamente: contratados e demitidos no início do mês
i;
ai número de tapetes armazenados ao final do mês i (a0 = 0).

12 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Planejamento da Produção - Restrições

Produção mês i (i = 1, . . . , 12)


xi = 20ti + ei
Máximo prod. com trab. extra (20 × 0, 3)
Variáveis ei ≤ 6ti
ti trabalhadores
xi produção Tapetes armezanados no final do mês i
ci contratados
ai = a(i−1) + xi − demanda i
di demitidos
ei trab. extra
ai armazenados Trabalhadores no início do mês i
ti = t(i−1) + ci − di
Não negatividade
ti , xi , ci , ei , ai ≥ 0 ∀i

13 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Planejamento da Produção - Função Objetivo

Minimizando os Custos
Variáveis  
2000ti +
ti trabalhadores
xi produção X12 
 8ai + 

ci contratados  180ei + 
di demitidos  
ei trab. extra i=1  320ci + 
ai armazenados 400di

14 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Aula de Hoje

1 Formato LP

2 Exemplo de modelagem 1

3 Exemplo de modelagem 2

4 Aula Prática

15 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Modelagem - Análise de Investimentos

Um investidor tem 3 alternativas de investimento: A, B e C para o ano que se inicia. Os


investimentos não são mutuamente exclusivos e o dinheiro proveniente de lucros em uma
aplicação pode ser reinvestido em qualquer uma das aplicações. As aplicações têm as
seguintes características:

A: disponível no início de cada um dos quatro trimestres; cada R$ investido em A no


princípio do trimestre devolve R$ 1,10 no final do trimestre;
B : disponível no início de cada um dos dois semestres; cada R$ investido em B retorna
R$ 1,20 ao final do semestre.

C : disponível somente no início do ano; Cada R$ investido em C devolve R$ 1,40 no


final do ano.

O capital do investidor é de R$ 5.000,00. Como maximizar o capital do investidor até o


final do ano?

16 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Carteira de Aplicações

Variáveis de Decisão
xij : quantidade investida na aplicação i no trimestre j


i ∈ {A, B, C}, j ∈ {1, 2, 3, 4}

xA1 , xA2 , xA3 , xA4 , xB1 , xB3 , xC1

17 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


O Fluxo do Capital

xC1 xB1 xA1 xA2 xB3 xA3 xA4

1 2 3 4 5

1,1 xA1 1,1 xA2 1,2 xB1 1,1 xA3 1,1 xA4 1,2 xB3 1,4 xC1

18 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


O Fluxo do Capital : Função Objetivo

xC1 xB1 xA1 xA2 xB3 xA3 xA4

1 2 3 4 5

1,1 xA1 1,1 xA2 1,2 xB1 1,1 xA3 1,1 xA4 1,2 xB3 1,4 xC1

Maximize

1, 1xA4 + 1, 2xB3 + 1, 4xC1


(lembre-se que o dinheiro ganho em períodos anteriores pode ser reinvestido.)

19 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


O Fluxo do Capital : Restrições

Período 1
Os R$ 5.000,00 disponíveis podem ser guardados ou investidos em A,B ou C. Criaremos
uma variável artificial g1 que indica a quantidade guardada no período 1.

xA1 + xB1 + xC1 + g1 = 5000

Período 2
xA2 + g2 = 1, 1xA1 + g1

Período n
investimentos em n + guardados em n
=
lucros em n + guardados em n − 1

20 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Fluxo de Capital - Modelo

Maximize:

1, 1xA4 + 1, 2xB3 + 1, 4xC1 + g4


Sujeito a:

xA1 + xB1 + xC1 + g1 = 5000


xA2 + g2 = g1 + 1, 1xA1
xA3 + xB3 + g3 = g2 + 1, 1xA2 + 1, 2xB1
xA4 + g4 = g3 + 1, 1xA3
xij ≥ 0 ∀ i, j
gj ≥ 0 ∀j

21 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Aula de Hoje

1 Formato LP

2 Exemplo de modelagem 1

3 Exemplo de modelagem 2

4 Aula Prática

22 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Parte 1: Modelagem

Exercício
A cia. farmacêutica Margarida fabrica 2 drogas: d1 e d2 . As drogas são produzidas pela
mistura de dois compostos químicos: q1 e q2 . Considerando seu peso total, a droga d1
deve apresentar ao menos 65% de q1 e a droga d2 deve apresentar ao menos 55% de
q1 . A droga d1 vende por R$ 60,00 a grama e a droga d2 vende a R$ 40,00 a grama.
Os compostos q1 e q2 podem ser produzidos por dois processos de fabricação, p1 e p2 .
Executar o processo p1 por uma hora requer 30 gramas de matéria-prima crua, 2 horas
de trabalho e produz 15 gramas de cada composto químico. O processo p2 executado por
uma hora requer 20 gramas de matéria-prima crua, 3 horas de trabalho 2 produz 20 gramas
de q1 e 10 gramas de q2 . Considerando a disponibilidade de 120 horas de trabalho e 100
gramas de matéria-prima crua, formule o Problema de Programação Linear que maximiza
o faturamento da cia. Margarida.

Formule um PL que maximiza o faturamento da cia. Margarida.

23 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Parte 2: Implementação

1 Modelar a formulação a seguir no formato LP e em seguida resolva


usando o PythonMIP
Exercício anterior (cia. farmacêutica Margarida)

2 Implementar os modelos a seguir usando PythonMIP


Exemplo de Modelagem 1 (Planejamento da Produção)

24 / 24 Túlio Toffolo – Otimização Linear e Inteira – Aula 06: Modelagem e Python-MIP


Perguntas?

/ 12

Você também pode gostar