[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