Аноним

Аппроксимационные схемы для задачи об упаковке в контейнеры: различия между версиями

Материал из WEGA
м
 
(не показаны 2 промежуточные версии этого же участника)
Строка 27: Строка 27:




Подход де ла Веги и Люкера [3] заключался в том, чтобы предложить технику аппроксимации исходного экземпляра более простым экземпляром, в котором крупные предметы могут иметь только O(1) различных размеров. Их идея была проста. Во-первых, достаточно ограничить внимание крупными предметами, скажем, размером больше <math>\varepsilon</math>. Обозначим этот набор <math>I_b</math>. Пусть имеется (почти) оптимальная упаковка для <math>I_b</math>; рассмотрим решение, полученное путем жадного заполнения контейнеров оставшимися мелкими предметами, открывая новые контейнеры только в случае необходимости. Действительно, если новые контейнеры не потребуются, то решение по-прежнему остается почти оптимальным, поскольку упаковка для <math>I_b</math> была почти оптимальной. Если же дополнительные контейнеры необходимы, то каждый контейнер (возможно, за исключением одного) должен быть заполнен до объема <math>(1 - \epsilon)</math>, что дает упаковку с использованием <math>Size(I)/(1 - \epsilon) + 1 \le OPT(I)/(1 - \epsilon) + 1</math> контейнеров. Таким образом, достаточно сосредоточиться на решении задачи <math>I_b</math> почти оптимальным способом. Для этого авторы показывают, как получить другой экземпляр задачи <math>I'</math> со следующими свойствами. Во-первых, в <math>I'</math> имеется только <math>O(1 / \epsilon^2)</math> различных размеров, во-вторых, <math>I_b</math>I0 является приближением <math>I_b</math> в том смысле, что <math>OPT(I_b) \ge OPT(I')</math> – и, более того, любое решение <math>I'</math> подразумевает решение <math>I_b</math> с использованием <math>O(\epsilon \cdot OPT(I))</math> дополнительных контейнеров. Поскольку в задаче <math>I'</math> имеется только <math>1 / \epsilon^2</math> различных размеров элементов, а в любой контейнер можно поместить не более <math>1 / \epsilon</math> таких элементов, существует не более <math>O(1 / \epsilon^2)^{1 / \epsilon}</math> способов упаковки в контейнеры. Таким образом, задача <math>I'</math> может быть решена оптимально путем исчерпывающего перечисления (или еще более эффективно с помощью описанной ниже формулировки целочисленного программирования).
Подход де ла Веги и Люкера [3] заключался в том, чтобы предложить технику аппроксимации исходного экземпляра более простым экземпляром, в котором крупные предметы могут иметь только O(1) различных размеров. Их идея была проста. Во-первых, достаточно ограничить внимание крупными предметами, скажем, размером больше <math>\varepsilon</math>. Обозначим этот набор <math>I_b</math>. Пусть имеется (почти) оптимальная упаковка для <math>I_b</math>; рассмотрим решение, полученное путем жадного заполнения контейнеров оставшимися мелкими предметами, открывая новые контейнеры только в случае необходимости. Действительно, если новые контейнеры не потребуются, то решение по-прежнему остается почти оптимальным, поскольку упаковка для <math>I_b</math> была почти оптимальной. Если же дополнительные контейнеры необходимы, то каждый контейнер (возможно, за исключением одного) должен быть заполнен до объема <math>(1 - \epsilon)</math>, что дает упаковку с использованием <math>Size(I)/(1 - \epsilon) + 1 \le OPT(I)/(1 - \epsilon) + 1</math> контейнеров. Таким образом, достаточно сосредоточиться на решении задачи <math>I_b</math> почти оптимальным способом. Для этого авторы показывают, как получить другой экземпляр задачи <math>I'</math> со следующими свойствами. Во-первых, в <math>I'</math> имеется только <math>O(1 / \epsilon^2)</math> различных размеров, во-вторых, <math>I'</math> является приближением <math>I_b</math> в том смысле, что <math>OPT(I_b) \ge OPT(I')</math> – и, более того, любое решение <math>I'</math> подразумевает решение <math>I_b</math> с использованием <math>O(\epsilon \cdot OPT(I))</math> дополнительных контейнеров. Поскольку в задаче <math>I'</math> имеется только <math>1 / \epsilon^2</math> различных размеров элементов, а в любой контейнер можно поместить не более <math>1 / \epsilon</math> таких элементов, существует не более <math>O(1 / \epsilon^2)^{1 / \epsilon}</math> способов упаковки в контейнеры. Таким образом, задача <math>I'</math> может быть решена оптимально путем исчерпывающего перечисления (или еще более эффективно с помощью описанной ниже формулировки целочисленного программирования).




Строка 39: Строка 39:




Отправной точкой является экспоненциально большая релаксация линейного программирования (LP) данной задачи, обычно называемая конфигурационной линейной программой. Здесь имеется переменная <math>x_S</math>, соответствующая каждому подмножеству предметов S, которые можно подходящим образом упаковать в контейнер. Задача состоит в минимизации <math>\sum_S x_S</math> при условии, что для каждого предмета i сумма <math>x_S</math> по всем подмножествам S, содержащим i, не меньше 1. Очевидно, что это релаксация, поскольку задание соотношения <math>x_S = 1</math> для каждого набора S, соответствующего контейнеру в оптимальном решении, является допустимым целочисленным решением задачи LP. Несмотря на то, что в этой формулировке решение имеет экспоненциальный размер, задача разделения для двойственной формулировки является задачей о рюкзаке, и поэтому LP может быть решена за полиномиальное время с любой точностью (в частности, с точностью до 1) методом эллипсоидов. Такое решение называется дробно-линейной упаковкой. Заметим, что если имеется <math>n_i</math> предметов, каждый из которых имеет размер ровно <math>s_i</math>, то ограничения, соответствующие i, можно «объединить», чтобы получить следующий вариант LP:
Отправной точкой является экспоненциально большая релаксация линейного программирования (LP) данной задачи, обычно называемая конфигурационной линейной программой. Здесь имеется переменная <math>x_S</math>, соответствующая каждому подмножеству предметов S, которые можно подходящим образом упаковать в контейнер. Задача состоит в минимизации <math>\sum_S x_S</math> при условии, что для каждого предмета i сумма <math>x_S</math> по всем подмножествам S, содержащим i, не меньше 1. Очевидно, что это релаксация, поскольку задание соотношения <math>x_S = 1</math> для каждого набора S, соответствующего контейнеру в оптимальном решении, является допустимым целочисленным решением задачи LP. Несмотря на то, что в этой формулировке решение имеет экспоненциальную величину, задача разделения для двойственной формулировки является задачей о рюкзаке, и поэтому LP может быть решена за полиномиальное время с любой точностью (в частности, с точностью до 1) методом эллипсоидов. Такое решение называется дробно-линейной упаковкой. Заметим, что если имеется <math>n_i</math> предметов, каждый из которых имеет размер ровно <math>s_i</math>, то ограничения, соответствующие i, можно «объединить», чтобы получить следующий вариант LP:


<math>min \sum_S x_S</math>, такой, что <math>\sum_S a_{S, i} x_S \ge n_i \; \forall</math> размеров предметов i, <math>x_S \ge 0 \; \forall</math> допустимых множеств S.
<math>min \sum_S x_S</math>, такой, что <math>\sum_S a_{S, i} x_S \ge n_i</math> для всех размеров предметов i, <math>x_S \ge 0</math> для всех допустимых множеств S.




Здесь <math>a_{S,i}</math> – количество предметов размера <math>s_i</math> в допустимом множестве S. Обозначим за <math>q(I)</math> количество различных размеров в наборе <math>I</math>. Число нетривиальных ограничений в LP равно <math>q(I)</math>, что означает, что существует базовое оптимальное решение этой линейной программы, в котором только <math>q(I)</math> переменных заданы нецелочисленными. Кармаркар и Карп используют это наблюдение весьма нетривиальным способом. Следующая лемма описывает их основную идею.
Здесь <math>a_{S,i}</math> – количество предметов размера <math>s_i</math> в допустимом множестве S. Обозначим за <math>q(I)</math> количество различных размеров в наборе <math>I</math>. Количество нетривиальных ограничений в LP равно <math>q(I)</math>, что означает, что существует базовое оптимальное решение этой линейной программы, в котором только <math>q(I)</math> переменных заданы нецелыми. Кармаркар и Карп используют это наблюдение весьма нетривиальным способом. Следующая лемма описывает их основную идею.




'''Лемма 3'''. Для любого заданного экземпляра J предположим, что существует алгоритмическая процедура округления для получения другого экземпляра J', такого, что в J' имеется Size(J)/2 различных размеров элементов, и J и J' связаны в следующем смысле: любая дробно-линейная упаковка J с использованием <math>\ell</math> контейнеров позволяет получить дробно-линейную упаковку J' с не более чем <math>\ell</math> контейнерами, а любая упаковка J' с использованием <math>\ell'</math> контейнеров позволяет получить упаковку J с использованием <math>\ell + c</math> контейнеров, где c – некоторый фиксированный параметр. Затем J может быть упакована с использованием OPT(J) + c <math>\cdot</math> log(OPT(J)) контейнеров.
'''Лемма 3'''. Для любого заданного экземпляра J предположим, что существует алгоритмическая процедура округления для получения другого экземпляра J', такого, что в J' имеется Size(J)/2 различных размеров элементов, и J и J' связаны в следующем смысле: любая дробно-линейная упаковка J с использованием <math>\ell</math> контейнеров позволяет получить дробно-линейную упаковку J' с не более чем <math>\ell'</math> контейнерами, а любая упаковка J' с использованием <math>\ell'</math> контейнеров позволяет получить упаковку J с использованием <math>\ell' + c</math> контейнеров, где <math>c</math> – некоторый фиксированный параметр. Затем J может быть упакована с использованием OPT(J) + c <math>\cdot</math> log(OPT(J)) контейнеров.




Строка 53: Строка 53:




Остается описать процедуру округления. Рассмотрим элементы в неубывающем порядке <math>s_1 \ge s_2 \ge ... \ge s_n</math> и сгруппируем их следующим образом. Добавляем элементы в текущую группу до тех пор, пока ее размер впервые не превысит 2. В этот момент закрываем группу и начинаем новую. Обозначим за <math>G_1, ..., G_k</math> сформированные группы и положим <math>n_i = |G_i|</math>, для удобства задав <math>n_0 = 0</math>. Определим <math>I'</math> как экземпляр, полученный округлением размера <math>n_{i - 1}</math> наибольших элементов в <math>G_i</math> до размера наибольшего элемента в <math>G_i</math> для i = 1, ..., k. Процедура удовлетворяет свойствам леммы 3 при <math>c = O(log \; n_k)</math>. Для доказательства Теоремы 2 достаточно показать, что <math>n_k = O(Size(I))</math>. Это легко сделать, игнорируя все элементы меньше 1/Size(I) и заполняя их только в конце (подобно алгоритму де ла Веги и Люкера).
Остается описать процедуру округления. Рассмотрим элементы в неубывающем порядке <math>s_1 \ge s_2 \ge ... \ge s_n</math> и сгруппируем их следующим образом. Добавляем элементы в текущую группу до тех пор, пока ее размер впервые не превысит 2. В этот момент закрываем группу и начинаем новую. Обозначим за <math>G_1, ..., G_k</math> сформированные группы и положим <math>n_i = |G_i|</math>, для удобства задав <math>n_0 = 0</math>. Определим <math>I'</math> как экземпляр, полученный округлением размера <math>n_{i - 1}</math> наибольших элементов в <math>G_i</math> до размера наибольшего элемента в <math>G_i</math> для i = 1, ..., k. Процедура удовлетворяет свойствам леммы 3 при <math>c = O(log \; n_k)</math>. Для доказательства Теоремы 2 достаточно показать, что <math>n_k = O(Size(I))</math>. Это легко сделать, игнорируя все элементы меньше <math>1/Size(I)</math> и заполняя их только в конце (подобно алгоритму де ла Веги и Люкера).




Строка 59: Строка 59:




'''Следствие 1'''. Если все размеры элементов не меньше <math>\delta</math>, то легко видеть, что <math>c = O(log \; 1 / \delta)</math>, и приведенный выше алгоритм гарантирует <math>OPT+ O(log(1  / \delta) \cdot log \; OPT)</math>, что соответствует <math>OPT+ O(log \; OPT)</math>, если <math>\delta</math> – константа.
'''Следствие 1'''. Если все размеры элементов не меньше <math>\delta</math>, то легко заметить, что <math>c = O(log \; 1 / \delta)</math>, и приведенный выше алгоритм имеет гарантию <math>OPT+ O(log(1  / \delta) \cdot log \; OPT)</math>, что соответствует <math>OPT+ O(log \; OPT)</math>, если <math>\delta</math> – константа.


== Применение ==
== Применение ==
Строка 66: Строка 66:


== Открытые вопросы ==
== Открытые вопросы ==
Помимо NP-трудности, другие показатели трудности не известны; возможно, что для данной задачи существует алгоритм с полиномиальным временем выполнения и гарантией OPT + 1. Решение этой задачи является ключевым открытым вопросом. Перспективным представляется подход с использованием упомянутой выше конфигурационной LP. На самом деле, не известно ни одного экземпляра задачи, для которого аддитивный разрыв между оптимальным решением конфигурационной ЛП и оптимальным целочисленным решением был бы больше 1. Было бы очень интересно спроектировать экземпляр, для которого аддитивный разрыв целостности был бы равен двум или более.
Помимо NP-трудности, другие показатели трудности не известны; возможно, что для данной задачи существует алгоритм с полиномиальным временем выполнения и гарантией OPT + 1. Решение этой задачи является ключевым открытым вопросом. Перспективным представляется подход с использованием упомянутой выше конфигурационной LP. На самом деле, не известно ни одного экземпляра задачи, для которого аддитивный разрыв между оптимальным решением конфигурационной линейной программы и оптимальным целочисленным решением был бы больше 1. Было бы любопытно спроектировать экземпляр, для которого аддитивный разрыв целостности был бы равен двум или более.




4430

правок