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
Preview:
TRANSCRIPT
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?
top related