<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>