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
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
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
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
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
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