Boa tarde pessoal,

estou trabalhando com modelos matemáticos de otimização usando o pacote ompr. A ultima linha do código (azul) retorna um erro que não estou conseguindo tratar.

Copiei o erro em baixo (vermelho). Alguém já teve a experiência de encontra esse mesmo erro?


rm(list=ls(all=TRUE))

#install package from github
#devtools::install_github("dirkschumacher/ompr")
#devtools::install_github("dirkschumacher/ompr.roi")
#install.packages("ROI.plugin.glpk")

library(dplyr, warn.conflicts = FALSE)
library(ROI)
library(ROI.plugin.glpk)
library(ompr)
library(ompr.roi)

frig = rep(seq(1, 4,1), rep((150*40),4) )
carro = rep(rep(seq(1, 40, 1), rep(150, 40)), 4)
dias = rep( seq(1:150), 4*40)
lucro = (rnorm(4*40*150, 30,1))
merc = rep(1, length(150*40*4))
praca = rep(1, length(150*40*4))
conj_dados= cbind(frig, carro, dias, lucro, merc, praca)
DIF = 150
Trava_param <- function(DIF){
  dia <- seq(1, DIF, 1) 
  trav <- rep(0, DIF) 
  praca <- rep(1, DIF) 
  Trava <- data.frame(dias = dia, praca = praca,  Trava = trav)
  return(Trava)
}
Trava = Trava_param(DIF)
Max_descasque <- 3
capac_cam <- 60
Carga_mercado_futuro <- 330
permissao_venda <- 1
bigM <- 5000

model <- MIPModel() %>%
  
  # venda do animal i para o frigorifico j no mercado m, 
  # dado o peso no dia k
  add_variable(
    x[i,j,k,m],
    i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), #1:carro,
    j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))), #1:frig,
    k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))),
    m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))),#1:merc,
    type = "binary"
  )%>%
  
  # indica a venda de animais no dia k
  add_variable(
    y[k],
    k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))),#1:dias,
    type = "binary"
  )%>%
  
  # numero de caminhoes do tipo t indo para o frigorifico j no dia k
  add_variable(
    total[j,k],
    j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))), #1:frig,
    k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))), #1:dias,
    type = "integer",
    lb = 0
  )%>%
  
  # indica qual mercado esta sendo usado
  add_variable(
    w[k,m],
    k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))),#1:dias,
    m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))), #1:merc,
    type = "binary"
  )%>%
  
  # indica se o boi i foi vendido na praca u no dia k
  add_variable(
    t[i,u,k],
    i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), # 1:carro,
    u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))), #1:praca,
    k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))), #1:dias,
    type = "binary"
  )%>%
  
  # maximizar
  set_objective(
    sum_expr(
      x[i,j,k,m]*lucro[i,j,k,m], 
             i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),# 1:carro,
             j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))),# 1: frig,
             k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))),#1:dias,
             m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))) ) #1:merc)
    - sum_expr(
      y[k],
             k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) )#1:dias)
    + sum_expr(130*t[i,u,k]*15,
             i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), #1:carro,
             u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))), #1:praca,
             k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) )#1:dias)
  ) %>%
  
  #Um animal eh vendido uma unica vez
  add_constraint(
    sum_expr(
      x[i,j,k,m],
             i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),#1:carro,
             j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))),#1: frig,
             k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))), # 1:dias,
             m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))))#1:merc)
    + sum_expr(
      t[i,u,k],
      i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),# 1:carro,
      u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))),# 1: praca,
      k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))))#1:dias,
    <= 1
  )%>%
  
  # A capacidade do caminhao eh respeitada
  add_constraint(
    sum_expr(
      x[i,j,k,m],
             i  = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),#1:carro,
             m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))))#1:merc)
    <= total[j,k] * capac_cam,
    j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))),#1:frig,
    k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) #1:dias
  )%>%
  
  # Caso exista uma venda no dia k eh calculado um 
  # descasque para mercado a vista e a prazo
  add_constraint(
    sum_expr(
      x[i,j,k,m],
             i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),#1:carro,
             j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))),#1:frig,
             m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))) )#1:merc)
    + sum_expr(
      t[i,u,k],
               i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), #1:carro,
               u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))) )#,1:praca)
    <= bigM * y[k],
    k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"]))))# 1:dias
  )%>%
  
  # Respeito ao numero maximo de descasques
  add_constraint(
    sum_expr(
      y[k],
             k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) ) #1:dias)
    <= Max_descasque
  )%>%

  # Desigualdade valida para ajudar na convergencia - 
  # todos os animais devem ser vendidos  
    add_constraint(
    sum_expr(
      x[i,j,k,m],
      i = as.numeric(as.vector(levels(as.factor(conj_dados[, "carro"])))),
      j = as.numeric(as.vector(levels(as.factor(conj_dados[, "frig"])))),
      k = as.numeric(as.vector(levels(as.factor(conj_dados[, "dias"])))),
      m = as.numeric(as.vector(levels(as.factor(conj_dados[, "merc"])))) )
    == 40
  )%>%
  

    # A carga vendida para mercado futuro eh de pelo menos 330 arobas
  add_constraint(
    15*130*sum_expr(
      t[i,u,k],   i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))) ) #1:carro)
    <= Carga_mercado_futuro*Trava[k,u],
   u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))), #1:praca,
   k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) #1:dias 
  )%>%
  
  # Permissao para venda no mercado futuro
  add_constraint(
    sum_expr(
      t[i,u,k],
        i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), #1:carro,
        u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))), #1:praca,
        k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) )#1:dias)
    <= bigM * permissao_venda
  )%>%
  saveRDS(model, file = "model.rds") %>%
  solve_model(with_ROI(solver = "glpk"))

Error in on_element(push, inplace_update_ast, get_ast_value, element) : 
  argument "ast" is missing, with no default