Распределение продукта в строке в R с использованием ompr. Ошибка: выражение содержит переменную, которая не является частью модели

#r #optimization #allocation #ompr

#r #оптимизация #распределение #ompr

Вопрос:

Я работаю над проблемой распределения, используя пакет R s ompr. Цель состоит в том, чтобы распределить продукты по производственным линиям. Для этого я написал следующий код:

 volume <- product$VolumeQ4          #The volume of quarter 4 of each of the products
capacity <- lines$Capacity          #The capacity of the line in quarter 4
k <- length(product$k)              #The products (k) 54 in total 
l <- length(lines$l)                #The lines (l) 11 in total
product_lines_matrix                #this is a 54x11 dataframe showing if a line is capable 
                                    #to produce a product, 1 = if capable, 0 if not capable. 
  
 
model <- MIPModel() %>%
  
# 1 if product i  is assigned to line j 
  
add_variable(x[i, j], i = 1:k, j = 1:l, type = "binary") %>%
  
  # # objective is to assign all skus to lines where the line is capable
  
  set_objective(sum_expr(product_lines_matrix[i, j] * x[i, j], i = 1:k, j = 1:l), "max") %>%
  
  # each product needs to be assigned to line 
  
  add_constraint(sum_expr(x[i, j], j = 1:l) == 1, i = 1:k) %>% 
  
   # we cannot exceed the Q4 capacity of a line
  
  add_constraint(sum_expr(x[i, j]*volume[i], i = 1:k) <= capacity[j], j = 1:l) 

  

Я получаю следующий код ошибки

Ошибка в check_for_unknown_vars_impl(модель, the_ast): выражение содержит переменную, которая не является частью модели.

Я не привык моделировать MIP в целом, не говоря уже о R, но был бы признателен за любую помощь, которую я могу получить в этом! Есть какие — нибудь идеи , где я ошибаюсь?

Комментарии:

1. Это может помочь, если бы мы могли воспроизвести проблему.

2. Я знаю, что это довольно старое, но когда вы получаете эту ошибку, вы можете запустить traceback() , и оно покажет, какое ограничение / переменная / цель вызвали ошибку. Я попробовал с образцами данных с описанными вами измерениями и не получил ошибку. Следующее, на что я должен обратить внимание, — это посмотреть, правильно ли отформатированы ваши данные. размеры. Являются volume ли и capacity векторами длины k и l соответственно и product_lines_matrix имеют 54 строки и 11 столбцов? Еще одна вещь, которую нужно проверить, — это если это tibble, а не data.frame. При индексации tibbles возвращает tibble вместо значения ячейки.