Вестник Сыктывкарского университета. Сер.1. Вып. 6. 2006
У К 519.717
РЕАЛИЗАЦИЯ КОМБИНИРОВАННОГО АЛГОРИТМА РЕШЕНИЯ ЦЕЛОЧИСЛЕННОЙ ЗАДАЧИ ЛИНЕЙНОГО РАСКРОЯ
В.Л. Никитенков, .Ю. Саковнич
Рассматривается комбинированный метод решения целочисленной задачи линейного раскроя. Приводятся результаты тестирования на ОАО "МБП-СЛПК".
1. Введение
Предприятие, выпускающее бумагу и картон различных марок, получает заявки от покупателей на количество тонн бумаги (картона) определенного типа в виде рулонов различных размеров (форматов). Примерная заявка имеет вид:_
п/п Формат (мм) Кол-во (т) Откл, — Откл, +
1 1260 50 10 7
2 1000 100 15 6
3 840 150 4 14
Бумага с бумагоделательной машины (БМ) поступает в виде бумажного полотна в тамбурах длиной 10 (6300/8500 мм), которые в дальнейшем разрезаются на продольно-резательном станке (ПРС) в виде рулонов определенного диаметра и формата.
Рулоны бумаги с наката бумагоделательной машины поступают на продольно-резательный станок. Например, продольно-резательный станок Вяртсиля KL 1000 Hp (установленный на Сыктывкарском ЛПК) имеет обрезную ширину 8400 мм, расчетная скорость 2200 м/мин, намотка безштанговая, количество ножей 12 пар. Продольно-резательный станок имеет трубопроводы и вентиляторы для удаления краевой ленты, сопла и трубопроводы для удаления пыли за пределами станков. Продольно-резательный станок оборудован измерителем метража.
© Никитенков В.Л., Саковнич Д.Ю., 2006.
Гильзы для продольно-резательного станка поступают со вспомогательного блока на гильзорезательный станок, где происходит разрезание их по форматам.
Для упаковки рулонов после продольно-резательного станка предусматривается автоматическая упаковочная линия. Производительность упаковочной линии 90-100 рулонов/час при диаметре рулона в пределах 800-900 мм, весе 300-500 кг и обертывании рулона за три раза оберткой массой 200-250 г/м2, содержащей в среднем слое полиэтилен, с использованием поливинилацетатной эмульсии в качестве клея. Упаковочная линия может обрабатывать рулоны размером: диаметр 800-1200 мм, ширина 420-2100 мм.
Рулоны поступают на транспортер, затем на весы, центрирующее устройство и далее в оберточный станок. Центрирование и обертывание производятся автоматически. Обернутый рулон подается к кром-козагибочному устройству, далее — торцеклеильному прессу, в котором производится приклеивание торцевых кругов с односторонним покрытием полиэтилена к оберточной бумаге с помощью нагревания, а также клейка этикетки.
Упакованные рулоны транспортируются в склад. Бракованные рулоны, перемотка которых нецелесообразна, отправляются на переработку. Нарезание рулонов на ПРС осуществляется по раскладкам (способам раскроя), в которых указывается по сути расположение ножей ПРС по ширине тамбура в соответствии с нарезаемыми форматами по данной раскладке. Однократное нарезание рулонов по раскладке будем называть съемом. Для каждой раскладки указывается количество съемов (интенсивность или кратность использования способа раскроя) необходимое для нарезания определенной части заявки. Суммарное количество рулонов каждого формата, нарезанное по всем раскладкам с учетом их кратностей, должно быть равно требуемому количеству рулонов. При этом необходимо стремиться к тому, чтобы суммарный попутный отход по всем раскладкам был минимальным. На практике заявка не является фиксированной, а имеет некоторый люфт. Отчасти это связано с тем, что заявка подается в тоннах, а выпуск продукции в рулонах, и не всегда возможно точно перевести "тонны" в рулоны. Воспользовавшись люфтом, можно подобрать такой вектор требований, при котором отход будет наименьшим.
Каждый план раскроя содержит в себе несколько различных раскладок, При переходе от одной раскладки к другой тратится много времени на подготовку (установку ножей в нужное место), И если бы удалось уменьшить количество различный раскладок, то было бы существенно
сокращено время простоя ПРС, которое могло быть использовано.
Очевидно, что даже при небольшом количестве рулонов составить оптимальный план нарезания заготовок будет делом довольно трудоемким, не говоря уже о нарезании реального количества, которое измеряется несколькими сотнями заготовок,
2. Постановка основной задачи
Рассмотрим основную задачу схемы — определение раскладок (способов раскроя) по длине тамбура и число съемов, вырезаемых по этим раскладкам (интенсивностей использования способов раскроя) при которых выполняется заявка в рулонах и минимизируется суммарное количество попутных отходов.
Данная задача, по сути дела, есть целочисленная задача линейного раскроя с дополнительными ограничениями!1-6], Перейдем к ее постановке.
Пусть имеется одномерное сырье длины 10 (ширина тамбура), из которого необходимо нарезать заготовки различных типов из множества М (||МУ = т — число элементов в множестве М, в нашей задаче т — число различных форматов в заявке). Длины заготовок задаются вектором 1[М] (форматы в заявке). Требуется, удовлетворив требования на заготовки по каждому типу (по количеству рулонов каждого формата) 1[М], достичь этого, израсходовав минимальное количество штук сырья. Пусть теперь N — множество номеров всех возможных способов раскроя тамбура (множество номеров всех возможных раскладок, включая и нетехнологичные, либо по количеству вырезаемых заготовок, либо с большим отходом), | = п — число всех возможных способов раскроя, Составим из способов раскроя целочисленную неотрицательную матрицу А[М, N], где А[М,]] - способ раскроя с номером Л[г,]] - количество заготовок ¿-го типа, вырезаемых ^'-м способом раскроя (число рулонов ьго формата в ^'-ой раскладке). Неотрицательный вектор способа раскроя А[М,]]. очевидно, удовлетворяет ограничению
1[М] ■ А[М,з] < 1о (1)
так как суммарная длина вырезаемых в способе заготовок не должна превышать длины сырья.
Введем целочисленный неотрицательный вектор неизвестных X N — интенсивности использования способов раскроя, X^] — количество раз применения ^'-го способа раскроя. Ясно, что однократное использование способа раскроя приводит к израсходованию одной штуки сырья длиной 10. Тогда линейная функция f (X) = ] ■ X^] выражает
суммарное количество израсходованных штук сырья на вырезание всех требуемых заготовок, У данной функции мы должны найти минимум при следующих ограничениях
A[M, N] ■ X[N] = b[M] (2)
Таким образом, приходим к следующей линейной целочисленной задаче
f (X) = 1[N] ■ X[N] —> min (3)
A[M, N] ■ X[N] = b[M] (4)
X[N] > 0[N] (5)
X [N ] — целочисленный, (6)
в которой столбцы матрицы A[M, N] удовлетворяют ограничению (1), Если добавить к ограничению (1) еще два (соответствующих максимуму концевого отхода и максимальному количеству вырезаемых в способе раскроя заготовок)
A[M, j]-Z[M] < —p, j £ N, p — максимальный концевой отход.(7) A[M, j]- 1[M] < k — 1, k — максимальное число ножей на ПРС,(8)
то приходим к задаче целочисленного программирования, реализующей нахождение оптимальных раскладок и числа съемов по ним вырезаемых,
3. Целочисленная 3JIP. Два подхода к решению 3.1. Метод ветвей и границ
Реализует метод ветвей и границ в сочетании с дихотомией при решении целочисленной задачи (1)-(7)[3-4], Идея состоит в следующем: пусть m - это общее количество заготовок.
Тогда, очевидно, что все эти заготовки можно разместить на тамбуре длиной m*L, причем так, чтобы ни один рулон не попал на границу тамбура, m — это оценка числа съемов сверху. Количество требуемых съемов можно оценить снизу. Если S-общая длина всех заготовок, то m0 = [S/L] - оценка снизу. Далее действуем следующим образом. Выбираем ml = (m0 + m)/2, "высыпаем" все заготовки на тамбур длины m1*L и, за счет неиспользуемой части, пытаемся переместить заготовки
так, чтобы ни одна заготовка не iiona.ua па границу тамбура длины Ь.
Н-1-1 I-I-1
^---^__
т ,—единиц сырья.
I-*-1
1_ I
Если удается все заготовки разложить таким образом, то уменьшаем т до т1, иначе до т1 увеличиваем т0, Затем повторяем те же действия.
Когда т = т0 процесс останавливается, 3.2. Комбинированный метод
Второй подход заключается в решении линейной задачи раскроя без условия целочиелешюсти посредством модифицированного симплекс-метода с тем изменением, что матрица раскроев А[М, N] не хранится, а необходимый дня ввода в базис столбец (наилучший раскрой г[М] = А[М, ^о]) генерируется из условия г[М] • у[М] —> шах, где у[М] - вектор двойственных переменных (г-задача). При этом, очевидно, если величина е[;0] = г[М] • у[М] — 1 < 0, то текущее решение оптимально, т. к, все остальные оценки будут еще меньше, В противном случае столбец А[М, ^0] вводится в базис. Процедура генерации столбца г[М] носит название задачи о наилучшем раскрое, или г-задачи[6].
После того, как решение линейной задачи раскроя X*[N] найдено, его целевую функцию (суммарное число еъемов) округляют вверх до ближайшего целого
т = [т*] + 1 • X*[N] = т*),
а само решение разделяют на целую и дробную части,
Х*[Щ = [Х*[ЛГ]] + {Х*[ЛГ]} = X + а[Щ
Затем выделяют остаток вектора требований Ь[М] = А[М, N] • а^] — целочисленный и разбивают его на к раскроев, используя первый подход, где к = • а^] + (1 — {т*}).
Можно показать, что решение такой целочисленной задачи существует[7], Применение переборного алгоритма к последней задаче оправдано тем, что кратности элементов вектора Ь[М] - небольшие.
3.3. Решение r-задачи (задачи о наилучшем раскрое).
Будем решать эту задачу методом ветвей и границ с односторонним обходом дерева вариантов. Решение этой задачи таково: нужно выбрать jo Е M. на котором достигается максимум отношения v[j]/l[j], и положить
r[jo] = L/l[jo], r[M - jo] = 0[M - jo], так что оценкой максимума в исходной задаче будет
L ■ v[jo]/l[jo].
Ветвление вариантов следует проводить, выбирая число экземпляров самой выгодной детали (детали с наибольшим отношением v[j]/l[j]) и выбирая, в первую очередь, вариант с наибольшим возможным числом экземпляров, а затем последовательно его уменьшая. Ниже приводится текст процедуры с комментариями bestsol [N]=0[N]; x[N]=0[N]; k=0; Iam=l0; gam=0; rec=0;
{начальные установки} mkest: if k=m then goto mkback else k:=k+l; if l[k]> lam then goto mkest;
{ищем номер детали, которую можно вырезать из остатка lam. Если длины всех деталей больше остатка (k=m), делаем шаг назад (mkback)}
est:=gam+lam*c[k]/l[k];
{вычисляем оценку продолжения = доход + оценка остатка} if est<=rec then goto mkback;
{Если продолжение неперспективно, то делаем шаг назад (mkback)}
x[k]:=entire(lam/l[k]);
lam:=lam-x[k]*l[k];
gam:=gam+x[k]*c[k];
{шаг вперед: Вырезаем из остатка максимальное число деталей с номером к. Уменьшаем остаток на вырезанную длину. Увеличиваем доход на добавившуюся стоимость.} if rec< gam then begin rec:=gam; for l:=l step 1 until m do bestsol[i]:=x[i] end; {Если доход рекордный, делаем его текущим рекордом, а соответствующий способ раскроя записываем в bestsol} goto mkest;
{Если доход меньше рекорда, пытаемся отыскать новый способ раскроя, шагая вперед} mkback: k:=k-l;
{шаг назад: Выбираем номер предыдущей заготовки}
if x[k]>0 then
begin
x[k]:=x[k]-l; lam:=lam+l[k]; gam:=gam-c[k]; goto mkest end;
{Если она вырезалась, то уменьшаем её количество на единицу, остаток увеличиваем на ее длину, а доход уменьшаем не её цену. Далее пытаемся найти продолжение, шагая вперед} else if k>l then goto mkback;
{Если она не вырезалась (x[k]=0), то идем к предыдущей заготовке. Если ни одна заготовка не вырезана - на способе раскроя (0,0,...,0) процедура заканчивает работу с результатом: bestsol[N] - наилучший способ раскроя; гес - рекордно максимальное значение дохода c[N]*bestsol[N]}
№ теста Различных заготовок Всего заготовок Комбинир. метод КОН ренты
время сьемов отход время сьемов отход
1 5 34В 31 31 540 10000 31 540
2 Б 212 20 22 320 17000 22 320
3 6 776 30 83 1560 8000 83 1560
4 7 424 30 65 8874 10000 65 8874
5 7 Б49 75 57 920 45000 57 920
Б 7 G49 Б0 57 1015 5000 57 1015
7 Э 1149 72 216 24810 7000 216 24810
В 26 530 151 106 0 48000 106 0
Описанный алгоритм был опробован на Сыктывкарском ЛПК, где сравнивался с аналогичными продуктами предложенными для внедрения на заводе. Как видно из сравнительной таблицы, результаты полученные различными алгоритмами полностью аналогичны, за исключением времени на их получение, где комбинированный метод значительно превосходит аналоги. Это можно объяснить тем, что скорее всего в аналогичных программах используются методы улучшенного перебора, такие как, например метод ветвей и границ.
4. Раскрой с минимальным числом перенастроек ПРС
При решении задачи форматного раскроя часто в решении участвует большое количество различных способов раскроя. На практике это означает, что помимо установки гильз рулонов между еъемами, также потребуется некоторое время (на старых ПРС довольно большое) на но-
рестановку ножей. Таким образом, если мы минимизируем количество перенастроек ножей, то существенно сократим время простоя ПРС,
4.1. Постановка задачи
При форматном раскрое бумажного полотна, помимо основного критерия — эффективности по материалу (минимизация суммарных отходов), может использоваться и дополнительный критерий оптимальности — минимальное количество различных раскладок в оптимальном решении, что соответствует минимальному числу перенастроек ножей ПРС.
В рамках комбинированного подхода к решению целочисленной задачи раскроя (ModifSimplMeth + BestPart) это означает выбор среди всех оптимальных решений целочисленной задачи раскроя, того решения, которое содержит, минимальное количество раскладок.
4.2. Алгоритм решения задачи
Опишем алгоритм решения задачи о выделении оптимального решения целочисленной задачи раскроя с минимальным числом используемых раскладок (способов раскроя),
1, Решаем целочисленную задачу линейного раскроя (MSM+BP). Решение содержит Pi положительных компонент,
2, С помощью следующих измененной процедуры решения г-задачи:
If abs(gam-l)<eps then begin kk:=KK+l; for l:=l step 1 until m do A[l, kk]:=x[i] end; if rec< gam then begin rec:=gam;
(как только "выручка" gam достигла единицы, способ раскроя за-
<
способы раскроя с нулевой оценкой в матрицу A[M, N0],
3. Удаляем из A[M, No] столбцы A[M, N'] (|No| = P, |M| = m).
4. Перебираем все допустимые базисные решения из A[M, N0], начи-
ная с A[M, N'] (их максимальное количество M0 = Cm), Они будут оптимальными решениями (т.к. f* не изменяется). Для каждого такого решения находим целую часть вектора интенсивностей и применяем BP к вектору остатков требований (Pk — число положительных компонент k-ro решения).
5. Среди всех оптимальных решений целочисленной задачи раскроя выбираем то, для которого число положительных компонент решения равно
P* = min{Pk, k G 1 : M0}.
Литература
1, Канторович Jl.В., Залгаллер В.А. Рациональный раскрой промышленных материалов, М,:Наука, 1971,
2, Грибов A.B., Романовский И.В. Программирование симплекс-метода и его вариантов на АЛГОЛЕ // Оптимальное планирование. 1963. Вып. 12. С. 5-27.
3, Романовский И.В. Наилучшее разбиение множества на заданное число подмножеств // АЛГОЛ-процедуры. Изд. ЛГУ. 1970. Вып. 6.
4, Кацев C.B., Романовский И.В. Две задачи целочисленного программирования // АЛГОЛ-процедуры. Изд. ЛГУ. 1975. Вып. 13.
5, Кацев C.B. Решение одной обогценной задачи о разбиении множеств // Кибернетика. 1977. №5. С. 115-120.
6, Романовский И.В. Алгоритмы решения экстремальных задач, М,: Наука, 1977. 352 с.
7, Никитенков В.Л. О целочисленном решении задачи линейного раскроя // Вестник Сыктывкарск. ун-та. С'ер.1: Мат. Мех. Инф. 2006. Вып. 6. С. 165-179.
8, Касселс ж.В.С. Введение в геометрию чисел. М,: Мир, 1965. 421 с.
9, Брёнстед А. Введение в теорию выпуклых многогранников, М,: Мир, 1988. 240 с.
10, Гильберт ., Кон-Фоссен С. Наглядная геометрия. М,: Наука, 1981. 341 с.
Summary
Nikitenkov V.L.,Sakovnich D.J. Realization of complex algorithm for integer-valued problem of linear cutting
Complex method for solving of integer-valued problem of linear cutting are considered. The results of testing on enterprize are describe.
Сыктывкарский университет
Поступила 1.09.2005