Questão 1

  1. A Fábrica Marvel Toy deseja fazer três modelos de barcos de brinquedo para melhorar as suas vendas. Eles descobriram que um modelo do navio a vapor leva uma hora no cortador, 2 horas na pintura, e 4 horas de trabalho na montagem. Este modelo produz $ 6 de lucro. O modelo do veleiro de quatro mastros leva 3 horas no cortador, 3 horas na pintura e o montador 2 horas na montagem e produz $ 3 de lucro. O modelo veleiro de dois mastros leva uma hora no cortador, três horas na pintura, uma hora na montagem, produzindo $ 2 de lucro. O cortador está disponível apenas por 45 horas, o pintor por 50 horas, e o montador por 60 horas. Supondo que eles possam vender todos os modelos que são construídos, encontre as restrições do problema e descreva como a solução ótima é obtida.

As restrições do problema são:

O tempo de corte total para os três modelos de barcos não pode exceder 45 horas: 1x + 3y + 1z <= 45

O tempo de pintura total para os três modelos de barcos não pode exceder 50 horas: 2x + 3y + 3z <= 50

O tempo total de montagem para os três modelos de barcos não pode exceder 60 horas: 4x + 2y + 1z <= 60

O número de barcos produzidos deve ser um inteiro não negativo: x, y, z >= 0

Onde:

x: número de modelos de barcos a vapor produzidos y: número de modelos de barcos de quatro mastros produzidos z: número de modelos de barcos de dois mastros produzidos

library(lpSolve)

# definir os coeficientes da função objetivo (lucro)
obj <- c(6, 3, 2)

# definir a matriz de restrições (coeficientes das variáveis)
mat <- matrix(c(1, 3, 1, 2, 3, 3, 4, 2, 1), nrow = 3, byrow = TRUE)

# definir o vetor de limites das restrições (horas disponíveis)
rhs <- c(45, 50, 60)

# definir o tipo das variáveis (inteiras não negativas)
types <- c("integer", "integer", "integer")

# resolver o problema de programação linear
sol <- lp("max", obj, mat, "<=", rhs)

# imprimir a solução
cat("Número de barcos a vapor produzidos:", round(sol$solution[1]), "\n")
## Número de barcos a vapor produzidos: 13
cat("Número de barcos de quatro mastros produzidos:", round(sol$solution[2]), "\n")
## Número de barcos de quatro mastros produzidos: 0
cat("Número de barcos de dois mastros produzidos:", round(sol$solution[3]), "\n")
## Número de barcos de dois mastros produzidos: 8
cat("Lucro máximo:", round(sol$objval), "\n")
## Lucro máximo: 94

Questão 2

A Reggio Advertising Company deseja planejar uma campanha publicitária em três meios diferentes - televisão, rádio e revistas. O objetivo da publicidade é alcançar tantos clientes em potencial quanto possível. Os resultados de um estudo de mercado são fornecidos abaixo: Televisão Prog. Diurna Horário Nobre Rádio Revistas Custo de uma publicidade unidade $ 40.000 $ 75.000 $ 30.000 $ 15.000 Número de potencial clientes alcançados por unidade 400.000 900.000 500.000 200.000 Número de mulheres clientes alcançados por unidade 300.000 400.000 200.000 100.000 A empresa não quer gastar mais do que $ 800.000 na publicidade. Além disso, requer que: (1) pelo menos 2 milhões as exposições ocorrem entre mulheres; (2) publicidade em televisão seja limitada a $ 500.000; (3) pelo menos 3 publicidades sejam compradas na televisão diurna, e duas unidades durante horário nobre; e (4) o número de unidades de publicidade no rádio e em revistas deve ser entre 5 e 10. Formular o problema de programação linear.

X1 o número de unidades de publicidade na televisão durante o horário diurno X2 o número de unidades de publicidade na televisão durante o horário nobre X3 o número de unidades de publicidade no rádio X4 o número de unidades de publicidade em revistas

Maximizar:

400.000 x1 + 900.000 x2 + 500.000 x3 + 200.000 x4

Sujeito a:

40.000 x1 + 75.000 x2 + 30.000 x3 + 15.000 x4 <= 800.000 (Restrição de orçamento)

300.000 x1 + 400.000 x2 + 200.000 x3 + 100.000 x4 >= 2.000.000 (Restrição de exposições para mulheres)

40.000 x1 + 75.000 x2 <= 500.000 (Restrição de orçamento para publicidade em televisão)

x1 >= 3 (Restrição de pelo menos 3 publicidades durante o horário diurno)

x2 >= 2 (Restrição de pelo menos 2 publicidades durante o horário nobre)

5 <= x3 <= 10 (Restrição para o número de unidades de publicidade no rádio)

5 <= x4 <= 10 (Restrição para o número de unidades de publicidade em revistas)

library(lpSolveAPI)

# definindo o problema
lprec <- make.lp(0, 4)
set.objfn(lprec, c(400000, 900000, 500000, 200000))
add.constraint(lprec, c(40000, 75000, 30000, 15000), "<=", 500000)
add.constraint(lprec, c(1, 1, 1, 1), "<=", 20)
add.constraint(lprec, c(-300000, -400000, -200000, -100000), "<=", -2000000)
add.constraint(lprec, c(1, 0, 0, 0), ">=", 3)
add.constraint(lprec, c(0, 1, 0, 0), ">=", 2)
add.constraint(lprec, c(0, 0, 1, 0), ">=", 5)
add.constraint(lprec, c(0, 0, 0, 1), ">=", 5)
set.bounds(lprec, lower = c(0, 0, 0, 0), upper = c(Inf, Inf, Inf, Inf))

# resolvendo o problema
solve(lprec)
## [1] 0
# exibindo a solução
get.objective(lprec)
## [1] 6500000
get.variables(lprec)
## [1] 3 2 5 5

Questão 3

Uma fábrica de tomate em conserva tem 5.000 quilos de tomates de grau A e 10.000 quilos de tomates grau B, os quais serão transformados em tomates em lata e pasta de tomate. os tomates em lata devem ser compostos de pelo menos 80 por cento de tomates de grau A, enquanto a pasta de tomate deve ser feita com pelo menos 10 por cento de tomates desta mesma qualidade (grau A). Os tomates em lata são vendidos por US $ 0,08 por quilo e os tomates em pasta são vendidos por US $ 0,05 por quilo. Formule um programa linear para resolver quanto de cada produto deve ser feito, se a empresa quiser maximizar a sua receita. ################################################################################

x1: quantidade de tomates de grau A utilizados para fazer tomates em lata x2: quantidade de tomates de grau B utilizados para fazer tomates em lata x3: quantidade de tomates de grau A utilizados para fazer pasta de tomate x4: quantidade de tomates de grau B utilizados para fazer pasta de tomate

Função objetivo: Maximizar 0,08x1 + 0,08x2 + 0,05x3 + 0,05x4

As restrições são:

A quantidade de tomates em lata deve ser composta de pelo menos 80% de tomates de grau A:

x1 / (x1 + x2) ≥ 0,8

0,2x1 - 0,8x2 ≥ 0

A quantidade de pasta de tomate deve ser feita com pelo menos 10% de tomates de grau A:

x3 / (x3 + x4) ≥ 0,1

0,9x3 - 0,1x4 ≥ 0

A quantidade total de tomates utilizados não pode exceder a quantidade disponível:

x1 + x2 + x3 + x4 ≤ 15.000

As quantidades de tomates utilizados não podem ser negativas:

x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, x4 ≥ 0

Função objetivo:

Maximizar 0,08x1 + 0,08x2 + 0,05x3 + 0,05x4

sujeito a:

0,2x1 - 0,8x2 ≥ 0 0,9x3 - 0,1x4 ≥ 0 x1 + x2 + x3 + x4 ≤ 15.000 x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, x4 ≥ 0

# função objetivo
f.obj <- c(0.08, 0.08, 0.05, 0.05)

# restrições
f.con <- matrix(c(1, 1, 0, 0,   
                  0.8, -0.2, -1, 0,   
                  0.1, 0.1, -0.9, -0.9),   
                nrow = 3, byrow = TRUE)

f.dir <- c("<=", ">=", ">=")  
f.rhs <- c(15000, 0, 0)  

# achar solução ótima
sol<-lp("max", f.obj, f.con, f.dir, f.rhs)

# imprimir a solução
cat("Lucro máximo:", round(sol$objval), "\n")
## Lucro máximo: 1283
cat("Número Latas A:", round(sol$solution[1]), "\n")
## Número Latas A: 3000
cat("Número Latas B:", round(sol$solution[2]), "\n")
## Número Latas B: 12000
cat("Número Pastas A:", round(sol$solution[3]), "\n")
## Número Pastas A: 0
cat("Número Pastas B:", round(sol$solution[4]), "\n")
## Número Pastas B: 1667

Questão 4

A fim de se produzir 1000 toneladas de aço não oxidante para válvulas de motor, pelo menos as seguintes quantidades de manganês, cromo e molibdênio, serão necessários semanalmente: 10 unidades de manganês, 12 unidades de cromo e 14 unidades de molibdênio (uma unidade corresponde a 10Kg). Esses metais são obtidos de revendedores de metais não ferrosos, que, para atrair os mercados os disponibilizam em caixas de três tamanhos, P, M e G. Uma caixa P custa $ 9 e contém 2 unidades de manganês, 2 unidades de cromo e 1 unidade de molibdênio. Uma caixa M custa $ 12 e contém 2 unidades de manganês, 3 unidades de cromo e 1 unidade de molibdênio. Um caso G custa US $ 15 e contém 1 unidade de manganês, 1 unidade de cromo e 5 unidades de molibdênio. Quantas caixas de cada tipo devem ser compradas semanalmente para que as quantidades necessárias de manganês, cromo e molibdênio sejam obtidas no menor custo possível? Qual é o menor custo possível? Formule e resolva por programação linear.

Definindo as variáveis de decisão:

xP: número de caixas P a serem compradas semanalmente xM: número de caixas M a serem compradas semanalmente xG: número de caixas G a serem compradas semanalmente O objetivo é minimizar o custo total da compra, dado por:

Custo = 9xP + 12xM + 15xG

As restrições são dadas pelas quantidades necessárias de manganês, cromo e molibdênio:

2xP + 2xM + xG ≥ 10 (manganês) 3xM ≥ 12 (cromo) xP + xM + 5xG ≥ 14 (molibdênio)

Além disso, as variáveis de decisão devem ser não negativas:

xP, xM, xG ≥ 0

Com essas informações, podemos escrever o modelo de programação linear:

Minimizar: 9xP + 12xM + 15xG

Sujeito a: 2xP + 2xM + xG ≥ 10 3xM ≥ 12 xP + xM + 5xG ≥ 14 xP, xM, xG ≥ 0

# função objetivo 
f.obj <- c(9, 12, 15)
# restrições
f.con <- matrix(c(2, 2, 1, 0, 3, 0, 1, 1, 5), nrow = 3, byrow = TRUE)
# direção das restrições
f.dir <- c(">=", ">=", ">=")
# limites das restrições
f.rhs <- c(10, 12, 14)

# resolve o problema
result <- lp("min", f.obj, f.con, f.dir, f.rhs, all.int = TRUE)

# mostra o resultado
cat("Número de caixas P: ", as.integer(result$solution[1]), "\n")
## Número de caixas P:  0
cat("Número de caixas M: ", as.integer(result$solution[2]), "\n")
## Número de caixas M:  4
cat("Número de caixas G: ", as.integer(result$solution[3]), "\n")
## Número de caixas G:  2
cat("Custo total: US$", as.numeric(result$objval), "\n")
## Custo total: US$ 78

Questão 5

O grupo Unido tem duas fazendas que cultivam trigo e milho. Por causa dos solos e condições climáticas diferentes, existem diferenças nos rendimentos e custos de cultivo nas duas fazendas. Os rendimentos e custos são: Fazenda 1 Fazenda 2 Rendimento de milho / acre 500 alqueires 650 alqueires Custo / acre de milho $ 100 $ 120 Rendimento de trigo / acre 400 alqueires 350 alqueires Custo / acre de trigo $ 90 $ 80 Cada fazenda possui 100 acres disponíveis para cultivo; 11.000 alqueires de trigo e 7.000 alqueires de milho devem ser cultivados. Determine um plano de plantio que irá minimizar o custo de atender a essas demandas.

x1 = número de acres de milho cultivados na fazenda 1 x2 = número de acres de milho cultivados na fazenda 2 y1 = número de acres de trigo cultivados na fazenda 1 y2 = número de acres de trigo cultivados na fazenda 2 Minimizar o custo total de cultivo: 100x1 + 120x2 + 90y1 + 80y2

Sujeito às seguintes restrições:

x1 + x2 <= 7000 (restrição de área total de cultivo de milho) y1 + y2 <= 11000 (restrição de área total de cultivo de trigo) x1 + y1 <= 100 (restrição de área disponível na fazenda 1) x2 + y2 <= 100 (restrição de área disponível na fazenda 2) x1, x2, y1, y2 >= 0 (restrição de não-negatividade das variáveis) x1+x2+x3+x4<=200 (restrição de plantar nos 200 acres)

# define a função objetivo
obj <- c(100, 120, 90, 80)

# define as restrições
con <- rbind(c(1, 0, 1, 0),
             c(0, 1, 0, 1),
             c(500, 650, 0, 0),
             c(0, 0, 400, 350),
             c(1, 1, 0, 0),
             c(1, 0, 1, 0),
             c(0, 1, 0, 1))

dir <- c("<=", "<=", ">=", ">=", "<=", ">=", ">=")
rhs <- c(100, 100, 11000, 7000, 200, 100, 100)

# resolve o problema de programação linear
sol<-lp("min", obj, con, dir, rhs)


# imprimir a solução
cat("Fazenda 1 milho", round(sol$solution[1]), "\n")
## Fazenda 1 milho 22
cat("Fazenda 2 milho:", round(sol$solution[2]), "\n")
## Fazenda 2 milho: 0
cat("Fazenda 1 trigo:", round(sol$solution[3]), "\n")
## Fazenda 1 trigo: 78
cat("Fazenda 2 trigo:", round(sol$solution[4]), "\n")
## Fazenda 2 trigo: 100
cat("Custo mínimo:", round(sol$objval), "\n")
## Custo mínimo: 17220

Questão 6

Considere que existem 3 silos que são necessários para satisfazer a demanda de 4 fábricas (Mills), conforme tabela a seguir. (Um silo é uma área de armazenamento da fazenda usada para armazenar grãos e Moinho é uma fábrica de moagem de grãos). Determine o quanto de cada silo deve ir para cada fábrica afim de que o custo de transporte seja minimizado

Xij: quantidade de grãos do silo i que deve ser transportado para a fábrica j A função objetivo será minimizar o custo total de transporte, que é a soma dos custos de transporte de cada silo para cada fábrica multiplicados pelas suas respectivas quantidades:

Minimizar: Z = 10X11 + 2X12 + 20X13 + 11X14 + 12X21 + 7X22 + 9X23 + 20X24 + 4X31 + 14X32 + 16X33 + 18X34

As restrições serão:

Cada fábrica deve receber a quantidade de grãos que necessita: Sujeito a: X11 + X21 + X31 = 5 X12 + X22 + X32 = 15 X13 + X23 + X33 = 15 X14 + X24 + X34 = 15

A quantidade de grãos transportada de cada silo não pode ser maior do que a sua capacidade: X11 + X12 + X13 <= 15 X21 + X22 + X23 <= 25 X31 + X32 + X33 <= 10

A quantidade de grãos recebida por cada fábrica não pode ser negativa: Xij >= 0

# função objetivo
f.obj <- c(10, 2, 20, 11, 12, 7, 9, 20, 4, 14, 16, 18)

# restrições
f.con <- matrix(c(1,0,0,0,1,0,0,0,1,0,0,0,
                  0,1,0,0,0,1,0,0,0,1,0,0,
                  0,0,1,0,0,0,1,0,0,0,1,0,
                  0,0,0,1,0,0,0,1,0,0,0,1,
                  -1,-1,-1,0,0,0,0,0,0,0,0,0,
                  0,0,0,-1,-1,-1,0,0,0,0,0,0,
                  0,0,0,0,0,0,-1,-1,-1,0,0,0,
                  0,0,0,0,0,0,0,0,0,-1,-1,-1), nrow=8, byrow=TRUE)

f.dir <- c(">=", ">=", ">=", ">=", "<=", "<=", "<=", "<=")
f.rhs <- c(5, 15, 15, 15, 0, 0, 0, 0)

# Resolvendo o problema
lp <- lp("min", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE, presolve=TRUE, use.rw=FALSE)

# solução
lp$solution
##  [1]  0 15  0 15  0  0 15  0  5  0  0  0