Задача о рюкзаке — одна из наиболее изученных задач комбинаторной оптимизации , имеющая множество реальных приложений. По этой причине было рассмотрено множество частных случаев и обобщений. [1] [2]
Общим для всех версий является набор из n элементов, каждый из которых имеет связанную прибыль p j и вес w j . Для выбора элемента используется бинарная переменная решения x j . Цель состоит в том, чтобы выбрать некоторые элементы с максимальной общей прибылью, соблюдая при этом, что максимальный общий вес выбранных элементов не должен превышать W . Обычно эти коэффициенты масштабируются, чтобы стать целыми числами, и они почти всегда предполагаются положительными.
Задача о рюкзаке в ее самой простой форме:
Один из распространенных вариантов заключается в том, что каждый элемент может быть выбран несколько раз. Задача о ограниченном рюкзаке определяет для каждого элемента j верхнюю границу u j (которая может быть положительным целым числом или бесконечностью) количества раз, когда элемент j может быть выбран:
Неограниченная задача о рюкзаке (иногда называемая целочисленной задачей о рюкзаке ) не устанавливает никаких верхних границ на количество раз, которое может быть выбран один и тот же предмет:
В 1975 году Люкер показал, что неограниченный вариант является NP-полным . [3] Как ограниченный, так и неограниченный варианты допускают FPTAS (по сути, тот же, что использовался в задаче о рюкзаке 0-1).
Если предметы подразделяются на k классов, обозначенных , и из каждого класса необходимо взять ровно один предмет, то мы получаем задачу о рюкзаке с множественным выбором :
Если для каждого элемента прибыль и вес равны, мы получаем задачу подмножества суммы (часто вместо этого приводится соответствующая задача решения ):
Если у нас есть n предметов и m рюкзаков разной вместимости , то мы получаем задачу о нескольких рюкзаках :
В качестве частного случая задачи о множественном рюкзаке, когда прибыли равны весам и все контейнеры имеют одинаковую вместимость, мы можем получить задачу о сумме множественных подмножеств .
Квадратичная задача о рюкзаке :
Задача о рюкзаке Set-Union :
SUKP определяется Келлерером и др . [2] (на стр. 423) следующим образом:
Дан набор элементов и набор так называемых элементов , каждый элемент соответствует подмножеству набора элементов . Элементы имеют неотрицательную прибыль , , а элементы имеют неотрицательный вес , . Общий вес набора элементов определяется общим весом элементов объединения соответствующих наборов элементов. Цель состоит в том, чтобы найти подмножество элементов с общим весом, не превышающим вместимость рюкзака, и максимальной прибылью.
Если имеется более одного ограничения (например, ограничение по объему и ограничение по весу, где объем и вес каждого предмета не связаны), мы получаем задачу о рюкзаке с множественными ограничениями , многомерную задачу о рюкзаке или m - мерную задачу о рюкзаке . (Обратите внимание, что «размерность» здесь не относится к форме каких-либо предметов.) У этой задачи есть варианты 0-1, ограниченный и неограниченный; неограниченный вариант показан ниже.
Было показано, что вариант 0-1 (для любого фиксированного ) является NP-полным около 1980 года и, что еще сильнее, не имеет FPTAS, если только P=NP. [4] [5]
Ограниченные и неограниченные варианты (для любого фиксированного ) также демонстрируют одинаковую твердость. [6]
Для любого фиксированного эти задачи допускают псевдополиномиальный алгоритм времени (похожий на алгоритм для базового рюкзака) и PTAS . [2]
Если все прибыли равны 1, мы постараемся максимизировать количество предметов, которое не превысит вместимость рюкзака:
Если у нас есть несколько контейнеров (одинакового размера) и мы хотим упаковать все n предметов в как можно меньшее количество контейнеров, мы получаем задачу упаковки контейнеров , которая моделируется с помощью индикаторных переменных, указывающих, какой контейнер i используется:
Задача раскроя идентична задаче упаковки в контейнеры , но поскольку в практических примерах обычно встречается гораздо меньше типов предметов, часто используется другая формулировка. Предмет j требуется B j раз, каждый «шаблон» предметов, помещающихся в один рюкзак, имеет переменную x i (существует m шаблонов), а шаблон i использует предмет j b ij раз:
Если к задаче о рюкзаке с множественным выбором добавить ограничение, что каждое подмножество имеет размер n , и убрать ограничение на общий вес, то получим задачу о назначениях , которая также является задачей нахождения максимального двудольного паросочетания :
В варианте рюкзака максимальной плотности есть начальный вес , и мы максимизируем плотность выбранных предметов, которые не нарушают ограничение вместимости: [7]
Хотя они встречаются реже, чем описанные выше, существуют и другие проблемы, похожие на проблемы с рюкзаком, в том числе:
Последние три из них обсуждаются в справочной работе Келлерера и др . «Задачи о ранце» . [2]
{{cite book}}
: CS1 maint: multiple names: authors list (link){{cite book}}
: CS1 maint: multiple names: authors list (link)