#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 вместо значения ячейки.