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

Cesar Rabak cesar.rabak em gmail.com
Terça Maio 29 00:13:34 -03 2018


Em vez de usar o pipe você não devia chamar solve_model com a especificação
do seu modelo, no seu caso *model*?

On Mon, May 28, 2018 at 3:01 PM, Adriele Giaretta Biase via R-br <
r-br em listas.c3sl.ufpr.br> wrote:

> 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
>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20180529/3e508804/attachment.html>


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