<div dir="ltr">Boa tarde pessoal,<div><br></div><div>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.</div><div><br></div><div>Copiei o erro em baixo (vermelho). Alguém já teve a experiência de encontra esse mesmo erro?<br></div><div><br></div><div><br></div><div><div>rm(list=ls(all=TRUE))</div><div><br></div><div>#install package from github</div><div>#devtools::install_github("dirkschumacher/ompr")</div><div>#devtools::install_github("dirkschumacher/ompr.roi")</div><div>#install.packages("ROI.plugin.glpk")</div><div><br></div><div>library(dplyr, warn.conflicts = FALSE)</div><div>library(ROI)</div><div>library(ROI.plugin.glpk)</div><div>library(ompr)</div><div>library(ompr.roi)</div><div><br></div><div>frig = rep(seq(1, 4,1), rep((150*40),4) )</div><div>carro = rep(rep(seq(1, 40, 1), rep(150, 40)), 4)</div><div>dias = rep( seq(1:150), 4*40)</div><div>lucro = (rnorm(4*40*150, 30,1))</div><div>merc = rep(1, length(150*40*4))</div><div>praca = rep(1, length(150*40*4))</div><div>conj_dados= cbind(frig, carro, dias, lucro, merc, praca)</div><div>DIF = 150</div><div>Trava_param <- function(DIF){</div><div> dia <- seq(1, DIF, 1) </div><div> trav <- rep(0, DIF) </div><div> praca <- rep(1, DIF) </div><div> Trava <- data.frame(dias = dia, praca = praca, Trava = trav)</div><div> return(Trava)</div><div>}</div><div>Trava = Trava_param(DIF)</div><div>Max_descasque <- 3</div><div>capac_cam <- 60</div><div>Carga_mercado_futuro <- 330</div><div>permissao_venda <- 1</div><div>bigM <- 5000</div><div><br></div><div>model <- MIPModel() %>%</div><div> </div><div> # venda do animal i para o frigorifico j no mercado m, </div><div> # dado o peso no dia k</div><div> add_variable(</div><div> x[i,j,k,m],</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), #1:carro,</div><div> j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))), #1:frig,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))),</div><div> m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))),#1:merc,</div><div> type = "binary"</div><div> )%>%</div><div> </div><div> # indica a venda de animais no dia k</div><div> add_variable(</div><div> y[k],</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))),#1:dias,</div><div> type = "binary"</div><div> )%>%</div><div> </div><div> # numero de caminhoes do tipo t indo para o frigorifico j no dia k</div><div> add_variable(</div><div> total[j,k],</div><div> j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))), #1:frig,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))), #1:dias,</div><div> type = "integer",</div><div> lb = 0</div><div> )%>%</div><div> </div><div> # indica qual mercado esta sendo usado</div><div> add_variable(</div><div> w[k,m],</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))),#1:dias,</div><div> m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))), #1:merc,</div><div> type = "binary"</div><div> )%>%</div><div> </div><div> # indica se o boi i foi vendido na praca u no dia k</div><div> add_variable(</div><div> t[i,u,k],</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), # 1:carro,</div><div> u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))), #1:praca,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))), #1:dias,</div><div> type = "binary"</div><div> )%>%</div><div> </div><div> # maximizar</div><div> set_objective(</div><div> sum_expr(</div><div> x[i,j,k,m]*lucro[i,j,k,m], </div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),# 1:carro,</div><div> j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))),# 1: frig,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))),#1:dias,</div><div> m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))) ) #1:merc)</div><div> - sum_expr(</div><div> y[k],</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) )#1:dias)</div><div> + sum_expr(130*t[i,u,k]*15,</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), #1:carro,</div><div> u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))), #1:praca,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) )#1:dias)</div><div> ) %>%</div><div> </div><div> #Um animal eh vendido uma unica vez</div><div> add_constraint(</div><div> sum_expr(</div><div> x[i,j,k,m],</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),#1:carro,</div><div> j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))),#1: frig,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))), # 1:dias,</div><div> m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))))#1:merc)</div><div> + sum_expr(</div><div> t[i,u,k],</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),# 1:carro,</div><div> u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))),# 1: praca,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))))#1:dias,</div><div> <= 1</div><div> )%>%</div><div> </div><div> # A capacidade do caminhao eh respeitada</div><div> add_constraint(</div><div> sum_expr(</div><div> x[i,j,k,m],</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),#1:carro,</div><div> m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))))#1:merc)</div><div> <= total[j,k] * capac_cam,</div><div> j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))),#1:frig,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) #1:dias</div><div> )%>%</div><div> </div><div> # Caso exista uma venda no dia k eh calculado um </div><div> # descasque para mercado a vista e a prazo</div><div> add_constraint(</div><div> sum_expr(</div><div> x[i,j,k,m],</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))),#1:carro,</div><div> j = as.numeric(as.vector(levels( as.factor(conj_dados[,"frig"])))),#1:frig,</div><div> m = as.numeric(as.vector(levels( as.factor(conj_dados[,"merc"])))) )#1:merc)</div><div> + sum_expr(</div><div> t[i,u,k],</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), #1:carro,</div><div> u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))) )#,1:praca)</div><div> <= bigM * y[k],</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"]))))# 1:dias</div><div> )%>%</div><div> </div><div> # Respeito ao numero maximo de descasques</div><div> add_constraint(</div><div> sum_expr(</div><div> y[k],</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) ) #1:dias)</div><div> <= Max_descasque</div><div> )%>%</div><div><br></div><div> # Desigualdade valida para ajudar na convergencia - </div><div> # todos os animais devem ser vendidos </div><div> add_constraint(</div><div> sum_expr(</div><div> x[i,j,k,m],</div><div> i = as.numeric(as.vector(levels(as.factor(conj_dados[, "carro"])))),</div><div> j = as.numeric(as.vector(levels(as.factor(conj_dados[, "frig"])))),</div><div> k = as.numeric(as.vector(levels(as.factor(conj_dados[, "dias"])))),</div><div> m = as.numeric(as.vector(levels(as.factor(conj_dados[, "merc"])))) )</div><div> == 40</div><div> )%>%</div><div> </div><div><br></div><div> # A carga vendida para mercado futuro eh de pelo menos 330 arobas</div><div> add_constraint(</div><div> 15*130*sum_expr(</div><div> t[i,u,k], i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))) ) #1:carro)</div><div> <= Carga_mercado_futuro*Trava[k,u],</div><div> u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))), #1:praca,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) #1:dias </div><div> )%>%</div><div> </div><div> # Permissao para venda no mercado futuro</div><div> add_constraint(</div><div> sum_expr(</div><div> t[i,u,k],</div><div> i = as.numeric(as.vector(levels( as.factor(conj_dados[,"carro"])))), #1:carro,</div><div> u = as.numeric(as.vector(levels( as.factor(conj_dados[,"praca"])))), #1:praca,</div><div> k = as.numeric(as.vector(levels( as.factor(conj_dados[,"dias"])))) )#1:dias)</div><div> <= bigM * permissao_venda</div><div> )%>%</div><div> saveRDS(model, file = "model.rds") %>%</div><div> <font color="#0000ff"> solve_model(with_ROI(solver = "glpk"))</font><br></div><div><br></div><div><span style="color:rgb(255,0,0)">Error in on_element(push, inplace_update_ast, get_ast_value, element) : </span><br></div><div><div><font color="#ff0000"> argument "ast" is missing, with no default</font></div></div><div><br></div><div class="gmail_signature"><div dir="ltr"><div dir="ltr"><div style="font-family:times,serif;margin:0cm 0cm 0.0001pt;font-size:16px"><span style="white-space:pre"> </span><br></div></div></div></div>
</div></div>