Aula 04: Modelagem e Python-MIP - Otimização …Aula de hoje 1 Dicas de modelagem 2 Exemplo 1:...

Post on 28-Aug-2020

5 views 0 download

Transcript of Aula 04: Modelagem e Python-MIP - Otimização …Aula de hoje 1 Dicas de modelagem 2 Exemplo 1:...

Aula 04: Modelagem e Python-MIPOtimização Linear e Inteira

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

BCC464/PCC174 – 2018/2Departamento de Computação – UFOP

Previously...

Aulas anteriores:

Breve histórico

Exemplos básicos de Modelagem

Método gráfico e definições

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

Aula de hoje

1 Dicas de modelagem

2 Exemplo 1: Fábrica de brinquedos

3 Exemplo 2: Transporte

4 Aula prática

5 Exercícios

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

Aula de hoje

1 Dicas de modelagem

2 Exemplo 1: Fábrica de brinquedos

3 Exemplo 2: Transporte

4 Aula prática

5 Exercícios

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

Passo-a-passo para modelar um problema:

1 Elabore um esquema do problema.

2 Encontre e escreva uma solução qualquer para o problema.

3 Olhando para a solução, defina as variáveis de decisão.

4 Observando as variáveis de decisão, defina a função objetivo, ouseja, o que deve ser maximizado ou minimizado.

5 Finalmente, defina as restrições do problema.

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

Aula de hoje

1 Dicas de modelagem

2 Exemplo 1: Fábrica de brinquedos

3 Exemplo 2: Transporte

4 Aula prática

5 Exercícios

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

Exemplo 1: Fábrica de brinquedos

Fonte: [1] Luís Herique Rodrigues et al. (2014), Pesquisa Operacional -Programação Linear Passo a Passo, Editora Unisinos.

Uma pequena oficina de brinquedos produz dois tipos de brinquedos: caminhãode madeira e boneca de pano. O lucro do caminhão é de R$ 10,00 por unidade eda boneca de pano é de R$ 8,00 por unidade. São necessárias seis pessoaspara fazer um lote de dez caminhões por dia e quatro pessoas para fazer um lotede 14 bonecas por dia. Há 18 pessoas disponíveis para produzir os itens,podendo ser alocadas em qualquer um dos dois, em qualquer etapa. Devido àdemanda existente é necessário fazer ao menos um lote de caminhões e um lotede bonecas por dia.

Formule um modelo de Programação Linear que maximize a lucratividade diária.

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

Passo 1: Esquema

Figura 3 – Esquema simplificado do problema 1 – Oficina de brinquedos.

Nessa Figura é possível observar que, conforme tomamos a decisão de fazer maisou menos lotes de caminhões ou bonecas, precisaremos alocar mais ou menos pessoasda empresa na produção de um produto, resultando em um lucro maior ou menor deacordo com a nossa decisão.

Passo 2 – Definindo uma solução para o problema

Definir uma solução para o problema nos ajudará a entender qual é a variável dedecisão. Nesse exemplo, para decidir quantos lotes de caminhões ou bonecas poderemosfazer, precisaremos considerar as restrições quanto à mão de obra disponível, bem comoa quantidade mínima de produtos a vender. O Quadro 3 representa uma possível soluçãopara o problema.

Quadro 3 – Solução para o problema 1 – Oficina de brinquedos

Produto Quantidade de lotes aproduzir

Lucro resultante

Bonecas 1 R$ 112,00Caminhões 2 R$ 200,00

Totais - R$ 312,00

Lucro: R$ 100,00 por lote (10 caminhões) Lucro: R$ 112,00 por lote (14 bonecas)

Figura: Esquema (imagem extraída de Rodrigues et. al [1])

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

Passo 2: Solução

Qual seria uma solução para o problema?

Produzir 1 lote de caminhões e 1 lote de bonecas?

Utilizaríamos neste caso 10 pessoas (6 + 4)

Lucraríamos R$ 212,00 (R$ 100,00 + R$ 112,00)

Solução parece ok... não utilizamos mais de 18 pessoas eatendemos à demanda mínima de fazer ao menos um lote decaminhões e um lote de bonecas.

Solução viável!

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

Passo 3: Variáveis

Solução: 1 lote de caminhões e 1 lote de bonecas!

Qual decisão foi tomada?

Número de lotes de caminhões: x1

Número de lotes de bonecas: x2

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

Passo 4: Função objetivo

O que estamos minimizando/maximizando?

Maximizando o lucro!

Ou seja: max 100x1 + 112x2

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

Passo 5: Restrições

Quais são as restrições?

1 Há 18 pessoas disponíveis:

6x1 + 4x2 ≤ 18

2 Devemos produzir no mínimo 1 lote de caminhões:

x1 ≥ 1

3 Devemos produzir no mínimo 1 lote de bonecas:

x2 ≥ 1

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

Modelo

Logo, devemos resolver o modelo de programação linear a seguir:

max 100x1 + 112x2

s.a. 6x1 + 4x2 ≤ 18

x1 ≥ 1

x2 ≥ 1

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

Método gráfico

O modelo pode ser facilmente resolvido pelo método gráfico:

x1

x2

�1 1 2 3 4 5 6 7 8 9 10 11 12�1

1

2

3

4

5

6

7

8

9

10

11

12

1

Modelo

Logo, devemos resolver o modelo de programação linear a seguir:

max 100x1 + 112x2

s.a. 6x1 + 4x2 18

x1 � 1

x2 � 1

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

x1

x2

�1 1 2 3 4 5 6 7 8 9 10 11 12�1

1

2

3

4

5

6

7

8

9

10

11

12

1

x1

x2

�1 1 2 3 4 5 6 7 8 9 10 11 12�1

1

2

3

4

5

6

7

8

9

10

11

12

1

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

Aula de hoje

1 Dicas de modelagem

2 Exemplo 1: Fábrica de brinquedos

3 Exemplo 2: Transporte

4 Aula prática

5 Exercícios

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

Exemplo 2: Transporte

Fonte: [1] Luís Herique Rodrigues et al. (2014), Pesquisa Operacional -Programação Linear Passo a Passo, Editora Unisinos.

Você possui três fábricas localizadas em regiões geográficas distintas, e precisasaber quanto deve produzir e transportar para quatro diferentes mercados a umcusto mínimo. As informações do custo de transporte unitário entre as fábricas eos mercados estão no quadro a seguir.

Xij – Quantidade de unidades de produto produzidos na fábrica i a ser enviado parao mercado j

Passo 4 – Identificando o que deve ser minimizado ou maximizado

Esse problema indica que “Você possui três fábricas localizadas em regiõesgeográficas distintas e precisa saber quanto deve produzir e transportar para quatrodiferentes mercados, a um custo mínimo”. Dessa maneira, podemos entender que oproblema trata-se da minimização dos custos, e sua função objetivo pode ser definida daseguinte forma:

MINIMIZAR CUSTO

Onde o custo é: custo de transporte da fábrica i para o mercado j multiplicadopela quantidade de unidades de produto produzidos na fábrica i a ser enviado para omercado j.

Passo 5 – Identificando classes de restrições

Ao observar o quadro que apresenta os dados do problema, identificam-se duasclasses de restrições, destacadas a seguir:

Quadro 9 – Classes de restrições do problema 3 – transporte

Custo de transporteMercados

Capacidade Produtiva1 2 3 4

FábricasA $ 0,90/un $ 1,00/un $ 1,80/un $ 1,05/un 22.500 unB $ 2,10/un $ 0,80/un $ 0,70/un $ 1,15/un 21.000 unC $ 1,10/un $ 1,00/un $ 1,20/un $ 1,50/un 19.500 un

Demanda mínima 10.000un 15.000un 11.000un 10.000un

Demanda mínima: Para cada um dos mercados deve ser expedido uma quantidade

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

Passo 1: Esquema

Deve-se definir quantos produtos de cada fábrica devem ser enviados acada mercado, considerando capacidade e demanda mínima...

Figura 6 – Esquema do Problema 3 – Transporte.

Passo 2 – Definindo uma solução para o problema

Uma proposta de solução para o problema deve indicar quantas unidades deproduto devem ser enviadas de cada fábrica para cada mercado, atendendo tanto àscapacidades produtivas máximas quanto às demandas mínimas de cada mercado. Umasolução possível para o problema é evidenciada no Quadro 8.

Quadro 8 – Solução para o problema 3 – transporte

Unidades enviadasPara o mercado...

1 2 3 4

Da Fábrica...A 5000 5000 5000 5000B 5000 5000 5000 5000C 4000 5000 4000 4000

Passo 3 – Definindo variáveis de decisão

Ao definirmos quantas unidades devem ser enviadas de cada fábrica para cadamercado, deparamo-nos com a própria variável de decisão, que pode ser expressa daseguinte maneira:

Figura: Esquema (imagem extraída de Rodrigues et. al [1])

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

Passo 2: Solução

Uma solução deve indicar quantas unidades de produto devem serenviadas de cada fábrica para cada mercado, respeitando as capacidadesprodutivas e atendendo as demandas mínimas de cada mercado.

Eis uma solução possível:

Figura 6 – Esquema do Problema 3 – Transporte.

Passo 2 – Definindo uma solução para o problema

Uma proposta de solução para o problema deve indicar quantas unidades deproduto devem ser enviadas de cada fábrica para cada mercado, atendendo tanto àscapacidades produtivas máximas quanto às demandas mínimas de cada mercado. Umasolução possível para o problema é evidenciada no Quadro 8.

Quadro 8 – Solução para o problema 3 – transporte

Unidades enviadasPara o mercado...

1 2 3 4

Da Fábrica...A 5000 5000 5000 5000B 5000 5000 5000 5000C 4000 5000 4000 4000

Passo 3 – Definindo variáveis de decisão

Ao definirmos quantas unidades devem ser enviadas de cada fábrica para cadamercado, deparamo-nos com a própria variável de decisão, que pode ser expressa daseguinte maneira:17 / 30 Túlio Toffolo – Otimização Linear e Inteira – Aula 04: Modelagem e Python-MIP

Passo 3: Variáveis

Estamos decidindo quanto enviar de cada fábrica para cada mercado...

Seja F o conjunto de fábricas

Seja M o conjunto de mercados

Variáveis:

xi,j : quantidade a enviar da fábrica i ∈ F para o mercado j ∈M .

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

Passo 4: Função objetivo

Devemos minimizar o custo de transporte...

Seja ci,j o custo de enviar uma unidade do produto produzido nafábrica i ∈ F para o mercado j ∈M

Função objetivo:

min∑i∈F

∑j∈M

ci,jxi,j

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

Passo 5: Restrições

Xij – Quantidade de unidades de produto produzidos na fábrica i a ser enviado parao mercado j

Passo 4 – Identificando o que deve ser minimizado ou maximizado

Esse problema indica que “Você possui três fábricas localizadas em regiõesgeográficas distintas e precisa saber quanto deve produzir e transportar para quatrodiferentes mercados, a um custo mínimo”. Dessa maneira, podemos entender que oproblema trata-se da minimização dos custos, e sua função objetivo pode ser definida daseguinte forma:

MINIMIZAR CUSTO

Onde o custo é: custo de transporte da fábrica i para o mercado j multiplicadopela quantidade de unidades de produto produzidos na fábrica i a ser enviado para omercado j.

Passo 5 – Identificando classes de restrições

Ao observar o quadro que apresenta os dados do problema, identificam-se duasclasses de restrições, destacadas a seguir:

Quadro 9 – Classes de restrições do problema 3 – transporte

Custo de transporteMercados

Capacidade Produtiva1 2 3 4

FábricasA $ 0,90/un $ 1,00/un $ 1,80/un $ 1,05/un 22.500 unB $ 2,10/un $ 0,80/un $ 0,70/un $ 1,15/un 21.000 unC $ 1,10/un $ 1,00/un $ 1,20/un $ 1,50/un 19.500 un

Demanda mínima 10.000un 15.000un 11.000un 10.000un

Demanda mínima: Para cada um dos mercados deve ser expedido uma quantidadeSeja pi a capacidade produtiva da fábrica i ∈ F

∀i ∈ F :∑j∈M

xi,j ≤ pi

Seja dj a demanda mínima do mercado j ∈M

∀j ∈M :∑i∈F

xi,j ≥ dj

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

Exemplo 2: Transporte

Eis o modelo de programação linear:

min∑i∈F

∑j∈M

ci,jxi,j

s.a.∑j∈M

xi,j ≤ pi ∀i ∈ F

∑i∈F

xi,j ≥ dj ∀j ∈M

xi,j ≥ 0 ∀i ∈ F,∀j ∈M

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

Aula de hoje

1 Dicas de modelagem

2 Exemplo 1: Fábrica de brinquedos

3 Exemplo 2: Transporte

4 Aula prática

5 Exercícios

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

Python-MIP

Vamos utilizar o Python-MIP para implementar os dois modelos vistosnesta aula.

Requisitos:

Linguagem Python 3.5 ou mais recente

Framework Python-MIP, desenvolvido por Túlio Toffolo e HaroldoSantos (projeto apoiado pela COIN-OR)

Mais informações: http:// www.python-mip.com

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

Exemplo 1

1 from mip.model import *23 model = Model("Exemplo 1", MAXIMIZE)45 # criando variáveis6 x1 = model.add_var()7 x2 = model.add_var()89 # criando a função objetivo

10 model += 100*x1 + 112*x21112 # adicionando as restrições13 model += 6*x1 + 4*x2 <= 1814 model += x1 >= 115 model += x2 >= 11617 # resolvendo o modelo18 model.optimize()1920 # imprimindo a solução21 print("x1 = {x1.x}, x2 = {x2.x}".format(**locals()))

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

Exemplo 1 (alternativo)

1 from mip.model import *23 model = Model("Exemplo 1", MAXIMIZE)45 # criando variáveis6 x1 = model.add_var()7 x2 = model.add_var()89 # criando a função objetivo

10 model.objective = 100*x1 + 112*x21112 # adicionando as restrições13 model.add_constr(6*x1 + 4*x2 <= 18)14 model.add_constr(x1 >= 1)15 model.add_constr(x2 >= 1)1617 # resolvendo o modelo18 model.optimize()1920 # imprimindo a solução21 print("x1 = {x1.x}, x2 = {x2.x}".format(**locals()))

25 / 30 Túlio Toffolo – Otimização Linear e Inteira – Aula 04: Modelagem e Python-MIP

Exemplo 2 (I)

1 from mip.model import *23 model = Model("Exemplo 2")45 # dados de entrada6 F = [ 0, 1, 2 ]7 M = [ 0, 1, 2, 3 ]8 c = [ [ 0.90, 1.00, 1.80, 1.05 ],9 [ 2.10, 0.80, 0.70, 1.15 ],

10 [ 1.10, 1.00, 1.20, 1.50 ] ]11 p = [ 22500, 21000, 19500 ]12 d = [ 10000, 15000, 11000, 10000 ]1314 # criando variáveis15 x = [ [ model.add_var() for j in M ] for i in F ]1617 # poderíamos escrever, alternativamente:18 x = []19 for i in F:20 x.append([])21 for j in M:22 x[i].append(model.add_var())

26 / 30 Túlio Toffolo – Otimização Linear e Inteira – Aula 04: Modelagem e Python-MIP

Exemplo 2 (II)

1 ...23 # criando a função objetivo4 model += xsum(c[i][j]*x[i][j] for i in F for j in M)56 # adicionando as restrições7 for i in F:8 model += xsum(x[i][j] for j in M) <= p[i]9 for j in M:

10 model += xsum(x[i][j] for i in F) >= d[j]1112 # resolvendo o modelo13 model.optimize()1415 # imprimindo a solução16 print("\n-----------------------------------")17 print("Solução ótima com custo: {}\n".format(model.objective_value))18 for i in F:19 for j in M:20 print("x({},{}) = {}".format(i, j, x[i][j].x))21 print("-----------------------------------\n")

27 / 30 Túlio Toffolo – Otimização Linear e Inteira – Aula 04: Modelagem e Python-MIP

28 / 30 Túlio Toffolo – Otimização Linear e Inteira – Aula 04: Modelagem e Python-MIP

Aula de hoje

1 Dicas de modelagem

2 Exemplo 1: Fábrica de brinquedos

3 Exemplo 2: Transporte

4 Aula prática

5 Exercícios

29 / 30 Túlio Toffolo – Otimização Linear e Inteira – Aula 04: Modelagem e Python-MIP

Exercícios

Exercício 1Um sapateiro é capaz de fazer 6 sapatos por hora ou 5 cintos por hora.Ele gasta 2 unidades de couro para fabricar um sapato e uma unidade decouro para fabricar um cinto. Tem-se um total de 6 unidades disponíveisde couro. O lucro unitário do sapato é de 5 unidades monetárias e o docinto é de 2 unidades monetárias.

Ajude o sapateiro a lucrar o máximo que ele puder por dia (considere queo dia tem 8 horas): formule um Programa Linear (PL) e, em seguida:

Implemente e resolva a formulação utilizando o Python-MIP e CBC.

Resolva também utilizando o método gráfico.

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

/ 12

Perguntas?