Стандартный ранец 0/1 требует, чтобы вес каждого предмета был независим от других. Тогда DP - эффективный алгоритм решения. Но теперь я встретил аналогичные, но расширяет эту проблему, что
вес новых элементов зависит от предыдущих элементов, уже находящихся в рюкзак.
Например, у нас есть 5 элементов a
, b
, c
, d
и e
с весом w_a
,..., w_e
. item b
и c
имеют зависимость от веса.
Когда b
уже находится в рюкзаке, вес элемента c
будет меньше, чем w_c
, потому что он может совместно использовать некоторое пространство с b
, т.е. weight(b&c) < w_b + w_c
. Симметрично, когда c
уже находится в рюкзаке, вес b
будет меньше, чем w_b
.
Эта неопределенность приводит к сбою оригинального алгоритма DP, поскольку он зависит от правильности предыдущих итераций, которые могут не исправить сейчас. Я прочитал несколько статей о рюкзаке, но у них либо есть зависимости, подверженные прибыли (квадратичная проблема с рюкзаком), либо переменная масса, которая следует за случайным распределением (проблема стохастического ранца). Я также знал о предыдущем вопросе 1/0 Вариант рюкзака с взвешенными краями, но есть только очень общий ответ, и нет ответа о том, что называется именем этот рюкзак.
Одно существующее решение:
Я также прочитал одно приблизительное решение в статью об оптимизации СУБД, где они group the related items as one combined item for knapsack
. Если использовать этот метод в нашем примере, элементы для ранца будут a
, bc
, d
, e
, поэтому нет никаких зависимостей между любыми двумя из этих четырех элементов. Однако легко построить пример, который не получает оптимального результата, например, при an item with "small weight and benefit" is grouped with another item with "large weight and benefit"
. В этом примере "маленький" элемент не должен выбираться в решении, но выбран вместе с "большим" элементом.
Вопрос:
Есть ли какие-либо эффективные методы решения, которые могут получить оптимальный результат или, по крайней мере, с некоторой ошибкой? Или я беру неправильное направление для моделирования этой проблемы?