Buscar

Atividade Computacional - Atividade 3

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Atividade Computacional - Atividade 3
June 14, 2021
0.1 3ª Lista de Exercícios - Otimização Linear
Diego de Almeida Miranda - 133603
Felipe Hilário - 143417
Junho 2021
Instalando PULP caso seja necessário.
[1]: import os
os.system("pip3 install pulp")
[1]: 0
Importando PULP
[2]: import pulp
As descrições dos problemas e justificativa para a construção dos modelos utilizados se encontram
nos PDFs entregues nas atividades anteriores.
0.2 LISTA 1
Problema 1
[4]: # definindo o problema 1
prob1_1 = pulp.LpProblem("Composição de Racao", pulp.LpMinimize)
#definindo as variáveis
x1 = pulp.LpVariable("Milho", lowBound=0, cat="Continuous")
x2 = pulp.LpVariable("Farelo de Soja", lowBound=0, cat="Continuous")
#Função objetivo
Custo = 0.26*x1 + 0.32*x2
prob1_1 += Custo
#restrições
Proteinas = 0.07*x1 + 0.21*x2
prob1_1 += (Proteinas >= 0.34)
1
Carboidratos = 0.82*x1 + 0.79*x2
prob1_1 += (Carboidratos >= 2.64)
#Resolução
assert prob1_1.solve() == pulp.LpStatusOptimal
print(prob1_1)
print("A produção será feita da seguinte maneira:")
for var in [x1, x2]:
print("{} kg de {}".format(var.value(), var.name))
print("O custo de produção será de R${:.2f}".format(Custo.value()))
Composição_de_Racao:
MINIMIZE
0.32*Farelo_de_Soja + 0.26*Milho + 0.0
SUBJECT TO
_C1: 0.21 Farelo_de_Soja + 0.07 Milho >= 0.34
_C2: 0.79 Farelo_de_Soja + 0.82 Milho >= 2.64
VARIABLES
Farelo_de_Soja Continuous
Milho Continuous
A produção será feita da seguinte maneira:
2.4448246 kg de Milho
0.80410607 kg de Farelo_de_Soja
O custo de produção será de R$0.89
Problema 2
[5]: # definindo o problema 2
prob1_2 = pulp.LpProblem("Investimento", pulp.LpMaximize)
#definindo as variáveis
#Seja X_{i,j} o valor a ser investido na ação j no ano i, temos
x11 = pulp.LpVariable("Acao 1 ano 1", lowBound=0, cat="Continuous")
x12 = pulp.LpVariable("Acao 2 ano 1", lowBound=0, cat="Continuous")
x13 = pulp.LpVariable("Acao 3 ano 1", lowBound=0, cat="Continuous")
x21 = pulp.LpVariable("Acao 1 ano 2", lowBound=0, cat="Continuous")
x22 = pulp.LpVariable("Acao 2 ano 2", lowBound=0, cat="Continuous")
x23 = pulp.LpVariable("Acao 3 ano 2", lowBound=0, cat="Continuous")
x31 = pulp.LpVariable("Acao 1 ano 3", lowBound=0, cat="Continuous")
x32 = pulp.LpVariable("Acao 2 ano 3", lowBound=0, cat="Continuous")
x33 = pulp.LpVariable("Acao 3 ano 3", lowBound=0, cat="Continuous")
2
x41 = pulp.LpVariable("Acao 1 ano 4", lowBound=0, cat="Continuous")
x42 = pulp.LpVariable("Acao 2 ano 4", lowBound=0, cat="Continuous")
x43 = pulp.LpVariable("Acao 3 ano 4", lowBound=0, cat="Continuous")
x51 = pulp.LpVariable("Acao 1 ano 5", lowBound=0, cat="Continuous")
x52 = pulp.LpVariable("Acao 2 ano 5", lowBound=0, cat="Continuous")
x53 = pulp.LpVariable("Acao 3 ano 5", lowBound=0, cat="Continuous")
#Função objetivo
Lucro = 1.08*x51 + 1.17*x42 + 1.27*x33
prob1_2 += Lucro
#restrições
Ano1 = x11 + x12
prob1_2 += (Ano1 <= 22000)
Ano2 = x21 + x22 + x23
prob1_2 += (Ano2 <= 1.08*x11)
Ano3 = x31 + x32 + x33
prob1_2 += (Ano3 <= (1.08*x21 + 1.17*x12))
Ano4 = x41 + x42 + x43
prob1_2 += (Ano4 <= (1.08*x31 + 1.17*x22))
Ano5 = x51 + x52 + x53
prob1_2 += (Ano5 <= (1.08*x41 + 1.17*x32 + 1.27*x23))
#Resolução
assert prob1_2.solve() == pulp.LpStatusOptimal
print(prob1_2)
print("O investimento será feita da seguinte maneira:")
for var in [x11, x12, x13, x21, x22, x23, x31, x32, x33, x41, x42, x43,x51, x52, 
↪→x53 ]:
print("R${} na {}".format(var.value(), var.name))
print("E o lucro total será de R${}".format(Lucro.value()))
Investimento:
MAXIMIZE
1.08*Acao_1_ano_5 + 1.17*Acao_2_ano_4 + 1.27*Acao_3_ano_3 + 0.0
SUBJECT TO
_C1: Acao_1_ano_1 + Acao_2_ano_1 <= 22000
_C2: - 1.08 Acao_1_ano_1 + Acao_1_ano_2 + Acao_2_ano_2 + Acao_3_ano_2 <= 0
_C3: - 1.08 Acao_1_ano_2 + Acao_1_ano_3 - 1.17 Acao_2_ano_1 + Acao_2_ano_3
3
+ Acao_3_ano_3 <= 0
_C4: - 1.08 Acao_1_ano_3 + Acao_1_ano_4 - 1.17 Acao_2_ano_2 + Acao_2_ano_4
+ Acao_3_ano_4 <= 0
_C5: - 1.08 Acao_1_ano_4 + Acao_1_ano_5 - 1.17 Acao_2_ano_3 + Acao_2_ano_5
- 1.27 Acao_3_ano_2 + Acao_3_ano_5 <= 0
VARIABLES
Acao_1_ano_1 Continuous
Acao_1_ano_2 Continuous
Acao_1_ano_3 Continuous
Acao_1_ano_4 Continuous
Acao_1_ano_5 Continuous
Acao_2_ano_1 Continuous
Acao_2_ano_2 Continuous
Acao_2_ano_3 Continuous
Acao_2_ano_4 Continuous
Acao_2_ano_5 Continuous
Acao_3_ano_2 Continuous
Acao_3_ano_3 Continuous
Acao_3_ano_4 Continuous
Acao_3_ano_5 Continuous
O investimento será feita da seguinte maneira:
R$0.0 na Acao_1_ano_1
R$22000.0 na Acao_2_ano_1
R$None na Acao_3_ano_1
R$0.0 na Acao_1_ano_2
R$0.0 na Acao_2_ano_2
R$1e-12 na Acao_3_ano_2
R$0.0 na Acao_1_ano_3
R$0.0 na Acao_2_ano_3
R$25740.0 na Acao_3_ano_3
R$0.0 na Acao_1_ano_4
R$0.0 na Acao_2_ano_4
R$0.0 na Acao_3_ano_4
R$1.27e-12 na Acao_1_ano_5
R$0.0 na Acao_2_ano_5
R$0.0 na Acao_3_ano_5
E o lucro total será de R$32689.8
Problema 3
[6]: # definindo o problema 3
prob1_3 = pulp.LpProblem("Produção de Aço", pulp.LpMinimize)
#definindo as variáveis
4
x1 = pulp.LpVariable("Liga 1", lowBound=0, cat="Continuous")
x2 = pulp.LpVariable("Liga 2", lowBound=0, cat="Continuous")
#Função objetivo
Custo = 190*x1 + 200*x2
prob1_3 += Custo
#restrições
Carbono1 = 3*x1 + 4*x2
prob1_3 += (Carbono1 <= 3.5)
Carbono2 = 3*x1 + 4*x2
prob1_3 += (Carbono2 >= 3.2)
Silicon1 = 2*x1 + 2.5*x2
prob1_3 += (Silicon1 <= 2.5)
Silicon2 = 2*x1 + 2.5*x2
prob1_3 += (Silicon2 >= 1.8)
Niquel1 = x1 + 1.5*x2
prob1_3 += (Niquel1 <= 1.2)
Niquel2 = x1 + 1.5*x2
prob1_3 += (Niquel2 >= 0.9)
#Resolução
assert prob1_3.solve() == pulp.LpStatusOptimal
print(prob1_3)
print("A produção será feita da seguinte maneira:")
for var in [x1, x2]:
print("{} da {}".format(var.value(), var.name))
print("O custo de produção será de R${}".format(Custo.value()))
Produção_de_Aço:
MINIMIZE
190*Liga_1 + 200*Liga_2 + 0
SUBJECT TO
_C1: 3 Liga_1 + 4 Liga_2 <= 3.5
_C2: 3 Liga_1 + 4 Liga_2 >= 3.2
_C3: 2 Liga_1 + 2.5 Liga_2 <= 2.5
_C4: 2 Liga_1 + 2.5 Liga_2 >= 1.8
5
_C5: Liga_1 + 1.5 Liga_2 <= 1.2
_C6: Liga_1 + 1.5 Liga_2 >= 0.9
VARIABLES
Liga_1 Continuous
Liga_2 Continuous
A produção será feita da seguinte maneira:
0.0 da Liga_1
0.8 da Liga_2
O custo de produção será de R$160.0
Problema 4
[7]: # definindo o problema 4
prob1_4 = pulp.LpProblem("Produção de Torta", pulp.LpMaximize)
#definindo as variáveis
x1 = pulp.LpVariable("Tortas de Chocolate", lowBound=0, cat="Integer")
x2 = pulp.LpVariable("Tortas de Morango", lowBound=0, cat="Integer")
#Função objetivo
Custo = 4*x1 + 2*x2
prob1_4 += Custo
#restrições
Hora_Trabalho = 20*x1 + 40*x2
prob1_4 += (Hora_Trabalho <= 480)
Ovos = 4*x1 + x2
prob1_4 += (Ovos <= 30)
#Resolução
assert prob1_4.solve() == pulp.LpStatusOptimal
print(prob1_4)
print("A produção de Torta será feita da seguinte maneira:")
for var in [x1, x2]:
print("{:.0f} {}".format(var.value(), var.name))
print("O custo de produção será de R${:.2f}".format(Custo.value()))
Produção_de_Torta:
MAXIMIZE
4*Tortas_de_Chocolate + 2*Tortas_de_Morango + 0
SUBJECT TO
6
_C1: 20 Tortas_de_Chocolate + 40 Tortas_de_Morango <= 480
_C2: 4 Tortas_de_Chocolate + Tortas_de_Morango <= 30
VARIABLES
0 <= Tortas_de_Chocolate Integer
0 <= Tortas_de_Morango Integer
A produção de Torta será feita da seguinte maneira:
5 Tortas_de_Chocolate
9 Tortas_de_Morango
O custo de produção será de R$38.00
Problema 5
[28]: #Exercício 5
prob1_5 = pulp.LpProblem("Redução de Contaminantes", pulp.LpMinimize)
# variáveis
# Seja $X_{ij}$ o percentual a ser implementado da medida
# $i = 1, 2, 3$ no forno $j = 1, 2$, onde $j = 1$ é o Altos Forno e $j = 2$ 
↪→Fornos Abertos.
x11 = pulp.LpVariable("Medida 1 no Forno 1", lowBound = 0, cat = "Continuous")
x21 = pulp.LpVariable("Medida 2 no Forno 1", lowBound = 0, cat = "Continuous")
x31 = pulp.LpVariable("Medida 3 no Forno 1", lowBound = 0, cat = "Continuous")
x12 = pulp.LpVariable("Medida 1 no Forno 2", lowBound = 0, cat = "Continuous")
x22 = pulp.LpVariable("Medida 2 no Forno 2", lowBound= 0, cat = "Continuous")
x32 = pulp.LpVariable("Medida 3 no Forno 2", lowBound = 0, cat = "Continuous")
# Função Objetivo
Custo = 8*x11 + 10*x12 + 7*21 + 6*x22 + 11*x31 + 9*x32
prob1_5 += Custo
# Restrições
A = 12*x11 + 9*x12 + 25*x21 + 20*x22 + 17*x31 + 13*x32
prob1_5 += (A >= 60)
B = 35*x11 + 42*x12 + 18*x21 + 31*x22 + 56*x31 + 49*x32
prob1_5 += (B >= 150)
C = 37*x11 + 53*x12 + 28*x21 + 34*x22 + 29*x31 + 20*x32
prob1_5 += (C >= 125)
7
# Resultado
print(prob1_5)
assert prob1_5.solve() == pulp.LpStatusOptimal
print("As medidas serão seguidas da seguinte maneira")
for x in [x11, x12, x21, x22, x31, x32]:
print("{} da {}".format(x.value(), x.name))
print("O custo final será de R$", Custo.value())
Redução_de_Contaminantes:
MINIMIZE
8*Medida_1_no_Forno_1 + 10*Medida_1_no_Forno_2 + 6*Medida_2_no_Forno_2 +
11*Medida_3_no_Forno_1 + 9*Medida_3_no_Forno_2 + 147
SUBJECT TO
_C1: 12 Medida_1_no_Forno_1 + 9 Medida_1_no_Forno_2 + 25 Medida_2_no_Forno_1
+ 20 Medida_2_no_Forno_2 + 17 Medida_3_no_Forno_1 + 13 Medida_3_no_Forno_2
>= 60
_C2: 35 Medida_1_no_Forno_1 + 42 Medida_1_no_Forno_2 + 18 Medida_2_no_Forno_1
+ 31 Medida_2_no_Forno_2 + 56 Medida_3_no_Forno_1 + 49 Medida_3_no_Forno_2
>= 150
_C3: 37 Medida_1_no_Forno_1 + 53 Medida_1_no_Forno_2 + 28 Medida_2_no_Forno_1
+ 34 Medida_2_no_Forno_2 + 29 Medida_3_no_Forno_1 + 20 Medida_3_no_Forno_2
>= 125
VARIABLES
Medida_1_no_Forno_1 Continuous
Medida_1_no_Forno_2 Continuous
Medida_2_no_Forno_1 Continuous
Medida_2_no_Forno_2 Continuous
Medida_3_no_Forno_1 Continuous
Medida_3_no_Forno_2 Continuous
As medidas serão seguidas da seguinte maneira
0.0 da Medida_1_no_Forno_1
0.0 da Medida_1_no_Forno_2
8.3333333 da Medida_2_no_Forno_1
0.0 da Medida_2_no_Forno_2
0.0 da Medida_3_no_Forno_1
0.0 da Medida_3_no_Forno_2
O custo final será de R$ 147.0
Problema 6a
O erro ocorre por ser um PPL inviável
8
[9]: #Exercício 6a
prob1_6a = pulp.LpProblem('PPL6a', pulp.LpMaximize)
#variáveis
x1 = pulp.LpVariable('Variável_1', lowBound = 0, cat = 'Continuous')
x2 = pulp.LpVariable('Variável_2', lowBound = 0, cat = 'Continuous')
#função objetivo
FO = x1+x2
prob1_6a += FO
#Restrições
Restricao1 = x1 +x2
prob1_6a += (Restricao1 <=4)
Restricao2 = x1 - x2
prob1_6a += (Restricao2 >=5)
#Resultado
print (prob1_6a)
optimization_result = prob1_6a.solve()
assert optimization_result == pulp.LpStatusOptimal
print('As variaveis serao:')
for var in [x1, x2]:
print('{} = {:.2f}'.format(var.name, var.value()))
PPL6a:
MAXIMIZE
1*Variável_1 + 1*Variável_2 + 0
SUBJECT TO
_C1: Variável_1 + Variável_2 <= 4
_C2: Variável_1 - Variável_2 >= 5
VARIABLES
Variável_1 Continuous
Variável_2 Continuous
-----------------------------------------------------------------------
9
AssertionError Traceback (most recent call last)
<ipython-input-9-edb787ff088c> in <module>
26 optimization_result = prob1_6a.solve()
27
---> 28 assert optimization_result == pulp.LpStatusOptimal
29
30 print('As variaveis serao:')
AssertionError:
Problema 6b
[10]: #Exercício 6b
prob1_6b = pulp.LpProblem('PPL6b', pulp.LpMaximize)
#variáveis
x1 = pulp.LpVariable('Variável_1', lowBound = 0, cat = 'Continuous')
x2 = pulp.LpVariable('Variável_2', lowBound = 0, cat = 'Continuous')
#função objetivo
FO = 4*x1+x2
prob1_6b += FO
#Restrições
Restricao1 = 8*x1 +2*x2
prob1_6b += (Restricao1 <=16)
Restricao2 = 5*x1 + 2*x2
prob1_6b += (Restricao2 <=12)
#Resultado
print (prob1_6b)
optimization_result = prob1_6b.solve()
assert optimization_result == pulp.LpStatusOptimal
print('As variaveis serao:')
for var in [x1, x2]:
print('{} = {:.2f}'.format(var.name, var.value()))
10
PPL6b:
MAXIMIZE
4*Variável_1 + 1*Variável_2 + 0
SUBJECT TO
_C1: 8 Variável_1 + 2 Variável_2 <= 16
_C2: 5 Variável_1 + 2 Variável_2 <= 12
VARIABLES
Variável_1 Continuous
Variável_2 Continuous
As variaveis serao:
Variável_1 = 2.00
Variável_2 = 0.00
Problema 6c
O erro ocorre, provavelmente, por ser um PPL ilimitado.
[11]: #Exercício 6c
prob1_6c = pulp.LpProblem('PPL6c', pulp.LpMaximize)
#variáveis
x1 = pulp.LpVariable('Variável_1', lowBound = 0, cat = 'Continuous')
x2 = pulp.LpVariable('Variável_2', lowBound = 0, cat = 'Continuous')
#função objetivo
FO = -x1+3*x2
prob1_6c += FO
#Restrições
Restricao1 = x1 -x2
prob1_6c += (Restricao1 <=4)
Restricao2 = x1 + 2*x2
prob1_6c += (Restricao2 >=4)
#Resultado
print (prob1_6c)
optimization_result = prob1_6c.solve()
assert optimization_result == pulp.LpStatusOptimal
11
print('As variaveis serao:')
for var in [x1, x2]:
print('{} = {:.2f}'.format(var.name, var.value()))
PPL6c:
MAXIMIZE
-1*Variável_1 + 3*Variável_2 + 0
SUBJECT TO
_C1: Variável_1 - Variável_2 <= 4
_C2: Variável_1 + 2 Variável_2 >= 4
VARIABLES
Variável_1 Continuous
Variável_2 Continuous
-----------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-11-1f31a901c4c9> in <module>
26 optimization_result = prob1_6c.solve()
27
---> 28 assert optimization_result == pulp.LpStatusOptimal
29
30 print('As variaveis serao:')
AssertionError:
Problema 6d
[12]: #Exercício 6d
prob1_6d = pulp.LpProblem('PPL6d', pulp.LpMaximize)
#variáveis
x1 = pulp.LpVariable('Variável_1', lowBound = 0, cat = 'Continuous')
x2 = pulp.LpVariable('Variável_2', lowBound = 0, cat = 'Continuous')
#função objetivo
FO = 3*x1+x2
12
prob1_6d += FO
#Restrições
Restricao1 = 2*x1 +x2
prob1_6d += (Restricao1 <=6)
Restricao2 = x1 + 3*x2
prob1_6d += (Restricao2 <=9)
#Resultado
print (prob1_6d)
optimization_result = prob1_6d.solve()
assert optimization_result == pulp.LpStatusOptimal
print('As variaveis serao:')
for var in [x1, x2]:
print('{} = {:.2f}'.format(var.name, var.value()))
PPL6d:
MAXIMIZE
3*Variável_1 + 1*Variável_2 + 0
SUBJECT TO
_C1: 2 Variável_1 + Variável_2 <= 6
_C2: Variável_1 + 3 Variável_2 <= 9
VARIABLES
Variável_1 Continuous
Variável_2 Continuous
As variaveis serao:
Variável_1 = 3.00
Variável_2 = 0.00
0.3 Lista 2
Problema 1
[ ]:
Problema 2
[13]: #Exercício 2
prob2_2 = pulp.LpProblem('Plantação de flores', pulp.LpMaximize)
13
#variáveis
l1 = pulp.LpVariable('layout_1', lowBound = 0, cat = 'Integer')
l2 = pulp.LpVariable('layout_2', lowBound = 0, cat = 'Integer')
l3 = pulp.LpVariable('layout_3', lowBound = 0, cat = 'Integer')
#função objetivo
FO = 50*l1+30*l2+60*l3
prob2_2 += FO
#Restrições
NumTulipas = 30*l1+10*l2+20*l3
prob2_2 += (NumTulipas<=1000)
NumRosas = 20*l1+40*l2+50*l3
prob2_2 += (NumRosas<=800)
NumGirassois = 4*l1+3*l2+2*l3
prob2_2 += (NumGirassois<=100)
#Resultado
print (prob2_2)
optimization_result = prob2_2.solve()
assert optimization_result == pulp.LpStatusOptimal
print('Serão montados:')
for var in prob2_2.variables():
print('{} composições do {}'.format(var.value(), var.name))
print("O lucro máximo será de R${:.2f}".format(FO.value()))
Plantação_de_flores:
MAXIMIZE
50*layout_1 + 30*layout_2 + 60*layout_3 + 0
SUBJECT TO
_C1: 30 layout_1 + 10 layout_2 + 20 layout_3 <= 1000
_C2: 20 layout_1 + 40 layout_2 + 50 layout_3 <= 800
_C3: 4 layout_1 + 3 layout_2 + 2 layout_3 <= 100
VARIABLES
0 <= layout_1 Integer
14
0 <= layout_2 Integer
0 <= layout_3 Integer
Serão montados:
20.0 composições do layout_1
0.0 composições do layout_2
8.0 composições do layout_3
O lucro máximo será de R$1480.00
Problema 3
[16]: #Exercício 3
prob2_3 = pulp.LpProblem('Coleta de lixo', pulp.LpMinimize)
#variáveis
x111 = pulp.LpVariable('toneladas que saem da cidade 1, vao para o incinerador 1 
↪→e sao aterradas no aterro 1', lowBound = 0, cat = 'Continuous')
x112 = pulp.LpVariable('toneladas que saem da cidade 1, vao para o incinerador 1 
↪→e sao aterradas no aterro 2', lowBound = 0, cat = 'Continuous')
x121 = pulp.LpVariable('toneladas que saem da cidade 1, vao para o incinerador 2 
↪→e sao aterradas no aterro 1', lowBound = 0, cat = 'Continuous')
x211 = pulp.LpVariable('toneladas que saem da cidade 2, vao para o incinerador1 
↪→e sao aterradas no aterro 1', lowBound = 0, cat = 'Continuous')
x122 = pulp.LpVariable('toneladas que saem da cidade 1, vao para o incinerador 2 
↪→e sao aterradas no aterro 2', lowBound = 0, cat = 'Continuous')
x212 = pulp.LpVariable('toneladas que saem da cidade 2, vao para o incinerador 1 
↪→e sao aterradas no aterro 2', lowBound = 0, cat = 'Continuous')
x221 = pulp.LpVariable('toneladas que saem da cidade 2, vao para o incinerador 2 
↪→e sao aterradas no aterro 1', lowBound = 0, cat = 'Continuous')
x222 = pulp.LpVariable('toneladas que saem da cidade 2, vao para o incinerador 2 
↪→e sao aterradas no aterro 2', lowBound = 0, cat = 'Continuous')
#função objetivo
FO = 71*x111 + 71.6*x112 + 36.8*x121 + 36.2*x122 + 77*x211 + 77.6*x212 + 83.
↪→8*x221 + 73.2*x222
prob2_3 += FO
#Restrições
lixocidade1 = x111+x112+x121+x122
prob2_3 += (lixocidade1 >= 500)
lixocidade2 = x211+x212+x221+x222
prob2_3 += (lixocidade2 >= 400)
15
Capacidadeinc1 = x111+x112+x212+x211
prob2_3 += (Capacidadeinc1<=500)
Capacidadeinc2 = x121+x122+x221+x222
prob2_3 += (Capacidadeinc2<=500)
Capacidadeater1 = x111+x121+x211+x221
prob2_3 += (Capacidadeater1<=1000)
Capacidadeater2 = x112+x122+x212+x222
prob2_3 += (Capacidadeater2<=1000)
#Resultado
print (prob2_3)
optimization_result = prob2_3.solve()
assert optimization_result == pulp.LpStatusOptimal
print('Deverão ser levados:')
for var in prob2_3.variables():
print('{} {}'.format(var.value(), var.name))
#print("O número mínimo de trabalhadores é {}".format(FO.value()))
Coleta_de_lixo:
MINIMIZE
71*toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_a
terro_1 + 71.6*toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_at
erradas_no_aterro_2 + 36.8*toneladas_que_saem_da_cidade_1,_vao_para_o_incinerado
r_2_e_sao_aterradas_no_aterro_1 + 36.2*toneladas_que_saem_da_cidade_1,_vao_para_
o_incinerador_2_e_sao_aterradas_no_aterro_2 + 77*toneladas_que_saem_da_cidade_2,
_vao_para_o_incinerador_1_e_sao_aterradas_no_aterro_1 + 77.6*toneladas_que_saem_
da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_aterro_2 + 83.8*tonelad
as_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_aterro_1 +
73.2*toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no
_aterro_2 + 0.0
SUBJECT TO
_C1:
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_ate
rro_1
+ toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_a
terro_2
+ toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_1
+ toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_2
16
>= 500
_C2:
toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_ate
rro_1
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_a
terro_2
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_1
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_2
>= 400
_C3:
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_ate
rro_1
+ toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_a
terro_2
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_a
terro_1
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_a
terro_2
<= 500
_C4:
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_ate
rro_1
+ toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_2
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_1
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_2
<= 500
_C5:
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_ate
rro_1
+ toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_1
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_a
terro_1
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_1
<= 1000
_C6:
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_ate
17
rro_2
+ toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_2
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_a
terro_2
+ toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_a
terro_2
<= 1000
VARIABLES
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_ater
ro_1 Continuous
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_ater
ro_2 Continuous
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_ater
ro_1 Continuous
toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_ater
ro_2 Continuous
toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_ater
ro_1 Continuous
toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_ater
ro_2 Continuous
toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_ater
ro_1 Continuous
toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_ater
ro_2 Continuous
Deverão ser levados:
0.0 toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_
aterro_1
0.0 toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_1_e_sao_aterradas_no_
aterro_2
0.0 toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_no_
aterro_1
500.0 toneladas_que_saem_da_cidade_1,_vao_para_o_incinerador_2_e_sao_aterradas_n
o_aterro_2
400.0 toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_n
o_aterro_1
0.0 toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_1_e_sao_aterradas_no_
aterro_2
0.0 toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_
aterro_1
0.0 toneladas_que_saem_da_cidade_2,_vao_para_o_incinerador_2_e_sao_aterradas_no_
aterro_2
Problema 4
18
[18]: #Exercício 4
prob2_4 = pulp.LpProblem('Numero de trabalhadores', pulp.LpMinimize)
#variáveis
x15 = pulp.LpVariable('trabalhadores que comecam na segunda', lowBound = 0, cat 
↪→= 'Integer')
x26 = pulp.LpVariable('trabalhadores que comecam na terca', lowBound = 0, cat = 
↪→'Integer')
x37 = pulp.LpVariable('trabalhadores que comecam na quarta', lowBound = 0, cat = 
↪→'Integer')
x41 = pulp.LpVariable('trabalhadores que comecam na quinta', lowBound = 0, cat = 
↪→'Integer')
x52 = pulp.LpVariable('trabalhadores que comecam na sexta', lowBound = 0, cat = 
↪→'Integer')
x63 = pulp.LpVariable('trabalhadores que comecam na sabado', lowBound = 0, cat = 
↪→'Integer')
x74 = pulp.LpVariable('trabalhadores que comecam na domingo', lowBound = 0, cat 
↪→= 'Integer')
#função objetivo
FO = x15+x26+x37+x41+x52+x63+x74
prob2_4 += FO
#Restrições
NumTrabSegunda = x15+x41+x52+x63+x74
prob2_4 += (NumTrabSegunda>=17)
NumTrabTerca = x26+x52+x63+x74+x15
prob2_4 += (NumTrabTerca>=13)
NumTrabQuarta = x37+x63+x74+x15+x26
prob2_4 += (NumTrabQuarta>=15)
NumTrabQuinta = x41+x74+x15+x26+x37
prob2_4 += (NumTrabQuinta>=19)
NumTrabSexta = x52+x15+x26+x37+x41
prob2_4 += (NumTrabSexta>=14)
NumTrabSabado = x63+x26+x37+x41+x52
prob2_4 += (NumTrabSabado>=16)
19
NumTrabDomingo = x74+x37+x41+x52+x63
prob2_4 += (NumTrabDomingo>=11)
#Resultado
print (prob2_4)
optimization_result = prob2_4.solve()
assert optimization_result == pulp.LpStatusOptimal
print('Serão montados:')
for var in prob2_4.variables():
print('{} {}'.format(var.value(), var.name))
print("O número mínimo de trabalhadores é {}".format(FO.value()))
Numero_de_trabalhadores:
MINIMIZE
1*trabalhadores_que_comecam_na_domingo + 1*trabalhadores_que_comecam_na_quarta +
1*trabalhadores_que_comecam_na_quinta + 1*trabalhadores_que_comecam_na_sabado +
1*trabalhadores_que_comecam_na_segunda+ 1*trabalhadores_que_comecam_na_sexta +
1*trabalhadores_que_comecam_na_terca + 0
SUBJECT TO
_C1: trabalhadores_que_comecam_na_domingo
+ trabalhadores_que_comecam_na_quinta + trabalhadores_que_comecam_na_sabado
+ trabalhadores_que_comecam_na_segunda + trabalhadores_que_comecam_na_sexta
>= 17
_C2: trabalhadores_que_comecam_na_domingo
+ trabalhadores_que_comecam_na_sabado + trabalhadores_que_comecam_na_segunda
+ trabalhadores_que_comecam_na_sexta + trabalhadores_que_comecam_na_terca
>= 13
_C3: trabalhadores_que_comecam_na_domingo
+ trabalhadores_que_comecam_na_quarta + trabalhadores_que_comecam_na_sabado
+ trabalhadores_que_comecam_na_segunda + trabalhadores_que_comecam_na_terca
>= 15
_C4: trabalhadores_que_comecam_na_domingo
+ trabalhadores_que_comecam_na_quarta + trabalhadores_que_comecam_na_quinta
+ trabalhadores_que_comecam_na_segunda + trabalhadores_que_comecam_na_terca
>= 19
_C5: trabalhadores_que_comecam_na_quarta + trabalhadores_que_comecam_na_quinta
+ trabalhadores_que_comecam_na_segunda + trabalhadores_que_comecam_na_sexta
+ trabalhadores_que_comecam_na_terca >= 14
_C6: trabalhadores_que_comecam_na_quarta + trabalhadores_que_comecam_na_quinta
20
+ trabalhadores_que_comecam_na_sabado + trabalhadores_que_comecam_na_sexta
+ trabalhadores_que_comecam_na_terca >= 16
_C7: trabalhadores_que_comecam_na_domingo
+ trabalhadores_que_comecam_na_quarta + trabalhadores_que_comecam_na_quinta
+ trabalhadores_que_comecam_na_sabado + trabalhadores_que_comecam_na_sexta
>= 11
VARIABLES
0 <= trabalhadores_que_comecam_na_domingo Integer
0 <= trabalhadores_que_comecam_na_quarta Integer
0 <= trabalhadores_que_comecam_na_quinta Integer
0 <= trabalhadores_que_comecam_na_sabado Integer
0 <= trabalhadores_que_comecam_na_segunda Integer
0 <= trabalhadores_que_comecam_na_sexta Integer
0 <= trabalhadores_que_comecam_na_terca Integer
Serão montados:
1.0 trabalhadores_que_comecam_na_domingo
3.0 trabalhadores_que_comecam_na_quarta
7.0 trabalhadores_que_comecam_na_quinta
3.0 trabalhadores_que_comecam_na_sabado
6.0 trabalhadores_que_comecam_na_segunda
0.0 trabalhadores_que_comecam_na_sexta
3.0 trabalhadores_que_comecam_na_terca
O número mínimo de trabalhadores é 23.0
Problema 5a
Utilizamos a interpretação de que a porcentagem de área verde e de ruas são em relação a área de
casas e não ao total.
[19]: #Exercício 5a
prob2_5a = pulp.LpProblem('Area de contrucao', pulp.LpMinimize)
#variáveis
x1 = pulp.LpVariable('numero de casas de baixa renda', lowBound = 0, cat = 
↪→'Integer')
x2 = pulp.LpVariable('numero de casas de media renda', lowBound = 0, cat = 
↪→'Integer')
x3 = pulp.LpVariable('metros quadrados de área verde', lowBound = 0, cat = 
↪→'Continuous')
x4 = pulp.LpVariable('metros quadrados de rua', lowBound = 0, cat = 'Continuous')
#função objetivo
21
FO = 70000*x1+120000*x2+56*x3+135*x4
prob2_5a += FO
#Restrições
MinAreaVerde = x3
prob2_5a += (MinAreaVerde>=0.12*(70*x1+110*x2))
MinRua = x4
prob2_5a += (MinRua>=0.07*(70*x1+110*x2))
MaxArea = 70*x1+110*x2+x3+x4
prob2_5a += (MaxArea<=3100000)
MinCasas = x1 + x2
prob2_5a += (MinCasas>=180)
CasasPequenas = x1 - x2
prob2_5a += (CasasPequenas<=50)
#Resultado
print (prob2_5a)
optimization_result = prob2_5a.solve()
assert optimization_result == pulp.LpStatusOptimal
print('Serão feitas:')
for var in prob2_5a.variables():
print('{:1.2f} {}'.format(var.value(), var.name))
print("O valor mínimo a ser gasto será de R$ {:.2f}".format(FO.value()))
Area_de_contrucao:
MINIMIZE
135*metros_quadrados_de_rua + 56*metros_quadrados_de_área_verde +
70000*numero_de_casas_de_baixa_renda + 120000*numero_de_casas_de_media_renda + 0
SUBJECT TO
_C1: metros_quadrados_de_área_verde - 8.4 numero_de_casas_de_baixa_renda
- 13.2 numero_de_casas_de_media_renda >= 0
_C2: metros_quadrados_de_rua - 4.9 numero_de_casas_de_baixa_renda
- 7.7 numero_de_casas_de_media_renda >= 0
_C3: metros_quadrados_de_rua + metros_quadrados_de_área_verde
+ 70 numero_de_casas_de_baixa_renda + 110 numero_de_casas_de_media_renda
<= 3100000
22
_C4: numero_de_casas_de_baixa_renda + numero_de_casas_de_media_renda >= 180
_C5: numero_de_casas_de_baixa_renda - numero_de_casas_de_media_renda <= 50
VARIABLES
metros_quadrados_de_rua Continuous
metros_quadrados_de_área_verde Continuous
0 <= numero_de_casas_de_baixa_renda Integer
0 <= numero_de_casas_de_media_renda Integer
Serão feitas:
1064.00 metros_quadrados_de_rua
1824.00 metros_quadrados_de_área_verde
115.00 numero_de_casas_de_baixa_renda
65.00 numero_de_casas_de_media_renda
O valor mínimo a ser gasto será de R$ 16095784.00
Problema 5b
[20]: #Exercício 5b
prob2_5b = pulp.LpProblem('Area de contrucao', pulp.LpMaximize)
#variáveis
x1 = pulp.LpVariable('numero de casas de baixa renda', lowBound = 0, cat = 
↪→'Integer')
x2 = pulp.LpVariable('numero de casas de media renda', lowBound = 0, cat = 
↪→'Integer')
x3 = pulp.LpVariable('metros quadrados de área verde', lowBound = 0, cat = 
↪→'Integer')
x4 = pulp.LpVariable('metros quadrados de rua', lowBound = 0, cat = 'Integer')
#função objetivo
FO = x1+x2
prob2_5b += FO
#Restrições
MaxCusto = 70000*x1+120000*x2+56*x3+135*x4
prob2_5b += (MaxCusto <= 20000000)
MinAreaVerde = x3
prob2_5b += (MinAreaVerde>=0.12*(70*x1+110*x2))
MinRua = x4
prob2_5b += (MinRua>=0.07*(70*x1+110*x2))
23
MaxArea = 70*x1+110*x2+x3+x4
prob2_5b += (MaxArea<=3100000)
MinCasas = x1 + x2
prob2_5b += (MinCasas>=180)
CasasPequenas = x1 - x2
prob2_5b += (CasasPequenas<=50)
#Resultado
print (prob2_5b)
optimization_result = prob2_5b.solve()
assert optimization_result == pulp.LpStatusOptimal
print('Serão feitos:')
for var in prob2_5b.variables():
print('{} composições do {}'.format(var.value(), var.name))
print("O número máximo de casas a serem construídas será de {:.2f}".format(FO.
↪→value()))
Area_de_contrucao:
MAXIMIZE
1*numero_de_casas_de_baixa_renda + 1*numero_de_casas_de_media_renda + 0
SUBJECT TO
_C1: 135 metros_quadrados_de_rua + 56 metros_quadrados_de_área_verde
+ 70000 numero_de_casas_de_baixa_renda
+ 120000 numero_de_casas_de_media_renda <= 20000000
_C2: metros_quadrados_de_área_verde - 8.4 numero_de_casas_de_baixa_renda
- 13.2 numero_de_casas_de_media_renda >= 0
_C3: metros_quadrados_de_rua - 4.9 numero_de_casas_de_baixa_renda
- 7.7 numero_de_casas_de_media_renda >= 0
_C4: metros_quadrados_de_rua + metros_quadrados_de_área_verde
+ 70 numero_de_casas_de_baixa_renda + 110 numero_de_casas_de_media_renda
<= 3100000
_C5: numero_de_casas_de_baixa_renda + numero_de_casas_de_media_renda >= 180
_C6: numero_de_casas_de_baixa_renda - numero_de_casas_de_media_renda <= 50
VARIABLES
0 <= metros_quadrados_de_rua Integer
24
0 <= metros_quadrados_de_área_verde Integer
0 <= numero_de_casas_de_baixa_renda Integer
0 <= numero_de_casas_de_media_renda Integer
Serão feitos:
1319.0 composições do metros_quadrados_de_rua
2261.0 composições do metros_quadrados_de_área_verde
135.0 composições do numero_de_casas_de_baixa_renda
85.0 composições do numero_de_casas_de_media_renda
O número máximo de casas a serem construídas será de 220.00
[ ]:
25

Continue navegando