Baixe o app para aproveitar ainda mais
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
Compartilhar