Алгоритмы упаковки бинов Кармаркара – Карпа
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Кармаркара -Карпа ( KK ) Алгоритмы упаковки контейнеров представляют собой несколько связанных аппроксимационных алгоритмов для задачи упаковки контейнеров . [ 1 ] Задача упаковки контейнеров — это задача упаковки предметов разного размера в контейнеры одинаковой вместимости так, чтобы общее количество контейнеров было как можно меньшим. Найти оптимальное решение вычислительно сложно . Кармаркар и Карп разработали алгоритм, который работает за полиномиальное время и находит решение не более чем за бункеров, где OPT — количество бункеров в оптимальном решении. Они также разработали несколько других алгоритмов с немного другими гарантиями аппроксимации и ограничениями времени выполнения.
Алгоритмы КК считались прорывом в изучении упаковки бинов: известные ранее алгоритмы находили мультипликативную аппроксимацию, где число бинов не превышало для некоторых констант , или самое большее . [ 2 ] Алгоритмы КК были первыми, кто достиг аддитивной аппроксимации.
Вход
[ редактировать ]Исходными данными для задачи упаковки мусора является набор предметов разного размера a 1 ,... a n . Используются следующие обозначения:
- n - количество предметов.
- м – количество предметов разного размера. Для каждого i в 1,..., m :
- s i – i -й размер;
- n i — количество элементов размера s i .
- B – размер бункера.
Учитывая экземпляр I , мы обозначаем:
- оптимальное решение экземпляра I. OPT(I) =
- FOPT( I ) = ( a 1 +...+ a n )/ B = теоретически оптимальное количество ячеек, когда все ячейки полностью заполнены предметами или фракциями предметов.
Очевидно, FOPT( I ) ≤ OPT(I).
Схема высокого уровня
[ редактировать ]Алгоритмы КК по существу решают конфигурационную линейную программу :
.
Здесь A — матрица из m строк. Каждый столбец A представляет возможную конфигурацию — мультимножество размеров элементов, такое, что сумма всех этих размеров не превышает B . Набор конфигураций C. — x — вектор размера C. Каждый элемент x c из x представляет количество раз, когда конфигурация c используется .
- Пример : [ 3 ] предположим, что размеры элементов равны 3,3,3,3,3,4,4,4,4,4 и B =12. Тогда существует C =10 возможных конфигураций: 3333; 333; 33, 334; 3, 34, 344; 4, 44, 444. Матрица A имеет две строки: [4,3,2,2,1,1,1,0,0,0] для s=3 и [0,0,0,1,0, 1,2,1,2,3] для s=4. Вектор n равен [5,5], поскольку имеется по 5 элементов каждого размера. Возможным оптимальным решением является x =[1,0,0,0,0,0,1,0,0,1], что соответствует использованию трех бункеров с конфигурациями 3333, 344, 444.
В решении этой проблемы есть две основные трудности. Во-первых, это целочисленная линейная программа , которую сложно решить вычислительно. Во-вторых, количество переменных равно C — количеству конфигураций, которое может быть огромным. Алгоритмы КК справляются с этими трудностями, используя несколько методов, некоторые из которых уже были предложены Де-ла-Вегой и Люкером. [ 2 ] Вот высокоуровневое описание алгоритма (где это исходный экземпляр):
- 1-а. Позволять быть экземпляром, созданным из удаляя мелкие предметы.
- 2-а. Позволять быть экземпляром, созданным из путем группировки элементов и округления размера элементов в каждой группе до максимального значения в группе.
- 3-а. Постройте конфигурационную линейную программу для , без ограничений целочисленности.
- 4. Вычислите (дробное) решение x для расслабленной линейной программы.
- 3-б. Округляем x до интегрального решения для .
- 3-а. Постройте конфигурационную линейную программу для , без ограничений целочисленности.
- 2-б. «Разгруппируйте» элементы, чтобы получить решение для .
- 2-а. Позволять быть экземпляром, созданным из путем группировки элементов и округления размера элементов в каждой группе до максимального значения в группе.
- 1-б. Добавьте мелкие предметы, чтобы получить решение .
Ниже мы по очереди опишем каждый из этих шагов.
Шаг 1. Удаление и добавление мелких предметов
[ редактировать ]Мотивация удаления мелких предметов заключается в том, что, когда все предметы большие, количество предметов в каждой корзине должно быть небольшим, поэтому количество возможных конфигураций (относительно) невелико. Мы выбираем некоторую константу и удалить из исходного экземпляра все предметы меньше . Позволять быть результирующим экземпляром. Обратите внимание, что в , каждый контейнер может содержать не более предметы. Мы упаковываем и получить упаковку с некоторыми контейнеры.
Теперь добавляем мелкие предметы в существующие корзины в произвольном порядке, пока есть место. Когда в существующих контейнерах больше нет места, мы открываем новый контейнер (как при упаковке следующего контейнера ). Позволять — количество контейнеров в окончательной упаковке. Затем:
.
Доказательство . Если новые ячейки не открываются, то количество ячеек остается . Если открывается новый контейнер, то все контейнеры, за исключением, возможно, последнего, содержат общий размер не менее , поэтому общий размер экземпляра не менее . Поэтому, , поэтому оптимальное решение требует как минимум контейнеры. Так . В частности, взяв g =1/ n , получим:
,
с . Поэтому принято предполагать, что все элементы больше 1/ n . [ 4 ]
Шаг 2. Группировка и разгруппировка элементов
[ редактировать ]Мотивацией группировки элементов является уменьшение количества элементов разных размеров, уменьшение количества ограничений в конфигурации LP. Общий процесс группировки таков:
- Упорядочивайте товары по убыванию размера.
- Разделите предметы на группы.
- Для каждой группы измените размер всех элементов в группе до максимального размера в группе.
Существует несколько различных методов группировки.
Линейная группировка
[ редактировать ]Позволять быть целочисленным параметром. Поставь самый большой предметы группы 1; следующий по величине предметы группы 2; и так далее (в последней группе может быть меньше предметы). Позволять быть исходным экземпляром. Позволять быть первой группой (группой самые большие предметы) и сгруппированный экземпляр без первой группы. Затем:
- В все предметы имеют одинаковый размер. В количество разных размеров .
- - с 1 группы в доминирует во 2 группе (все k предметов в группе 1 больше, чем k предметов в группе 2); аналогично, группа 2 в доминирует в группе 3 в , и т. д.
- - так как есть возможность упаковать каждый предмет в в одну корзину.
Поэтому, . Действительно, при наличии решения с контейнеры, мы можем найти решение с максимум контейнеры.
Геометрическая группировка
[ редактировать ]Позволять быть целочисленным параметром. Геометрическая группировка происходит в два этапа:
- Разделить экземпляр в несколько экземпляров такой, что в каждом случае , все размеры находятся в интервале . Обратите внимание: если все элементы в иметь размер хотя бы , то число экземпляров не более .
- В каждом экземпляре , выполнить линейное округление с параметром . Позволять быть результирующими экземплярами. Позволять и .
Тогда количество различных размеров ограничено следующим образом:
- Для всех р , и . Поскольку все предметы в больше, чем , у нас есть , так . Суммирование по всем r дает .
Количество бункеров ограничено следующим образом:
- Для всех р , - с имеет предметы, и все они меньше, чем , поэтому их можно упаковать не более чем в контейнеры.
- Поэтому, .
- Поэтому, .
Альтернативная геометрическая группировка
[ редактировать ]Позволять быть целочисленным параметром. Упорядочивайте товары по убыванию размера. Разбейте их на группы так, чтобы общий размер каждой группы был не менее . Поскольку размер каждого элемента меньше B , количество элементов в каждой группе не менее . Количество предметов в каждой группе слабо возрастает. Если все элементы больше , то количество предметов в каждой группе не более . В каждой группе округляются только более крупные элементы. Это можно сделать так, чтобы:
- .
- .
Шаг 3. Построение ЛП и округление решения
[ редактировать ]Рассмотрим конфигурационную линейную программу без ограничений целочисленности:
.
Здесь нам разрешено использовать дробное число каждой конфигурации.
- Пример : предположим, что имеется 31 элемент размера 3 и 7 элементов размера 4, а размер ячейки равен 10. Конфигурации: 4, 44, 34, 334, 3, 33, 333. Ограничения: [0,0 ,1,2,1,2,3]* x =31 и [1,2,1,1,0,0,0]* x =7. Оптимальным решением дробного LP является [0,0,0,7,0,0,17/3]. То есть: имеется 7 бункеров конфигурации 334 и 17/3 бункеров конфигурации 333. Обратите внимание, что только две разные конфигурации необходимы.
Обозначим оптимальное решение линейной программы через LOPT. Следующие отношения очевидны:
- FOPT(I) ≤ LOPT(I), поскольку FOPT(I) — это (возможно, дробное) количество ячеек, когда все ячейки полностью заполнены предметами или частями предметов. Очевидно, что ни одно решение не может быть более эффективным.
- LOPT(I) ≤ OPT(I), поскольку LOPT(I) — решение задачи минимизации с меньшим количеством ограничений.
- OPT(I) < 2*FOPT(I), поскольку в любой упаковке с минимум 2*FOPT(I) контейнерами сумма двух наименее полных контейнеров не превышает B , поэтому их можно объединить в один контейнер. .
Решение дробной ЛП можно округлить до целого решения следующим образом.
Предположим, у нас есть решение x дробной ЛП. Округляем x до решения интегральной ILP следующим образом.
- Пусть x — оптимальное базовое допустимое решение дробной ЛП. Предположим, это как контейнеры (обратите внимание, что может быть дробным числом). Поскольку дробный ЛП имеет m ограничений (по одному для каждого отдельного размера), x имеет не более m ненулевых переменных, то есть не более m используется различных конфигураций. Построим по x целостную упаковку, состоящую из главной и остаточной частей .
- Основная часть содержит напольные ( ) для контейнеры каждой конфигурации c, которой xc xc > 0.
- Для остаточной части (обозначенной R ) построим две упаковки-кандидата:
- Один бункер каждой конфигурации c, для которого x c > 0; всего m контейнеров. нужно
- Жадная упаковка с количеством ячеек менее 2*FOPT( R ) (так как при наличии хотя бы 2 ячеек *FOPT( R ) два самых маленьких можно объединить).
- Для наименьшей из этих упаковок требуется min( m , 2*FOPT( R )) ≤ среднее ( m , 2*FOPT( R )) = FOPT(R) + m /2.
- Прибавив к этому округленные ячейки основной части, получим не более контейнеры. [ нужны разъяснения ]
- Время выполнения этого алгоритма преобразования составляет O( n log n ).
Это также подразумевает, что .
Шаг 4. Решение дробной ЛП
[ редактировать ]Основная проблема при решении дробной ЛП состоит в том, что она может иметь огромное количество переменных – по переменной для каждой возможной конфигурации.
Двойной LP
[ редактировать ]Двойная линейная программа дробного ЛП представляет собой:
.
Он имеет m переменных и ограничения C — ограничение для каждой конфигурации. Оно имеет следующую экономическую интерпретацию. Для каждого размера s мы должны определить неотрицательную цену. . Наша прибыль — это общая стоимость всех товаров. Мы хотим максимизировать прибыль n y при условии, что общая цена товаров в каждой конфигурации не превышает 1. Теперь эта ЛП имеет только m переменных, но огромное количество ограничений. Даже перечислить все ограничения невозможно.
К счастью, можно решить задачу с любой заданной точностью, не перечисляя всех ограничений, используя вариант метода эллипсоида . Этот вариант получает в качестве входных данных оракул разделения : функцию, которая для вектора y ≥ 0 возвращает один из следующих двух вариантов:
- Утвердите, что y выполнимо, т.е. ; или -
- Утвердите, что y недопустимо, и верните конкретное ограничение, которое нарушено, то есть вектор a такой, что .
Метод эллипсоида начинается с большого эллипсоида, который содержит всю допустимую область. . На каждом шаге t он занимает центр текущего эллипсоида и отправляет его оракулу разделения:
- Если оракул говорит это осуществима, то делаем «оптимальный разрез»: вырезаем из эллипсоида все точки y , для которых . Эти точки определенно не являются оптимальными.
- Если оракул говорит это недопустимо и нарушает ограничение a , то мы делаем «разрез осуществимости»: вырезаем из эллипсоида все точки y , для которых . Эти пункты определенно невыполнимы.
Сделав разрез, строим новый эллипсоид меньшего размера. Можно показать, что этот процесс сходится к приближенному решению, полиномиальному по времени требуемой точности.
Оракул разделения для двойного LP
[ редактировать ]Нам даны некоторые m неотрицательных чисел . Нам предстоит сделать выбор между следующими двумя вариантами:
- Для каждой допустимой конфигурации сумма соответствующее этой конфигурации не более 1; это означает, что y осуществимо.
- Существует допустимая конфигурация, для которой сумма больше 1; это означает, что y неосуществимо. В этом случае нам также придется вернуть конфигурацию.
Эту задачу можно решить, решив задачу о рюкзаке , где значения предметов равны , вес элемента равен , а грузоподъемность равна B (размер контейнера).
- Если общее значение оптимального ранцевого решения не превосходит 1, то мы говорим, что y осуществимо.
- Если общее значение оптимального ранцевого решения больше 1, то мы говорим, что y недопустимо, а элементы оптимального ранцевого решения соответствуют конфигурации, которая нарушает ограничение (поскольку для вектора a, соответствующего этой конфигурации).
Задачу о рюкзаке можно решить с помощью динамического программирования за псевдополиномиальное время: , где m — количество входов, а V — количество различных возможных значений. Чтобы получить алгоритм с полиномиальным временем, мы можем приближенно решить задачу о рюкзаке, используя округление входных данных. Предположим, нам нужно решение с толерантностью. . Мы можем округлить каждый из до ближайшего кратного / н . Тогда количество возможных значений от 0 до 1 равно n / , а время выполнения . Решение — это как минимум оптимальное решение минус / н .
Эллипсоидный метод с приближенным оракулом разделения
[ редактировать ]Метод эллипсоида следует адаптировать для использования приблизительного оракула разделения. Учитывая текущий центр эллипсоида :
- Если приблизительный оракул возвращает решение со значением больше 1, то определенно неосуществимо, и решение соответствует конфигурации, которая нарушает ограничение a . Мы проводим «обработку технико-экономического обоснования» в , разрезая эллипсоид все точки y, для которых .
- Если приблизительный оракул возвращает решение со значением не более 1, то может быть осуществимо, а может и нет, но округлено в меньшую сторону (обозначим его через ) возможно. По определению округления мы знаем, что . Мы все еще делаем «оптимальный разрез» в : вырезаем из эллипсоида все точки y, для которых . Обратите внимание, что может быть невозможным, поэтому его значение может быть больше, чем OPT. Поэтому мы могли бы удалить некоторые точки, цель которых оптимальна. Однако удаленные точки удовлетворяют [ нужны разъяснения ] ; ни одна точка не удаляется, если ее значение превышает значение в более чем .
Использование оракула приближенного разделения дает допустимое решение y* двойственной ЛП с , максимум через итерации, где . Общее время работы метода эллипсоида с приблизительным оракулом разделения равно .
Устранение ограничений
[ редактировать ]В методе эллипсоида мы используем не более Q ограничений вида . Все остальные ограничения можно устранить, поскольку они не влияют на результат y* метода эллипсоидов. Мы можем устранить еще больше ограничений. Известно, что в любой ЛП с m переменными существует набор из m ограничений, достаточный для определения оптимального решения (т. е. оптимальное значение одно и то же, даже если только эти m используются ограничений). Мы можем повторно запускать метод эллипсоида, как указано выше, каждый раз пытаясь удалить определенный набор ограничений. Если результирующая ошибка не превышает , то мы навсегда удалим эти ограничения. Можно показать, что нам нужно не более исключений, поэтому накапливаемая ошибка не превышает . Если мы попробуем наборы ограничений детерминированно, то в худшем случае одно из m испытаний окажется успешным, поэтому нам нужно запустить не более чем метод эллипсоида. раз. Если мы выберем ограничения для удаления случайным образом, то ожидаемое количество итераций будет равно .
Наконец, мы имеем сокращенную двойственную ЛП, содержащую только m переменных и m ограничений. Оптимальное значение приведенного ЛП составляет не менее , где .
Решение первичной ЛП
[ редактировать ]По теореме двойственности ЛП минимальное значение первичного ЛП равно максимальному значению двойственного ЛП, которое мы обозначили LOPT. Получив уменьшенную двойственную ЛП, мы берем ее двойственную и берем уменьшенную первичную ЛП. Этот LP имеет только m переменных, что соответствует только m из C. конфигураций Максимальное значение приведенного двойного ЛП составляет не менее . Это можно показать [ нужны разъяснения ] что оптимальное решение приведенной первичной ЛП не более . Решение обеспечивает почти оптимальную упаковку контейнеров с использованием не более m конфигураций.
Общее время выполнения детерминированного алгоритма, когда все элементы превышают , является:
,
Ожидаемое общее время работы рандомизированного алгоритма составляет: .
Сквозные алгоритмы
[ редактировать ]Кармаркар и Карп представили три алгоритма, которые используют описанные выше методы с разными параметрами. Время выполнения всех этих алгоритмов зависит от функции , которая представляет собой полиномиальную функцию, описывающую время, необходимое для решения дробной задачи ЛП с допуском h = 1, то есть для детерминированной версии: .
Алгоритм 1
[ редактировать ]Позволять быть константой, представляющей желаемую точность аппроксимации.
- 1-а. Набор . Позволять быть экземпляром, созданным из удалив все элементы размером меньше g .
- 2-а. Набор . Позволять быть экземпляром, созданным из линейной группировкой с параметром k и пусть быть оставшимся экземпляром (группой из k крупнейших элементов). Обратите внимание, что .
- 3-а. Постройте конфигурационную линейную программу для , без ограничений целочисленности.
- 4. Вычислите решение x для , с допуском h =1. В результате получается дробная упаковка контейнеров с контейнеры. Время выполнения .
- 3-б. Округляем x до интегрального решения для . Добавить максимум бункеры для дробной части. Общее количество бункеров .
- 3-а. Постройте конфигурационную линейную программу для , без ограничений целочисленности.
- 2-б. Упакуйте вещи в использование не более k ячеек; получить упаковку . Количество бункеров .
- 2-а. Набор . Позволять быть экземпляром, созданным из линейной группировкой с параметром k и пусть быть оставшимся экземпляром (группой из k крупнейших элементов). Обратите внимание, что .
- 1-б. Сложите элементы меньше g, чтобы получить решение задачи . Количество бункеров: .
В общем, количество бункеров указано в и время выполнения находится в . Выбрав мы получаем .
Алгоритм 2
[ редактировать ]Позволять быть действительным параметром и целочисленный параметр, который будет определен позже.
- 1-а. Позволять быть экземпляром, созданным из удалив все элементы размером меньше g .
- 2. Пока делать:
- 2-а. Выполните альтернативную геометрическую группировку с параметром k . Позволять будет результирующим экземпляром, и пусть быть оставшимся экземпляром. У нас есть .
- 3-а. Постройте конфигурационную линейную программу для , без ограничений целочисленности.
- 4. Вычислите решение x для , с допуском h =1. В результате получается дробная упаковка контейнеров с контейнеры. Время выполнения .
- 3-б. Округляем x до интегрального решения для . Не добавляйте интервалы для дробной части. Вместо этого просто извлеките упакованные предметы из .
- 3-а. Постройте конфигурационную линейную программу для , без ограничений целочисленности.
- 2-б. Упакуйте вещи в максимум в контейнеры.
- 2-а. Выполните альтернативную геометрическую группировку с параметром k . Позволять будет результирующим экземпляром, и пусть быть оставшимся экземпляром. У нас есть .
- 2. Один раз , жадно упакуйте оставшиеся предметы максимум в контейнеры.
- На каждой итерации цикла на шаге 2 дробная часть x имеет не более m ( K ) шаблонов, поэтому . FOPT уменьшается в k раз на каждой итерации, поэтому количество итераций не превышает .
- Таким образом, общее количество бункеров, используемых для является: .
- 1-б. Сложите элементы меньше g, чтобы получить решение задачи . Количество бункеров: .
Время выполнения находится в .
Теперь, если мы выберем k =2 и g =1/FOPT(I), мы получим:
,
и следовательно:
,
поэтому общее количество ячеек находится в . Время выполнения .
Один и тот же алгоритм можно использовать с разными параметрами для достижения компромисса между временем выполнения и точностью. По какому-то параметру , выбирать и . Тогда упаковка требует максимум bins, а время выполнения находится в .
Алгоритм 3
[ редактировать ]Третий алгоритм полезен, когда количество размеров m невелико (см. также упаковку контейнеров с высокой кратностью ).
- 1-а. Набор . Позволять быть экземпляром, созданным из удалив все элементы размером меньше g .
- Если затем:
- 3-а. Постройте конфигурационную линейную программу для , без ограничений целочисленности.
- 4. Вычислите решение x для , с допуском h =1. В результате получается дробная упаковка контейнеров с контейнеры. Время выполнения .
- 3-б. Округляем x до интегрального решения для . Не добавляйте интервалы для дробной части. Вместо этого просто извлеките упакованные предметы из .
- 3-а. Постройте конфигурационную линейную программу для , без ограничений целочисленности.
- Запустите шаг 2 алгоритма 2 на оставшихся частях.
- 1-б. Сложите элементы меньше g, чтобы получить решение задачи . Количество бункеров: .
Он использует максимум bins, а время выполнения находится в .
Улучшения
[ редактировать ]Позднее методы КК были усовершенствованы, чтобы обеспечить еще лучшее приближение.
Ротвосс [ 4 ] использует ту же схему, что и алгоритм 2, но с другой процедурой округления на этапе 2. Он ввел этап «склеивания», на котором мелкие элементы склеиваются вместе, чтобы получить один более крупный элемент. С помощью этой склейки можно увеличить размер самого маленького предмета примерно до . Когда все размеры не менее , мы можем заменить в гарантии Алгоритма 2 и получим:
,
что дает контейнеры.
Хоберг и Ротвосс [ 5 ] используйте аналогичную схему, при которой предметы сначала упаковываются в «контейнеры», а затем контейнеры упаковываются в контейнеры. Их алгоритм требует максимум контейнеры.
Ссылки
[ редактировать ]- ^ Кармаркар, Нарендра; Карп, Ричард М. (ноябрь 1982 г.). «Эффективная аппроксимационная схема одномерной задачи упаковки контейнеров» . 23-й ежегодный симпозиум по основам информатики (SFCS 1982) : 312–320. дои : 10.1109/SFCS.1982.61 . S2CID 18583908 .
- ^ Перейти обратно: а б Фернандес де ла Вега, В.; Люкер, Г.С. (1981). «Упаковку контейнеров можно решить за 1 + ε за линейное время». Комбинаторика . 1 (4): 349–355. дои : 10.1007/BF02579456 . ISSN 1439-6912 . S2CID 10519631 .
- ^ Клэр Матье. «Алгоритмы аппроксимации. Часть I, неделя 3: упаковка контейнеров» . Курсера .
- ^ Перейти обратно: а б Ротвосс, Т. (1 октября 2013 г.). «Аппроксимация упаковки ячеек в ячейки O(log OPT · Log Log OPT)» . 54-й ежегодный симпозиум IEEE по основам информатики , 2013 г. стр. 20–29. arXiv : 1301.4010 . дои : 10.1109/FOCS.2013.11 . ISBN 978-0-7695-5135-7 . S2CID 15905063 .
- ^ Хоберг, Ребекка; Ротвосс, Томас (01 января 2017 г.), «Логарифмический аддитивный разрыв целостности для упаковки контейнеров», Труды ежегодного симпозиума ACM-SIAM 2017 г. по дискретным алгоритмам , Труды Общества промышленной и прикладной математики, стр. 2616–2625, arXiv : 1503.08796 , doi : 10.1137/1.9781611974782.172 , ISBN 978-1-61197-478-2 , S2CID 1647463