Уфа: УГАТУ, 2008
Вестник уГАТу • Управление, ВТ и И T.10 №2(27). C. i54-i58
МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ, ЧИСЛЕННЫЕ МЕТОДЫ И КОМПЛЕКСЫ ПРОГРАММ
УДК 004.421
В. М. КАРТАК
ОБНОВЛЕННАЯ НИЖНЯЯ ГРАНИЦА ДЛЯ ЗАДАЧИ УПАКОВКИ ПРЯМОУГОЛЬНИКОВ В ПОЛУБЕСКОНЕЧНУЮ ПОЛОСУ
Рассматривается задача упаковки прямоугольников в полубесконечную полосу (two-dimensional strip packing problem, 2DSPP), которая имеет широкое применение в промышленности. Она является NP-трудной. Рассматриваются алгоритмы расчета нижней границы, базирующиеся на ее матричном представлении и линейном программировании. Метод ветвей и границ; раскрой-упаковка;
нижняя граница
Задача упаковки прямоугольников в полубесконечную полосу (или двумерная задача раскроя-упаковки, two-dimensional strip packing problem, 2DSPP), состоит в следующем: требуется разместить заданные прямоугольники в полубесконечной полосе так, чтобы длина занятой части полосы достигла минимума. Согласно Dyckhoffs типологии раскроя и упаковки [1,], двумерная задача раскроя-упаковки имеет тип 2/N/O.
Эта задача является NP-трудной, поэтому алгоритмы, нацеленные на получение оптимального решения, представляют собой различные модификации метода ветвей и границ [2].
Нижней границей решения данной задачи называется число, величина которого не превосходит длины полосы оптимальной упаковки [3]. Наличие хороших нижних границ очень важно для сокращения перебора в точных методах, а также для оценки приближенных решений.
Самой простой нижней границей мы можем считать отношение суммарной площади всех прямоугольников к ширине полосы.
Другие способы подсчета нижней границы представлены в работе Martello и Toth [3]. Они показали, что в случаях, когда число малых элементов мало, имеет смысл сконцентрировать внимание на больших элементах.
S. P. Feket иJ. Schepers [4] предложили использовать двойственно выполнимые функции для вычисления нижней границы. Идея этого подхода заключается в следующем: пусть R = {//,. / = 1 ,т] — набор прямоугольников некоторой задачи 2DSPP, а F — двойственно выполнимая функция, тогда любая нижняя граница для преобразованной за-
дачи 2Э8РР с размерами элементов -Р(Д) = = = 1,т} также является нижней
границей для исходной задачи.
Представленные нижние границы относятся к классу элементарных нижних границ и вычисляются за время 0(тк^(т)), но при этом разность между полученным значением и оптимальным может быть существенная.
А. Bortfeld предложил использовать линейное программирование для получения нижней границы [5]. Для этого задача 2DSPP сопоставляется с задачей линейного раскроя с дополнительными ограничениями.
В данной статье предложен улучшенный подход к определению нижней границы, базирующийся на ее матричном представлении и дальнейшем использовании методов линейного программирования для оценки оптимального решения.
1. ПОСТАНОВКА ЗАДАЧИ
Имеется полубесконечная полоса $ фиксированной ширины IV и множество прямоугольников Л = { Н;. / = 1 ,т}, имеющих размеры (^,г^), где ^ — длина, — ширина *-го прямоугольника, т — количество прямоугольников. Обозначим исходные данные как (1¥,т, К). Требуется разместить прямоугольники в полосе так, чтобы длина занятой части полосы достигла минимума.
Допустимой упаковкой прямоугольников в полубесконечную полосу называется размещение прямоугольников внутри полосы 5, удовлетворяющее следующим условиям: стороны прямоугольников из параллельны сторонам полосы 5;
прямоугольники из между собой не перекрываются (не имеют общих внутренних точек).
Введем прямоугольную систему координат, в которой оси , совпадают с нижней и левой сторонами полосы, и обозначим допустимую упаковку через ,
где — координаты левого нижне-
го угла г-го прямоугольника. Допустимая упаковка , для которой длина занятой части полосы достигает минимума, называется оптимальной.
2. МАТРИЧНОЕ ПРЕДСТАВЛЕНИЕ УПАКОВКИ
Пусть для некоторой задачи из-
вестна упаковка Р. Выполним мысленно вертикальные «резы», проходящие через правые стороны прямоугольников Л [6]. Таким образом, вся упаковка делится на вертикальные полосы. Обозначим кх — число вертикальных полос. Аналогично выполним мысленно горизонтальные резы, проходящие через верхние стороны прямоугольников, — число горизонтальных полос.
Вертикальному разбиению упаковки на полосы сопоставим следующую пару ,
где: —матрица размерности , элемен-
ты которой вычисляются по правилу:
{1 — если *-й прямоугольник пересекается -й вертикальной полосой, в противном случае;
— вектор, элементами которого являются значения длин вертикальных полос.
Очевидно, что «единицы» в строках матрицы идут непрерывно. Это свойство еще называется «продолженностью единиц» [5].
Аналогично горизонтальному разбиению сопоставим матрицу размерности
и вектор ^ •• • ) гку).
Полученные указанным способом матрицы Ах и Ау названы матрицами упаковки, а векторы игу — векторами упаковки.
Связь между упаковкой Р и матрицами упаковок определяют следующие утверждения.
Утверждение 1. (Критерий существования допустимой упаковки) Для того чтобы существовала допустимая прямоугольная упаковка, длина которой не превышала быЬ, необходимо и достаточно, чтобы выполнялись следующие условия:
• существуют допустимые (Ax,zx) и (АУ, ^),где Й zf < L и X) 4 < W;
г=1 г=1
• если в некотором столбце ко матрицы Ах
имеются строки ii и г2 такие, что axiko = 1 и af2k0 = -*-, то для любого столбца 1 < к < ку матрицы верно (т. е. и
одновременно не могут быть равны 1).
Утверждение 2. Для нахождения оптимальной упаковки достаточно найти допустимые пары (Ax,zx) и (Ay,zy) такие, что
кх
.
г=1
3. НИЖНЯЯ ГРАНИЦА НА БАЗЕ ЛИНЕЙНОГО РАСКРОЯ
Последнее утверждение можно интерпретировать следующим образом: в задаче 2DSPP в качестве нижней границы можно
кх
использовать оценку величины min ^ zf, на
г=1
значение которой влияет только пара .
(Пара необходима для проверки до-
пустимости построенной упаковки). Подсчитаем нижнюю границу, используя аналогию между задачей построения пары (Ах, zx) и задачей линейного раскроя.
Задача линейного раскроя (Cutting Stock Problem, 1DCSP). Имеется материал, поступающий в виде стержней длины . Путем его раскроя требуется получить набор из т различных предметов заданных длин A,;, i = 1, т и в необходимом количестве bj каждого вида i = 1, т. Требуется раскроить материал на линейные предметы (заготовки) с минимальными затратами материала [8].
Добавим в задачу 1DCSР дополнительное условие: потребуем, чтобы раскрой стержня содержал только одну заготовку одного типа. Обозначим новую задачу (Binary Cutting Stock Problem, 1DBCS) как E = (H, m,X,b); A = ;.
Пусть вектор e Z + m, где aij € {0,1} описывает j-ю карту раскроя (способ раскроя стержня): его компонента , если заготовка типа получается из данного стержня, и в про-
тивном случае. Матрица .4 = {(щ), г = 1 ,т\ j = l,N называется раскройной матрицей, здесь N — число всевозможных карт раскроя. Обозначим через xj, j = 1 ,N интенсивность применения карты раскроя , т. е. число прутков, которые должны быть разделены в соответствии с картой раскроя . Тогда задача
1DBCSР сводится к решению следующей задачи линейного целочисленного программирования:
N
ІЇЕ) = £
J = 1
Ах = 6, х Є Z + N.
= > Xj mm.
(1)
Для получения нижней границы оптимального значения задачи (1) рассмотрим аналогичную задачу линейного программирования, в которой отсутствует условие цело-численности компонент вектора :
N
Z(E) = £ Xj min,
j=i
Ax = b. x e R + N.
(2)
Поскольку число для реальных задач достаточно велико, то задача (2) решается симплекс-методом с неявно заданной матрицей ограничений. При этом максимальное число ненулевых элементов не превосходит заданного числа (размера базисного множества).
Вернемся к задаче 2DSPP. Пусть заданы исходные данные для прямоуголь-
ной упаковки. Если положить Н = W; А,; = = wf, bj = If, i = 1 , m, то задаче построения пары можно сопоставить 1DBCSP с
параметрами EV=(H = W;m; A = w; b = I). Назовем эту задачу, вертикальной задачей линейного раскроя (Vertical Cutting Stock Problem, VCSP). Соответствующая ей задача линейного программирования имеет вид:
N
Z(E") = ^2,xj min,
j=i
Avx = L x e R + N.
(3)
Очевидно, что любое допустимое заполнение матриц (Ах, гх) даст нам допустимое решение соответствующей задачи VCS. Обратное не верно, так как решение VCSP не удовлетворяет свойству 2 («продолженности единиц»). Тем не менее, любая нижняя граница для задачи VCSP будет также являть-
кх
ся нижней границей для , а следова-
г=1
тельно, и для задачи 2DSPP. Таким образом, в качестве нижней границы можно использовать решение (3).
4. УЛУЧШЕННАЯ НИЖНЯЯ ГРАНИЦА
Представленную в предыдущем разделе нижнюю границу можно улучшить. Для этого определим горизонтальную задачу линейного раскроя (Horizontal Cutting Stock Problem, HCSP) для горизонтального разбиения упаковки как соотвествующую задачу 1DBCS с параметрами
; b= ). Соответствующая задача линейного программирования имеет вид:
м
ziEh) = -» min;
j=i
А/гу = w, у Є R + М,
(4)
где — длина занятой полосы, — матрица, состоящая из всех возможных карт раскроя, соответствующих горизонтальному разбиению, — число таких векторов.
Обозначим через текущую нижнюю границу для RP. Очевидно, что если для Ен будет верно , это будет означать,
что исходный набор прямоугольников не может быть упакован в полосу длины и ширины не более . В этом случае первое условие утверждения 1 не выполняется, нужно увеличить.
Так как размеры прямоугольников целочисленные, то и длина занятой части полосы может быть только целым значением, поэтому увеличивать можно на единицу. Базируясь на этом факте можно предложить следующий алгоритм расчета начальной нижней границы.
Алгоритм 1. Расчет начальной нижней границы
Шаг 0. Дано Ш, ги = (м?ь ..., хит), I = = (11,..., 1т) (входная информация для
2DSPP).
Шаг 1. Ьа ^ ^(Е"")] (начальное значение для нижней границы).
Шаг 2. Если г(Ек) > \¥,то Ьа = Ьа +1 переход к Шагу 1. (увеличение нижней границы).
Шаг 3. Стоп, — текущая нижняя грани-
ца.
Алгоритм 1 использует только первое условие из утверждения 1. Для проверки второго условия теоремы введем дополнительное ограничение в задачу (4), которое запрещает использовать в решении карты раскроя, содержащие фиксированную пару элементов
(р, д) (см. также [9]).
N
г^Е") = -> т!!!,
•7=1 (5)
А.„х = I, х е И + N. х-1 = О,
* е {.ИНр = !)&«, = !)} •
Данная задача линейного программирования будет рассматривать только карты раскроя а-7, не содержащие элементы с номерами и . Обозначим за оптимальное ре-
шение задачи (5).
Аналогично определим для сле-
дующей задачи:
м
гіР-я)(ЕІ) = 2^уТ тіп>
і=і
АігУ = го, у Є і? + М, у і = О,
іє {ііКр = 1)&К, = 1)}-
(6)
Утверждение 3. Пусть длянекоторого значения Ь существует пара (р, д), такая, что г^р^{Е',)) > Р и г^р^{Ен) > ЦТ. Тогда не существует упаковки Р, длина занятой части полосыкоторой не превосходит Ь.
Следовательно, если для некоторого значения нижней границы выполняется условие утверждения 3, то не существует упаковки, размещающейся в полосе длины не более Р&, а следовательно, нижнюю границу Р^ нужно увеличивать.
Обозначим за = {(рк-,Як)} множество пар элементов с номерами и д^ Анологич-но (5) и (6) определим :
N
2діЕ") = ^ ХТ тіПі
Арх = I, х є і?
N х-і = О, і Є {/1 {(і'грі. 1) (V' { і) І
(7)
м
2д{Ен) = ^2 у]* тіп;
і=і
А/гу = ги, у Є і? + М у і = 0,
(8)
* є {-Я Кр* = ^(«лЯг7 = 1
Утверждение 4. Пусть для некоторого значения Р выполняется одно из двух условий:
,
где ={( ,
,
где .
Тогда не существует упаковки RP, длина занятой части полосы которой не превосходит .
Базируясь на утверждении 4, можно предложить следующий алгоритм расчета нижней границы.
Алгоритм 2. Расчет улучшенной нижней границы
Шаг 0. Дано Ж, го = («?!,..., гит), / = = (/ь ... , 1т) — входная информация для 2DSPP.QV = 0.
Шаг 1. Р(1 ^ Алгоритм 1 — начальное значение для нижней границы.
Шаг 2. Для каждой пары элементов
(рк,дк), входящих в решение VCSP, выполняем: если , то .
Шаг 3. Если гдг^Е11) > IV, то Ра = Ра + 1,
переход к Шагу 2.
Шаг 4. Для каждой пары элементов
(Рк'.Як), входящих в решение HCSP выполняем: если гм(Ек) > Ь,тодй = С]11 + {рк,дк).
Шаг 5. Если Едн(Еу) > V/, то = Р^ + 1, переход к Шагу 4.
Шаг 6. Стоп, — текущая нижняя грани-
ца.
Замечания:
1) пара (рк-,дк) входит в решение УС8Р (НС8Р), если в оптимальном решении задачи линейного программирования (3) существует карта раскроя , такая, что
.
2) для расчета величины ^ лучше
воспользоваться двойственным симплекс-методом, так как решение задачи без добавочного ограничения уже известно.
3) так как число шагов представленного алгоритма зависит от числа возможных пар
(их число растет как ), то вычислительная сложность будет 0(т2) ■ Р(т), где
— трудоемкость выполнения шага двойственного симплекс-метода, которая для данной задачи псевдополиномиальна.
5. ЧИСЛЕННЫЙ ЭКСПЕРИМЕНТ
Численный эксперимент был проведен следующим образом: точный алгоритм решения задачи 2DSPP [7]. В качестве ниж-