0% acharam este documento útil (0 voto)
6 visualizações4 páginas

ERE

O documento apresenta exemplos de programação linear utilizando o pacote lpSolve em R, incluindo a formulação de modelos matemáticos para maximização de funções objetivo com restrições. Exemplos incluem a alocação de recursos em produção de roupas e cultivo de culturas em fazendas. O código demonstra como definir variáveis, restrições e resolver problemas de otimização, além de verificar o status e resultados das soluções.

Enviado por

Aliromaburk b
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
6 visualizações4 páginas

ERE

O documento apresenta exemplos de programação linear utilizando o pacote lpSolve em R, incluindo a formulação de modelos matemáticos para maximização de funções objetivo com restrições. Exemplos incluem a alocação de recursos em produção de roupas e cultivo de culturas em fazendas. O código demonstra como definir variáveis, restrições e resolver problemas de otimização, além de verificar o status e resultados das soluções.

Enviado por

Aliromaburk b
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

# Instalar e carregar o pacote

#[Link]("lpSolve") #rodar apenas na primeira vez


library(lpSolve)
options("scipen"=100, digits=4)

#####################################################################
###Exemplo genérico
#Modelo matematico
#max Z = 3x1+5x2
#s.a.:
#2x1 + 3x2 ≤ 8
#2x1 + x2 ≤ 6
# x1, x2 ≥ 0

# Vetor da função objetivo


obj_Exemplo1 <- c(3, 5)

# Matriz de coeficientes das restrições


mat_Exemplo1 <- matrix(c(2, 3,
2, 1),
nrow = 2,
byrow = TRUE)

# Direção das restrições


dir_Exemplo1 <- c("<=", "<=")

# Lado direito das restrições


rhs_Exemplo1 <- c(8, 6)

# Resolver o problema
resultado_Exemplo1 <- lp(direction = "max",
[Link] = obj_Exemplo1,
[Link] = mat_Exemplo1,
[Link] = dir_Exemplo1,
[Link] = rhs_Exemplo1,
[Link] = FALSE,
[Link] = TRUE)

# Verificar status da solução


resultado_Exemplo1$status
# 0 = solução ótima encontrada

# Valores ótimos das variáveis de decisão


resultado_Exemplo1$solution

# Valor ótimo da função objetivo


resultado_Exemplo1$objval
#####################################################################
###Exemplo de programação inteira
#variavel decisao
#x1: quantidade de anagua
#x2: quantidade de baby-doll
#x3: quantidade de camisola
###Modelo matematico
#max Z = 3x1+5x2+8x3
#s.a.:
#8x1 + 2x2 + 3x3 ≤ 5000 -> espaço fisico
#2x1 + 8x2 + 3x3 ≤ 8000 -> tecido
#2x1 + 3x2 + 8x3 ≤ 7000 -> horas-maquina
# x1, x2, x3 ≥ 0 -> não negatividade

# Vetor da função objetivo


obj_Exemplo2 <- c(3, 5, 8)

# Matriz de coeficientes das restrições


mat_Exemplo2 <- matrix(c(8, 2, 3,
2, 8, 3,
2, 3, 8),
nrow = 3, #trocar pelo numero de restrições
byrow = TRUE)

# Direção das restrições


dir_Exemplo2 <- c("<=", "<=", "<=")

# Lado direito das restrições


rhs_Exemplo2 <- c(5000, 8000, 7000)

# Resolver o problema
resultado_Exemplo2 <- lp(direction = "max",
[Link] = obj_Exemplo2,
[Link] = mat_Exemplo2,
[Link] = dir_Exemplo2,
[Link] = rhs_Exemplo2,
[Link] = TRUE, #se a variável for inteira, fazer true
[Link] = TRUE)

# Verificar status da solução


resultado_Exemplo2$status
# 0 = solução ótima encontrada

# Valores ótimos das variáveis de decisão


resultado_Exemplo2$solution
# Valor ótimo da função objetivo
resultado_Exemplo2$objval

#####################################################################
###Exercicio 14
#variavel decisao
#xij: quantidade milho, arroz e feijão plantada na fazenda 1, 2 e 3
# x11, x12, x13, x21, x22, x23, x31, x32, x33

###Modelo matematico
#max Z = 5000(x11 + x12 + x13) + 4000(X21 + x22 + x23) + 1800(x31 + x32 + x33)
#s.a.:
# x11 + x21 + x31 ≤ 400 -> area de cultivo Fazenda 1
# x12 + x22 + x32 ≤ 650 -> area de cultivo Fazenda 2
# x13 + x23 + x33 ≤ 350 -> area de cultivo Fazenda 3
# 5.5x11 + 4x21 + 3.5x31 ≤ 1800 -> Agua Fazenda 1
# 5.5x12 + 4x22 + 3.5x32 ≤ 2200 -> Agua Fazenda 2
# 5.5x13 + 4x23 + 3.5x33 ≤ 950 -> Agua Fazenda 3
# x11 + x12 + x13 ≤ 660 -> Cultivo milho
# x21 + x22 + x23 ≤ 880 -> Cultivo arroz
# x31 + x32 + x33 ≤ 400 -> Cultivo feijao
# xij ≥ 0 -> não negatividade

#numero de variáveis
n_culturas <- 3
n_fazendas <- 3
n_var <- n_culturas * n_fazendas

# Vetor da função objetivo


lucro <- c(5000, 4000, 1800)
obj_Ex14 <- rep(lucro, each = n_fazendas)
obj_Ex14

# Matriz de coeficientes das restrições


A <- matrix(0, nrow = 9, ncol = n_var) #Criamos uma matriz vazia

#Area por fazenda


area <- c(400,650,350)

for(j in 1:n_fazendas){
for(i in 1:n_culturas){
col <- (i-1)*n_fazendas + j
A[j, col] <- 1}}
#Area por fazenda
agua_coef <- c(5.5,4,3.5)

for(j in 1:n_fazendas){
for(i in 1:n_culturas){
col <- (i-1)*n_fazendas + j
A[3+j, col] <- agua_coef[i]}}

#Limite por cultura


for(i in 1:n_culturas){
for(j in 1:n_fazendas){
col <- (i-1)*n_fazendas + j
A[6+i, col] <- 1}}

# Direção das restrições


dir_Ex14 <- rep("<=",9)

# Lado direito das restrições


rhs_Ex14 <- c(400,650,350,
1800,2200,900,
660,880,400)

# Resolver o problema
resultado_Ex14 <- lp(direction = "max",
[Link] = obj_Ex14,
[Link] = A,
[Link] = dir_Ex14,
[Link] = rhs_Ex14,
[Link] = FALSE, #se a variável for inteira, fazer true
[Link] = TRUE)

# Verificar status da solução


resultado_Ex14$status # 0 = solução ótima encontrada
# Valores ótimos das variáveis de decisão
matrix(resultado_Ex14$solution,
nrow = n_culturas,
byrow = TRUE)
resultado_Ex14$objval # Valor ótimo da função objetivo

Você também pode gostar