Задача о рюкзаке - Knapsack problem
В проблема с рюкзаком проблема в комбинаторная оптимизация: Учитывая набор элементов, каждый из которых имеет вес и значение, определите количество каждого элемента, который нужно включить в коллекцию, чтобы общий вес был меньше или равнялся заданному пределу, а общее значение было как можно большим. Он получил свое название от проблемы, с которой сталкивается кто-то, кто ограничен фиксированным размером рюкзак и должен наполнить его самыми ценными предметами. Проблема часто возникает в распределение ресурсов где лица, принимающие решения, должны выбирать из набора неделимых проектов или задач с фиксированным бюджетом или временными ограничениями соответственно.
Проблема рюкзака изучается более века, ранние работы относятся к 1897 году.[1] Название «задача о рюкзаке» восходит к ранним работам математика. Тобиас Данциг (1884–1956),[2] и относится к банальной проблеме упаковки наиболее ценных или полезных вещей без перегрузки багажа.
Приложения
Исследование репозитория алгоритмов Университета Стони Брук в 1999 г. показало, что из 75 алгоритмических задач задача о рюкзаке была 19-й по популярности и третьей по популярности после суффиксные деревья и проблема с упаковкой бункера.[3]
Проблемы с рюкзаком возникают в реальных процессах принятия решений в самых разных областях, таких как поиск наименее расточительного способа резки сырья,[4] выбор инвестиции и портфели,[5] подбор активов для секьюритизация, обеспеченная активами,[6] и генерация ключей для Меркл – Хеллман[7] и другие ранцевых криптосистем.
Одним из первых применений алгоритмов ранца было построение и оценка тестов, в которых испытуемые имели возможность выбирать, на какие вопросы им отвечать. Для небольших примеров предоставить испытуемым такой выбор - довольно простой процесс. Например, если экзамен содержит 12 вопросов, каждый из которых оценивается в 10 баллов, тестируемому нужно ответить только на 10 вопросов, чтобы получить максимально возможную оценку в 100 баллов. Однако в тестах с неоднородным распределением баллов сделать выбор труднее. Фейерман и Вайс предложили систему, в которой студентам дают разнородный тест, в котором можно набрать 125 возможных баллов. Учащимся предлагается ответить на все вопросы в меру своих возможностей. Из возможных подмножеств задач, общая сумма баллов которых составляет в сумме 100, алгоритм ранца определит, какое подмножество дает каждому ученику максимально возможную оценку.[8]
Определение
Чаще всего решается проблема 0-1 задача о ранце, что ограничивает количество копий каждого вида элемента до нуля или одного. Учитывая набор элементы пронумерованы от 1 до , каждый с весом и ценность , наряду с максимальной грузоподъемностью ,
- максимизировать
- при условии и .
Здесь представляет количество экземпляров элемента включить в рюкзак. Неформально проблема состоит в том, чтобы максимизировать сумму значений предметов в рюкзаке, чтобы сумма весов была меньше или равнялась вместимости рюкзака.
В ограниченная задача о рюкзаке (БКП) снимает ограничение на наличие только одного элемента каждого элемента, но ограничивает количество копий каждого вида элементов до максимального неотрицательного целого числа :
- максимизировать
- при условии и
В неограниченная задача о рюкзаке (УКП) не устанавливает верхней границы количества копий каждого вида элементов и может быть сформулирован, как указано выше, за исключением того, что единственное ограничение на в том, что это неотрицательное целое число.
- максимизировать
- при условии и
Один из примеров задачи о неограниченном рюкзаке дается с использованием рисунка, показанного в начале этой статьи, и текста «если доступно любое количество каждого ящика» в заголовке этого рисунка.
Вычислительная сложность
Задача о рюкзаке интересна с точки зрения информатики по многим причинам:
- В проблема решения форма задачи о ранце (Может ли значение не менее V достигать без превышения веса W?) является НП-полный, таким образом, не существует известного алгоритма одновременно правильного и быстрого (полиномиального времени) во всех случаях.
- В то время как проблема решения является NP-полной, проблема оптимизации - нет, ее решение по крайней мере так же сложно, как и проблема решения, и не существует известного полиномиального алгоритма, который мог бы сказать, учитывая решение, является ли оно оптимальным (что означало бы что нет решения с большим V, решая таким образом NP-полную задачу решения).
- Существует псевдополиномиальное время алгоритм с использованием динамическое программирование.
- Существует полностью полиномиальная схема аппроксимации, который использует алгоритм псевдополиномиального времени в качестве подпрограммы, описанной ниже.
- Тем не менее, многие случаи, возникающие на практике, и «случайные экземпляры» из некоторых распределений могут быть решены точно.
Существует связь между проблемами «решения» и «оптимизации» в том смысле, что если существует полиномиальный алгоритм, который решает проблему «решения», то можно найти максимальное значение для задачи оптимизации за полиномиальное время, применяя этот алгоритм итеративно, пока увеличивая значение k. С другой стороны, если алгоритм находит оптимальное значение задачи оптимизации за полиномиальное время, то проблема решения может быть решена за полиномиальное время путем сравнения значения решения, полученного этим алгоритмом, со значением k. Таким образом, обе версии проблемы имеют одинаковую сложность.
Одна из тем в исследовательской литературе - определить, как выглядят «сложные» примеры задачи о рюкзаке.[9][10] или взглянуть с другой стороны, чтобы определить, какие свойства экземпляров на практике могут сделать их более податливыми, чем предполагает их NP-полное поведение наихудшего случая.[11] Целью поиска этих "сложных" экземпляров является их использование в криптография с открытым ключом системы, такие как Ранцевая криптосистема Меркла-Хеллмана.
Кроме того, примечателен тот факт, что сложность задачи о рюкзаке зависит от формы ввода. Если веса и прибыль даны как целые числа, это слабо NP-полный, пока это сильно NP-полный если веса и прибыль даны в виде рациональных чисел.[12] Однако в случае рациональных весов и прибылей он все же допускает полностью полиномиальная схема аппроксимации.
Решение
Для решения задач о рюкзаке доступно несколько алгоритмов, основанных на подходе динамического программирования.[13] то ветвь и переплет подход[14] или же гибридизации обоих подходов.[11][15][16][17]
Алгоритм предварительного динамического программирования
В неограниченная задача о рюкзаке (УКП) не накладывает ограничений на количество копий каждого вида товаров. Кроме того, здесь мы предполагаем, что
- при условии и
Заметьте, что обладает следующими свойствами:
1. (сумма нулевых элементов, т.е. сумма пустого множества).
2. , , куда стоимость -й вид предметов.
Второе свойство требует подробного объяснения. В процессе выполнения этого метода, как мы получаем вес ? Есть только пути и предыдущие веса где есть всего виды разных предметов (говоря разные, мы имеем в виду, что вес и стоимость не совсем одинаковы). Если мы знаем каждое значение этих элементы и соответствующее максимальное значение ранее, мы просто сравниваем их друг с другом и в конечном итоге получаем максимальное значение, и все готово.
Здесь максимум пустого множества принимается равным нулю. Табулирование результатов вверх через дает решение. Поскольку расчет каждого включает изучение не более предметов, и их не более ценности для расчета время работы решения динамического программирования составляет . Разделение по их наибольший общий делитель это способ улучшить время работы.
Даже если P ≠ NP, то сложность не противоречит тому, что задача о рюкзаке НП-полный, поскольку , В отличие от , не является полиномиальным по длине входа в задачу. Длина вход в задачу пропорционален количеству бит в , , а не сам. Однако, поскольку эта среда выполнения псевдополином, это делает (вариант решения) задачу о ранце слабо NP-полная задача.
0-1 задача о ранце
Аналогичное решение динамического программирования для задачи о ранце 0-1 также выполняется за псевдополиномиальное время. Предполагать - строго положительные целые числа. Определять быть максимальным значением, которое может быть достигнуто при весе меньше или равном с использованием предметов до (первый Предметы).
Мы можем определить рекурсивно следующим образом: (Определение А)
- если (вес нового товара превышает текущий лимит)
- если .
Затем решение можно найти, вычислив . Чтобы сделать это эффективно, мы можем использовать таблицу для хранения предыдущих вычислений.
Ниже приводится псевдокод динамической программы:
1 // Вход: 2 // Значения (хранятся в массиве v) 3 // Вес (хранится в массиве w) 4 // Количество отдельных элементов (n) 5 // Вместимость ранца (Вт) 6 // ПРИМЕЧАНИЕ. Предполагается, что массив «v» и массив «w» хранят все соответствующие значения, начиная с индекса 1. 7 8 за j из 0 к W делать: 9 м[0, j] := 010 11 за я из 1 к п делать:12 за j из 0 к W делать:13 если ш[я] > j тогда:14 м[я, j] := м[я-1, j]15 еще:16 м[я, j] := Максимум(м[я-1, j], м[я-1, j-ш[я]] + v[я])
Поэтому это решение будет работать в время и Космос.
Однако, если мы сделаем еще один или два шага дальше, мы должны знать, что метод будет работать в промежутке времени между и . Из Определение А, мы можем знать, что нет необходимости вычислять все веса, когда количество элементов и сами элементы, которые мы выбрали, фиксированы. Другими словами, приведенная выше программа вычисляет больше, чем ожидалось, потому что вес все время меняется с 0 на W. Все, что нам нужно сделать, это сравнить m [i-1, j] и m [i-1, jw [i]] + v [i] для m [i, j], и когда m [i-1, jw [i]] вне допустимого диапазона, мы просто передаем значение m [i-1, j] в m [i, j]. С этой точки зрения мы можем запрограммировать этот метод так, чтобы он выполнялся рекурсивно.
1 // Вход: 2 // Значения (хранятся в массиве v) 3 // Вес (хранится в массиве w) 4 // Количество отдельных элементов (n) 5 // Вместимость ранца (Вт) 6 // ПРИМЕЧАНИЕ. Предполагается, что массив «v» и массив «w» хранят все соответствующие значения, начиная с индекса 1. 7 8 Определять ценить[п, W] 9 10 Инициализировать Все ценить[я, j] = -111 12 Определять м:=(я,j) // Определим функцию m так, чтобы она представляла максимальное значение, которое мы можем получить при условии: использовать первые i элементов, общий предел веса равен j13 {14 если я == 0 или же j <= 0 тогда:15 ценить[я, j] = 016 возвращаться17 18 если (ценить[я-1, j] == -1) тогда: // m [i-1, j] не вычислено, необходимо вызвать функцию m19 ценить[я-1, j] = м(я-1, j)20 21 если ш[я] > j тогда: // товар не помещается в сумку (ЭТО НЕ УДАЛОСЬ В ПРЕДЫДУЩЕМ АЛГОРИТМЕ)22 ценить[я, j] = ценить[я-1, j]23 еще: 24 если (ценить[я-1, j-ш[я]] == -1) тогда: // m [i-1, j-w [i]] не вычислено, мы должны вызвать функцию m25 ценить[я-1, j-ш[я]] = м(я-1, j-ш[я])26 ценить[я, j] = Максимум(ценить[я-1,j], ценить[я-1, j-ш[я]] + v[я])27 }28 29 Пробег м(п, W)
Например, есть 10 различных предметов, а ограничение по весу - 67. Итак,
Если вы используете вышеуказанный метод для вычисления , ты получишь (за исключением вызовов, которые производят m (i, j) = 0):
Кроме того, мы можем разбить рекурсию и преобразовать ее в дерево. Затем мы можем вырезать несколько листьев и использовать параллельные вычисления, чтобы ускорить выполнение этого метода.
Встреча посередине
Другой алгоритм для ранца 0-1, открытый в 1974 году.[18] и иногда называется "встречей посередине" из-за параллелей с аналогично названный алгоритм в криптографии, является экспоненциальной по количеству различных элементов, но может быть предпочтительнее алгоритма DP, когда большой по сравнению с п. В частности, если неотрицательные, но не целые числа, мы все равно могли бы использовать алгоритм динамического программирования, масштабируя и округляя (т.е. используя арифметика с фиксированной точкой ), но если проблема требует дробные цифры точности для получения правильного ответа, нужно будет масштабировать на , а алгоритм DP потребует пространство и время.
алгоритм Встреча посередине является Вход: Набор предметов с весами и значениями. выход: Наибольшее комбинированное значение подмножества. разбить множество {1 ...п} на два набора А и B приблизительно равного размера вычислить веса и значения всех подмножеств каждого набора для каждого подмножество из А делать найти подмножество B наибольшего значения, при котором общий вес меньше W отслеживать наибольшую совокупную ценность, замеченную до сих пор
Алгоритм принимает пространства, и эффективные реализации шага 3 (например, сортировка подмножеств B по весу, отбрасывание подмножеств B, которые весят больше, чем другие подмножества B большего или равного значения, и использование двоичного поиска для поиска наилучшего соответствия) приводят к время выполнения . Как и в случае с встретиться в середине атаки в криптографии это улучшает время выполнения наивного подхода грубой силы (изучение всех подмножеств ) за счет использования экспоненциального, а не постоянного пространства (см. также бэби-шаг гигантский шаг ).
Алгоритмы аппроксимации
Что касается большинства NP-полных проблем, этого может быть достаточно, чтобы найти работоспособные решения, даже если они не оптимальны. Однако предпочтительно приближение дает гарантию разницы между значением найденного решения и значением оптимального решения.
Как и в случае со многими полезными, но сложными в вычислительном отношении алгоритмами, были проведены существенные исследования по созданию и анализу алгоритмов, приближающих решение. Задача о ранце, хотя и NP-Hard, является одним из набора алгоритмов, которые все еще могут быть аппроксимированы до любой указанной степени. Это означает, что задача имеет схему аппроксимации полиномиальным временем. Точнее говоря, задача о рюкзаке имеет полностью полиномиальную схему аппроксимации по времени (FPTAS).[19]
Алгоритм жадного приближения
Джордж Данциг предложил жадный алгоритм аппроксимации решить неограниченную задачу о ранце.[20] Его версия сортирует предметы в порядке убывания стоимости на единицу веса, . Затем он вставляет их в мешок, начиная с максимально возможного количества копий предметов первого типа, пока в мешке не останется места для новых. При условии, что есть неограниченный запас каждого вида предметов, если - максимальное количество предметов, которые помещаются в мешок, тогда жадный алгоритм гарантированно достигнет хотя бы значения .
Для ограниченной задачи, когда предложение каждого вида предметов ограничено, приведенный выше алгоритм может быть далек от оптимального. Тем не менее, простая модификация позволяет решить этот случай: Построить решение упаковывая предметы как можно дольше с жадностью, т.е. куда . Кроме того, построим второе решение содержащий первый элемент, который не подошел. С дает верхнюю границу для LP релаксация задачи, один из наборов должен иметь значение не менее ; таким образом мы возвращаем то, что из и имеет лучшее значение для получения -приближение.
Схема аппроксимации полностью полиномиальным временем
В полностью полиномиальная схема аппроксимации по времени (FPTAS) для задачи о рюкзаке использует тот факт, что причина, по которой проблема не имеет известных решений за полиномиальное время, состоит в том, что прибыль, связанная с предметами, не ограничена. Если округлить некоторые из наименее значащих цифр значений прибыли, то они будут ограничены полиномом и 1 / ε, где ε - оценка правильности решения. Это ограничение означает, что алгоритм может найти решение за полиномиальное время, которое является правильным в пределах коэффициента (1-ε) от оптимального решения.[19]
алгоритм FPTAS является Вход: ε ∈ (0,1] список A из n элементов, заданных их значениями, , и веса выход: S 'решение FPTAS P: = max // максимальное значение элемента K: = ε за я из 1 к п делать := конец для возвращаться решение S ', используя значения в динамической программе, описанной выше
Теорема: Набор вычисленный по приведенному выше алгоритму удовлетворяет , куда оптимальное решение.
Отношения доминирования
Решить проблему неограниченного рюкзака можно легче, выбрасывая предметы, которые никогда не понадобятся. Для данного товара , предположим, мы смогли найти набор предметов такой, что их общий вес меньше веса , а их суммарное значение больше, чем значение . потом не может появиться в оптимальном решении, потому что мы всегда можем улучшить любое потенциальное решение, содержащее заменив с набором . Поэтому мы можем не учитывать -й элемент целиком. В таких случаях, говорят доминировать . (Обратите внимание, что это не относится к задачам с ограниченным рюкзаком, так как мы, возможно, уже израсходовали предметы в .)
Обнаружение отношений доминирования позволяет нам значительно уменьшить размер области поиска. Есть несколько разных типов отношения доминирования,[11] которые все удовлетворяют неравенству вида:
, и для некоторых
куда и . Вектор обозначает количество копий каждого члена .
- Коллективное господство
- В -й элемент коллективно доминируют к , записанный как , если общий вес некоторой комбинации предметов в меньше чем шя и их общая стоимость больше, чем vя. Формально, и для некоторых , т.е. . Проверить это доминирование сложно с вычислительной точки зрения, поэтому его можно использовать только с подходом динамического программирования. Фактически, это эквивалентно решению меньшей задачи о рюкзаке, где , , а элементы ограничены .
- Пороговое доминирование
- В -й элемент порог преобладает к , записанный как , если некоторое количество копий преобладают . Формально, , и для некоторых и . Это обобщение коллективного доминирования, впервые введенное в[13] и используется в алгоритме EDUK. Самый маленький такой определяет порог пункта , написано . В этом случае оптимальное решение может содержать не более копии .
- Множественное доминирование
- В -й элемент многократно преобладают по одной позиции , записанный как , если преобладает некоторое количество копий . Формально, , и для некоторых т.е. . Это преобладание можно эффективно использовать во время предварительной обработки, поскольку его относительно легко обнаружить.
- Модульное доминирование
- Позволять быть лучший предмет, т.е. для всех . Это предмет с наибольшей плотностью стоимости. В -й элемент модульное доминирование по одной позиции , записанный как , если преобладают плюс несколько копий . Формально, , и т.е. .
Вариации
Существует множество вариаций задачи о рюкзаке, которые возникли в результате огромного количества применений основной задачи. Основные вариации происходят за счет изменения количества некоторых параметров проблемы, таких как количество предметов, количество целей или даже количество ранцев.
Задача о многоцелевом рюкзаке
Этот вариант меняет цель индивидуального наполнения рюкзака. Вместо одной цели, такой как максимизация денежной прибыли, цель может иметь несколько измерений. Например, могут быть экологические или социальные проблемы, а также экономические цели. Часто решаемые проблемы включают оптимизацию портфеля и транспортной логистики.[21][22]
В качестве примера предположим, что вы управляете круизным лайнером. Вы должны решить, сколько известных комиков нанять. Эта лодка может вместить не более одной тонны пассажиров, а вес артистов должен быть менее 1000 фунтов. Каждый комик имеет вес, ведет бизнес в зависимости от своей популярности и просит определенную зарплату. В этом примере у вас есть несколько целей. Вы, конечно же, хотите увеличить популярность своих артистов, минимизируя их зарплаты. Кроме того, вы хотите, чтобы у вас было как можно больше артистов.
Многомерная задача о рюкзаке
В этом варианте вес рюкзака задается D-мерным вектором а рюкзак имеет D-мерный вектор вместимости . Цель состоит в том, чтобы максимизировать сумму значений предметов в рюкзаке так, чтобы сумма весов в каждом измерении не превышает .
Многомерный рюкзак в вычислительном отношении сложнее, чем рюкзак; даже для , проблема не имеет EPTAS если PН.П.[23] Однако алгоритм в[24] показано, как эффективно решать разреженные экземпляры. Экземпляр многомерного рюкзака является разреженным, если есть набор за так что для каждого предмета рюкзака , такой, что и . Такие случаи возникают, например, при планировании пакетов в беспроводной сети с узлами ретрансляции.[24] Алгоритм от[24] также решает редкие примеры варианта с множественным выбором, многомерного рюкзака с множественным выбором.
Алгоритм IHS (полка увеличения высоты) оптимален для 2D-рюкзака (упаковка квадратов в двумерный квадрат единичного размера): когда в оптимальной упаковке находится не более пяти квадратов.[25]
Задача с несколькими рюкзаками
Этот вариант похож на Проблема с упаковкой бункера. Он отличается от Задачи упаковки ящиков тем, что можно выбрать подмножество элементов, тогда как в Задаче упаковки ящиков все предметы должны быть упакованы в определенные ящики. Идея состоит в том, что есть несколько ранцев. Это может показаться тривиальным изменением, но оно не эквивалентно увеличению вместимости исходного ранца. Этот вариант используется во многих задачах загрузки и планирования в исследовании операций и имеет Схема полиномиальной аппроксимации.[26]
Квадратичная задача о рюкзаке
Квадратичная задача о рюкзаке максимизирует квадратичную целевую функцию с учетом двоичных и линейных ограничений емкости.[27] Проблема была предложена Галло, Хаммером и Симеоне в 1980 г.[28] однако первое рассмотрение проблемы относится к Витцгаллу в 1975 году.[29]
Проблема подмножества суммы
В проблема суммы подмножества является частным случаем решения и задач 0-1, где вес каждого вида элемента равен значению: . В области криптография, период, термин проблема с рюкзаком часто используется для обозначения проблемы суммы подмножества и широко известен как один из 21 NP-полная задача Карпа.[30]
Обобщение проблемы суммы подмножества называется проблемой суммы нескольких подмножеств, в которой существует несколько бункеров с одинаковой емкостью. Было показано, что обобщение не имеет FPTAS.[31]
Смотрите также
Примечания
- ^ Мэтьюз, Г. Б. (25 июня 1897 г.). «О разделении чисел» (PDF). Труды Лондонского математического общества. 28: 486–490. Дои:10.1112 / плмс / с1-28.1.486.
- ^ Данциг, Тобиас. Числа: язык науки, 1930.
- ^ Скиена, С. С. (сентябрь 1999 г.). «Кто интересуется алгоритмами и почему? Уроки из репозитория алгоритмов Стоуни-Брук». Новости ACM SIGACT. 30 (3): 65–74. CiteSeerX 10.1.1.41.8357. Дои:10.1145/333623.333627. ISSN 0163-5700. S2CID 15619060.
- ^ Келлерер, Пферши и Писингер 2004, стр. 449
- ^ Келлерер, Пферши и Писингер 2004, стр. 461
- ^ Келлерер, Пферши и Писингер 2004, стр. 465
- ^ Келлерер, Пферши и Писингер 2004, стр. 472
- ^ Фейерман, Мартин; Вайс, Харви (апрель 1973 г.). «Математическая модель программирования для построения тестов и оценки». Наука управления. 19 (8): 961–966. Дои:10.1287 / mnsc.19.8.961. JSTOR 2629127.
- ^ Писингер, Д. 2003. Где проблемы с твердым рюкзаком? Технический отчет 2003/08, Департамент компьютерных наук, Копенгагенский университет, Копенгаген, Дания.
- ^ Caccetta, L .; Куланут, А. (2001). «Вычислительные аспекты задач жесткого ранца». Нелинейный анализ. 47 (8): 5547–5558. Дои:10.1016 / s0362-546x (01) 00658-7.
- ^ а б c Пуарриес, Винсент; Янев, Никола; Андонов, Румен (2009). «Гибридный алгоритм решения неограниченной задачи о ранце». Дискретная оптимизация. 6 (1): 110–124. Дои:10.1016 / j.disopt.2008.09.004. ISSN 1572-5286.
- ^ Войтчак, Доминик (2018). «О сильной NP-полноте рациональных задач». Международный симпозиум по информатике в России. Конспект лекций по информатике. 10846: 308–320. arXiv:1802.09465. Дои:10.1007/978-3-319-90530-3_26. ISBN 978-3-319-90529-7. S2CID 3637366.
- ^ а б Андонов, Румен; Пуарриес, Винсент; Раджопадхе, Санджай (2000). "Неограниченная проблема рюкзака: еще раз о динамическом программировании". Европейский журнал операционных исследований. 123 (2): 168–181. CiteSeerX 10.1.1.41.2135. Дои:10.1016 / S0377-2217 (99) 00265-9.[постоянная мертвая ссылка ]
- ^ С. Мартелло, П. Тот, Проблемы с рюкзаком: алгоритмы и компьютерные реализации, Джон Уайли и сыновья, 1990
- ^ С. Мартелло, Д. Писингер, П. Тот, Динамическое программирование и строгие оценки для задачи о рюкзаке 0-1, Manag. Sci., 45:414–424, 1999.
- ^ Плато, G .; Элькихель, М. (1985). «Гибридный алгоритм для задачи о рюкзаке 0-1». Методы опер. Res. 49: 277–293.
- ^ Martello, S .; Тот, П. (1984). «Смесь динамического программирования и ветвей и границ для задачи суммы подмножества». Manag. Наука. 30 (6): 765–771. Дои:10.1287 / mnsc.30.6.765.
- ^ Горовиц, Эллис; Сахни, Сартадж (1974), "Вычисление разделов с приложениями к задаче о рюкзаке", Журнал Ассоциации вычислительной техники, 21 (2): 277–292, Дои:10.1145/321812.321823, HDL:1813/5989, МИСТЕР 0354006, S2CID 16866858
- ^ а б Вазирани, Виджай. Аппроксимационные алгоритмы. Springer-Verlag Berlin Heidelberg, 2003 г.
- ^ Данциг, Джордж Б. (1957). «Дискретно-переменные экстремальные задачи». Исследование операций. 5 (2): 266–288. Дои:10.1287 / opre.5.2.266.
- ^ Чанг, Т. Дж. И др. Эвристика для оптимизации портфеля с ограничением количества элементов.Технический отчет, Лондон SW7 2AZ, Англия: Школа менеджмента, ImperialCollege, май 1998 г.
- ^ Чанг, С.С. и др. "Оптимизация двух критериев на основе генетических алгоритмов для тяговых подстанций в железнодорожной системе постоянного тока. »В Fogel [102], 11-16.
- ^ Кулик, А .; Шахнаи, Х. (2010). «Для двухмерного рюкзака EPTAS не существует» (PDF). Инф. Процесс. Латыш. 110 (16): 707–712. CiteSeerX 10.1.1.161.5838. Дои:10.1016 / j.ipl.2010.05.031.
- ^ а б c Коэн Р. и Гребла Г. 2014. «Многомерное планирование OFDMA в беспроводной сети с релейными узлами». в Proc. IEEE INFOCOM’14, 2427–2435.
- ^ Ян Лан, Дьёрдь Доса, Синь Хан, Чэньян Чжоу, Аттила Бэнко [1]: 2D рюкзак: Упаковка квадратов, Теоретическая информатика Vol. 508. С. 35–40.
- ^ Чандра Чекури и Санджив Кханна (2005). «ПТАС для задачи о множественном рюкзаке». SIAM Журнал по вычислениям. 35 (3): 713–728. CiteSeerX 10.1.1.226.3387. Дои:10.1137 / s0097539700382820.
- ^ Wu, Z. Y .; Yang, Y.J .; Bai, F. S .; Мамедов М. (2011). «Условия глобальной оптимальности и методы оптимизации для квадратичных задач о ранце». Приложение J Optim Theory. 151 (2): 241–259. Дои:10.1007 / s10957-011-9885-4. S2CID 31208118.
- ^ Галло, G .; Hammer, P.L .; Симеоне, Б. (1980). Квадратичные задачи о ранце. Математическое программирование. 12. С. 132–149. Дои:10.1007 / BFb0120892. ISBN 978-3-642-00801-6.
- ^ Витцгалл, К. (1975). Математические методы выбора места для систем электронных сообщений (EMS). Внутренний отчет NBS. Bibcode:1975STIN ... 7618321W.
- ^ Ричард М. Карп (1972). "Сводимость среди комбинаторных задач ". В Р. Э. Миллер и Дж. У. Тэтчер (редакторы). Сложность компьютерных вычислений. Нью-Йорк: Пленум. С. 85–103
- ^ Капрара, Альберто; Келлерер, Ганс; Пферши, Ульрих (2000). "Проблема суммы множественных подмножеств". СИАМ Дж. Оптим. 11 (2): 308–319. CiteSeerX 10.1.1.21.9826. Дои:10.1137 / S1052623498348481.
Рекомендации
- Гарей, Майкл Р.; Дэвид С. Джонсон (1979). Компьютеры и непреодолимость: руководство по теории NP-полноты. W.H. Фримен. ISBN 978-0-7167-1045-5. A6: MP9, стр. 247.
- Келлерер, Ганс; Пферши, Ульрих; Писингер, Дэвид (2004). Проблемы с рюкзаком. Springer. Дои:10.1007/978-3-540-24777-7. ISBN 978-3-540-40286-2. МИСТЕР 2161720.
- Мартелло, Сильвано; Тот, Паоло (1990). Задачи о ранце: алгоритмы и компьютерные реализации. Wiley-Interscience. ISBN 978-0-471-92420-3. МИСТЕР 1086874.
внешняя ссылка
- Бесплатная загрузка книги Сильвано Мартелло и Паоло Тота "Задачи о ранце: алгоритмы и компьютерные реализации"
- Слайды лекции по задаче о рюкзаке
- PYAsUKP: еще один решатель проблемы неограниченного рюкзака, с кодом, использующим отношения доминирования в гибридном алгоритме, тестами и загружаемыми копиями некоторых статей.
- Домашняя страница Давида Писингера с загружаемыми копиями некоторых статей из списка публикаций (в том числе «Где проблемы с рюкзаком?»)
- Решение проблем с рюкзаком на многих языках в Код Розетты
- Алгоритм динамического программирования для задачи о рюкзаке 0/1
- Решение проблем с рюкзаком (онлайн)
- Решение 0-1-KNAPSACK с помощью генетических алгоритмов на Ruby
- Коды для квадратичной задачи о ранце