[R-br] Error: argument "ast" is missing, with no default (solve_model)

Adriele Giaretta Biase adrielegbiase em gmail.com
Segunda Maio 28 15:01:26 -03 2018


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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20180528/768621c2/attachment.html>


Mais detalhes sobre a lista de discussão R-br