Вестник Сыктывкарского университета. Сер.1. Вып. 6. 2006
УДК 519.717
О ЦЕЛОЧИСЛЕННОМ РЕШЕНИИ ЗАДАЧИ ЛИНЕЙНОГО РАСКРОЯ
В. Л. Никитенков
Доказано, что оптимальное значение целевой функции целочисленной задачи линейного раскроя почти не отличается от соответствующего значения в линейной задач раскроя. На этой основе предложен эффективный комбинированный алгоритм решения целочисленной задачи.
1. Введение
Целочисленная задача линейного раскроя [1] возникает, например, в несерийном производстве, когда количество изделий, на которые идут заготовки задано [6]. Существуют алгоритмы решения этой задачи и процедуры их реализации, основанные на методе дихотомии [3-5]. При решении задач линейного раскроя (обычных и целочисленных) было замечено, что оптимальные значения целевых функций в линейной и целочисленной задачах отличаются менее чем на единицу. Если это верно, то целочисленная задача оказывается ’’почти” линейной, и к ней можно применить комбинацию модифицированного симплекс-метода [2,6] (на первом этапе) и процедуры [4] (для решения очень небольшой по объему задачи).
Чтобы доказать этот факт, сначала выполняется псевдоотсечение по целевой функции в оптимальном решении линейной задачи (путем введения заготовки единичной длины), в результате чего значение целевой функции округляется вверх до ближайшего целого. Далее из полученного решения выделяется дробная часть, и её компоненты являются коэффициентами конической комбинации (с суммой коэффициентов равной целому числу к) способов раскроя, через которую выражается
© Никитенков В.Л., 2006.
целочисленный остаток вектора требований на заготовки. Остается показать, что остаток вектора требований можно представить как сумму к
Затем используются геометрические соображения [7-9], согласно которым способы раскроя представляются как неотрицательные точки целочисленной решетки [7,8] на некоторой гиперплоскости с правой частью Ь (длина сырья), а остаток вектора требований, являющийся их конической комбинацией — точка целочисленной решетки на парал-
кЬ
И, наконец, показывается, что любая целая точка на гиперплоскости кЬ
к
Ь
раскроя),
2. Задача раскроя одномерного сырья
2.1. Линейная задача раскроя
Ь
на заготовки, длины которых задаются вектором
Требуется минимизировать число использованных прутьев при условии выполнения требований на заготовки каждого типа. Будем называть способом раскроя целочисленный вектор Я[М], т, что
Из всех возможных способов раскроя составим неотрицательную целочисленную матрицу А[М, N] (|^| = п — число всех возможных способов раскроя) в которой каждый столбец удовлетворяет условию (1.1). Пусть теперь х^] — вектор интенсивностей использования способов раскроя (способ раскроя А[М,]] используется х^] раз, или по указанному способу раскраивается х^ прутьев). Тогда приходим к следующей задаче ЛП:
1[М] = (/і,..., /т), |М| = т. Вектор требований на заготовки имеет вид
Ь[М ] = (Ьі,...,Ьт).
Я[М] ■ /[М] < ь
(1)
f (х) = 1[^] ■ х[^] —> шіп
А[М, N ■ х[^] = Ь[М] х[М] > 0[М]
в которой столбцы матрицы системы ограничений удовлетворяют условию (1.1), Эта задача ЛП называется задачей линейного раскроя. Задача (1,2) с дополнительным условием
x[N] - целочисленный вектор
носит название целочисленной задачи линейного раскроя.
Задача линейного раскроя решается модифицированным алгоритмом симплекс-метода, причем матрица A[M, N] не хранится (при больших значениях числа типов заготовок m и больших кратностях числа заготовок в способах раскроя её объем может быть весьма значителен), а необходимый для ввода в базис способ раскроя генерируется путем решения задачи о наилучшем раскрое [2], которая представляет собой целочисленную задачу о ранце с двойственными переменными y [M] в качестве коэффициентов целевой функции и ограничениями (1.1):
y[M] ■ R[M] —> max (3)
1[M] ■ R[M] < L
2.2. Оптимальное решение и отсечение по целевой функции
Пусть теперь x* [N] - оптимальное решение линейной задачи раскроя
f (x*) = 1[N] ■ x*[N] = K*
A[M,N] ■ x*[N] = b[M] (4)
x*[N] > 0[N]
K*
же покажем, что это делать не обязательно) и получим новое решение z[N]
1[N] ■ z[N] = [K*] + 1=: K
A[M, N] ■ x[N] = b[M] (5)
x[N] > 0[N]
Выделим целую [x[N]] и дробную {xr[N]} части вектора x[N] и, подставляя в (1,5), имеем
1[N] ■ [x[N]] + 1[N] ■ {x[N]} = K
A[M, N] ■ [x[N]] + A[M, N] ■ {x[N]} = b[M] (6)
[x[N]] > 0[N] - целочисленный, 1[N] > {x|N]} > 0[N]
Или отдельно для дробной части решения
1^] ■ {Х^]} = К - 1^] ■ [ж[N]] = к
А[М, N] ■ {ж[N]} = Ь[М] - А[М, N] ■ [ж[N]] = Ь[М] (7)
1^] > {Х^]} > 0[N], к - целое
Целочисленный вектор Ь[М] будем называть остатком вектора, требований. Формулы (1.7)2,з означают, что данный остаток является конической комбинацией способов раскроя, С учетом (1.7)1 , умножая (1.7)2 на /[М], получим
/[М] ■ Ь[М] < кЬ. (8)
2.3. Модификация (введение заготовки единичной длины)
Введем дополнительный тип заготовок, имеющих единичную длину. Для чего положим
М' = М и {т + 1}, /[т + 1] = 1 (9)
Тогда в каждом способе раскроя последняя компонента будет иметь смысл отхода сырья при однократном использовании ’’реальной” части данного способа раскроя.
А[М', у] = (А[М, ^], Ь - А[М, ^] ■ /[М]) (10)
При этом появляется новый (’’мнимый”) способ раскроя с нулевой ’’реальной” частью, при котором вырезаются только заготовки единичной длины (т.е. весь прут идет в отход):
N' = N и {п + 1}, А[М',т + 1] = (0[М], Ь).
Заметим, что условие (1. 1) теперь выражает безотходность каждого способа раскроя
/[М'] ■ Д[М'] = Ь.
Покажем, что в случае когда К * - нецелое, можно получить представление (1. 7), не производя отсечение по целевой функции. Добавим в оптимальное решение (1. 4) ’’мнимый” способ раскроя с интенсивно-
1 - {К*}
1[ЛГ'] • [ж*[АН] = 1[ЛГ] • [х*[Щ] + 1[ЛГ] • {х*[М}} + (1 - {К*}) =
х*[и+1]
= [К*] + {К*} + (1 - {К*}) = [К*] + 1
Значение целевой функции округлилось вверх до ближайшего целого. Последнюю компоненту Ь[т + 1] вектор а Ь[М'] найдем из условия, аналогичного (1.4)2
Ь[т + 1] = ([К*] + 1) ■ Ь - Ь[М] ■ /[М] > 0, т. к. Ь[М] ■ /[М] < К*Ь.
Таким образом, приходим к задаче, аналогичной (1.7), в которой ограничения (1.1) и (1.8) становятся жесткими, что позволяет трактовать способы раскроя и остаток вектора требований, как точки целочисленной решетки на параллельных гиперплоскостях (1.9) и (1.10) соответственно. Условимся в дальнейшем штрих в обозначениях опускать (т := т +1, п := п + 1).
2.4. Постановка задачи о целочисленном представлении остатка вектора требований
Положительное заключение о том, что оптимальные значения целевых функций линейной и целочисленной задачи отличаются друг от друга менее чем на единицу, можно сделать, если остаток вектора требований будет представлен в виде суммы из к способов раскроя. Т. е.
Тогда вектор
Х^] = (Ж1ж,-1_1,ж,-1 + 1 ж,-1+1,1 хзк+1, ...,ж„)
есть решение целочисленной задачи раскроя со значением целевой функции равным К = [К*] + 1. Таким образом, приходим к следующей задаче о целочисленном представлении остатка вектора требований:
Пусть имеется целочисленный вектор 6[М], такой, что
А[М, N'] ■ х*^'] = Ь[М']
Умножаем последнее равенство на
1^' ] ■ X
■'] ■ Ь
([К*] + 1) ■ Ь = Ь[М] ■ /[М] + Ь[т + 1].
Откуда
к
(п)
/[М] ■ Ь[М] = кЬ,
представимый в виде конической комбинации способов раскроя
А[М,Ж] ■ (ж [Ж]} = Ь[М]
(1[Ж] > (ж[Ж]} > 0[Ж], 1[Ж] -(ЗД} = к, А[М^] ■ 1[М] = Ь)
Требуется, найти коническую комбинацию способов раскроя, с целым,и коэффициентами, дающую представление остатка, вектора, требований
в в
а»А[М, ^] = Ь[М], а > 0 - целые, ^ а = К.
i=1
i=1
3. Геометрическая трактовка
3.1. Раскрои, как целые неотрицательные точки гиперплоскости.
Если рассматривать столбцы матрицы A[M, N] (способы раскроя) как целочисленные векторы m - мерного пространства, то ограничение 1[М] • R[M] = L есть гиперплоскость (в дальнейшем ’’L - гиперплоскость") с вектором коэффициентов 1[М] и правой частью L, a R[M] - целые неотрицательные точки, принадлежащие этой гиперплоскости.
Рассмотрим следующий пример: L = 12, М = {1,2,3}, I = (6,3,1).
Тогда матрица всех возможных способов раскроя А[М, iV], (iV = {1, 2,..., 9}) имеет вид (при лексикографическом упорядочении компонент векторов-столбцов).
Рис. 1
A[M, N]
2 1 1 1 0 0 0 0 0
0 2 1 0 4 3 2 1 0
0 0 3 6 0 3 6 9 12
Ri A01 A02 A О СО R2 A10 A11 A12 R3
Расположение целых точек (способов раскроя) на Ь - гиперплоскости показано па Рис. 1 закрашенными темными кружками.
3.2. Симплекс раскроев. Базис симплекса. Целочисленная решетка. Очевидно, что способы раскроя на Ь - гиперплоскости принадлежат симплексу, натянутому па точки:
і?і = [і//г] , 0,..., О, Ь — и \Ь/Щ ^ , г Є 1 : т — 1
і — я компонента
Ят = (0,..., 0,Ь)
□Любой способ раскроя Я[М] представляется в виде выпуклой линейной комбинации набора {Яі}гт=1, т, к, умножая равенство
т
У,".:!!.: М I! \1 і= 1
скалярно на 1[М], имеем
тт
аіЬ = Ь ^ аі = 1 и аі > 0
Рис. 2
В приведенном выше примере симплекс натянут на вектора Я\, Я2, Я3 (выделены в матрице). Данный симплекс порождает в положительном ортанте т - мерного векторного пространства выпуклый конус, пересекаемый Ь—, 2Ь—,..., кЬ— гиперплоскостями, одной из которых принадлежит целая неотрицательная точка Ь[М] - остаток вектора требо-
Ь
{гі}”=11 = {(0,..., 0,1, 0,..., 0, —/і)}т=11; которые образуют базис следующей целочисленной решетки на Ь - гиперплоскости:
т—1
Ят + £ ПіТі, Пі - целые,
і=1
3.3. Перебор целых точек симплекса раскроев. Обратное лексикографическое упорядочение. Используя введенный базис
Ь
ребор целых точек на симплексе следующим образом:
(Для рассматриваемого примера) Ь = 12, 11 = 6, /2 = 3,
г1 = (1, 0, —6), т2 = (0,1, —3)
Аоо = Яз + 0 • Ті + 0 • т2 = (0, 0,12)
Аоі = Яз + 0 • Ті + 1 • т2 = (0,1, 9)
Ао2 = Яз + 0 • Ті + 2 • т2 = (0, 2, 6) (иі = 0, и Є 0 : [12/3])
Аоз = Яз + 0 • Ті + 3 • т2 = (0, 3, 3)
А04 = Яз + 0 • Ті + 4 • т2 = (0, 4, 0)
иі = 0 фиксировано, а и2 изменяется от 0 до [Ь//2], т, е, и2 Є 0:4
Аіо = Яз + 1 • Ті + 0 • т2 = (1, 0, 6)
Аи = Яз + 1 • Ті + 1 • т2 = (1,1, 3) (иі = 1, и Є 0 : [6/3])
Аі2 = Яз + 1 • Ті + 2 • т2 = (1, 2, 0)
иі = 1 фиксировано, а и2 изменяется от 0 до [(Ь — 1і)//2], т, е, и2 Є 0:2
А2о = Яз + 2 • Ті + 0 • т2 = (2, 0, 0) (иі = 2, и = 0)
иі = 2 фиксировано, а и2 изменяется от 0 до [(Ь — 2/і)//2] = 0, т, е, и2 = 0,
Легко видеть, что перебор осуществляется в порядке обратном лексикографическому: сначала при нулевом значении всех компонент кроме последней, изменяется предпоследняя - от нуля до своего максимального значения. Затем увеличивается на единицу значение ближайшей к ней (в порядке следования компонент вектора) компоненты и процесс продолжается. Порядок следования точек А^ показан на Рис, 1,
В общем случае любая целая точка на симплексе способов раскроя представляется в виде
т—1
А
Ят +
;=1
их £ 0 ^2 £ 0 из £ 0
[Ь/11 ]
[(Ь — и1^1)/12]
[(Ь — и1^1 — и2/2)//3]
Uk £ 0 :
ит-1 £ 0 ■
к-1 \
Ь — X/ “3 3 ) /1к
3=1 /
' т-2 \
Ь ^ ] и3 3 I //т-1
Ч 3 = 1 /
При этом сохраняется порядок перебора, обратный к лексикографическому (первой изменяется компонента, наиболее удаленная (в порядке следования) от начала вектора),
3.4. Случай к = 2. Порождение остатков вектора требований половинными точками симплекса раскроев. Сначала рассмотрим случай, когда точка Ь лежит на 2Ь - гиперплоскости, т, е, когда к = 2,
2Ь
обратном лексикографическому
т- 1
В^1^2...^т-1 2Ят + ^ ]
г=1
^1 £ 0 : [2Ь/11]
^2 £ 0 ^з £ 0
[(2Ь — ^1/1)//2]
[(2Ь — ^1 /1 — ^2^2 )//3]
к-1
Vк £ 0 :
^т-1 £ 0 :
2Ь — X/ Vj 3 ) //к
3 = 1
т- 2
2Ь ) ] Vj3 ) //я
3=1
Рассмотрим и переберем теперь ’’половинные” точки решетки на Ь гиперплоскости, т, е, точки представимые в виде
Умножая на два равенство (2,2) получим целые точки на 2Ь - гиперплоскости.
Сравнивая (2,3) и (2,1) получаем, что V = юі; і Є 1 : т — 1, А, следо-
2Ь
Ь
3.5. Представление половинных точек симплекса раскроев через полусумму точек решетки на симплексе раскроев. Если
Ь
плоскости представимы как середины отрезков с целыми границами,
т—1
і=1
Юі є 0 : [Ь/(/і/2)]
ю2 Є 0 : [(Ь — ю1(/1/2))/(/2/2)]
ю3 Є 0 : [(Ь — ю1(/1/2) — ю2(/2/2))/(/3/2)]
(2)
юі є 0 : [Ь/(/і/2)]
ю2 Є 0 : [(Ь — ю1(/1/2))/(/2/2)]
ю3 Є 0 : [(Ь — ю1(/1/2) — ю2(/2/2))/(/3/2)]
(3)
принадлежащими симплексу способов раскроя, то факт представимости любой целой точки симплекса на 2Ь - гиперплоскости через сумму двух целых точек симплекса на Ь - гиперплоскости будет установлен (см. Рис, 2), Сначала произведем разбиение симплекса способов раскроя на симплексы, содержащие целые точки только в вершинах. Для т = 2 это триангуляция треугольной области с целыми вершинами. Дня нро-т
ции, понижая размерность граней, содержащих целые точки. Обозначим вершины одного из полученных симплексов через Я0, Я\,..., Ят. Введем векторы
тг = Яг — Я0, і Є 1..т,
соединяющие Я0 с остальными вершинами симплекса и векторы
лежащие в гиперплоскостях, параллельных гиперплоскости [Я\,..., Ят} (получающихся из нее переносом на вектор кратный Г\).
Тогда половинные точки данного симплекса могут быть пересчитаны подуровням", .нежащим в указанных гиперплоскостях (см. Рис, 3), следующим образом:
Уровень 0: Яо- вершина
гг — Т\, і Є 2 : т,
Я
Рис. 3
Уровень 1:
середины ребер Я0Яг,
і Є 1 : т
До + П + - п) + \{г, - Г1) =
Уровень 2: = (Д0 + ^0 + (До + = %\ ^
(г Е 1 : т, ] Е 1 : т)
Таким образом, все половинные данного симплекса представляются как середины ребер или как полусуммы целых точек симплекса.
Учитывая разбиение симплекса раскроев на указанные симплексы, это верно и для всех половинных точек симплекса раскроев, А так как все целые точки на 2Ь - гиперплоскости порождаются половинными точками на Ь - гиперплоскости (путем их удвоения), то доказано, что
Ь = Я + Rj,
где Я^Я- - целые точки из Ь - гиперплоскости (т.е, способы раскроя),
3.6. Случай к = 2Р. На основании доказанного справедливо соот-
ношение
Ъ(р) = д(р-1) + д(р-1), (4)
где Ъ(р) - целая точка из 2р • Ь - гиперплоскости,
Д(р Х), Д^р Х) - целые точк и из 2р-1 • Ь - гиперплоскости.
Применяя (2,4) к Д(р-1), Д^р-1), еще понижаем показатель степени, и в итоге приходим к представлению
2 р
ь(р) = ^2 д.,
в=і
где Дів - целые точк и из Ь - гиперплоскости,
3.7. Случай произвольного к.
Пусть теперь к > 2. Аналогично случаю к = 2, можно показать, что все целые точки на кЬ - гиперплоскости порождаются ”1/к” точками Ь
исходного симплекса способов раскроя, на симплексы, содержащие целые точки только в вершинах (см, п, 2,5) и производится перебор ”1/к” точек по ’’уровням” (их число равно к). При этом, каждая ”1/к” точка в симплексе {До, Д1,..., Дт} может быть представлена в виде
Т т т
^ = До + |г1 + ^|(гг-г1), q<k,J2(iг<Q■ і=2 і=2
Преобразуем последнее выражение к линейной комбинации вершин симплекса
Т v'vm т
Ь Я + К
к к к ^ ¥
і=2
mm
= Ro + — Ro)----^—(Ri — Ro) + т(Д — ^°) =
k k i=2 k
Em v^m v^m v^m
г=2&р і zZi=2(lip zZi=2(lip zZi=2(lip _ /^ч
— j M)ttj h — t-j -г—г—^чп г—------г—^0 —
К К К К К К
/ v^m \ v-^m
Л1 + ^Д
к) “ \к к J 1 к
Коэффициенты полученной линейной комбинации неотрицательны. Подсчитаем их сумму
(V^m \ m
I-^)+£t = L-
Следовательно (2,5) есть выпуклая линейная комбинация целочисленных вершин симплекса с коэффициентами, кратными
Окончательно, умножая на к равенство (2,5), получаем, что любая целая точка b из kL - гиперплоскости представима в виде суммы к целых точек из L - гиперплоскости (т.е. способов раскроя),
4. Заключение
Таким образом, в работе показано, что оптимальное решение целочисленной задачи одномерного раскроя можно получить, округлив вверх до ближайшего целого значение целевой функции линейной задачи и произведя разбиение остатка вектора требований на указанное число способов раскроя (доказано, что эта задача всегда разрешима). Для решения последней задачи можно применить (один раз) процедуру best partition 2[4],
Литература
1, Канторович Л.В., Залгаллер В.А. Рациональный раскрой промышленных материалов, М,:Наука, 1971,
2, Грибов А.Б., Романовский И.В. Программирование симплекс-метода и его вариантов на АЛГОЛЕ // Оптимальное планирование. 1963. Вып. 12. С. 5-27.
3, Романовский И.В. Наилучшее разбиение множества на заданное число подмножеств // АЛГОЛ-процедуры. Изд. ЛГУ. 1970. Вып.6.
4, Кацев С.Б., Романовский И.В. Две задачи целочисленного программирования // АЛГОЛ-процедуры. Изд. ЛГУ. 1975. Вып.13.
5, Кацев С.Б. Решение одной обогценной задачи о разбиении множеств // Кибернетика, 1977. №5. С. 115-120.
6, Романовский И.В. Алгоритмы решения экстремальных задач. М.: Наука, 1977. 352 с.
7, Гильберт Д., Кон-Фоссен С. Наглядная геометрия. М.: Наука, 1981. 341 с.
8, Касселс Дж.В.С. Введение в геометрию чисел. М.: Мир, 1965. 421 с.
9, Брёнстед А. Введение в теорию выпуклых многогранников. М.: Мир, 1988. 240 с.
Summary
Nikitenkov V.L. On the integer-valued solving of the linear cutting problem.
It was proved that optimal value of the target function for the integervalued problem of linear cutting just slightly differs from the corresponding value for the linear cutting problem. On this basis it was offered the effective complex algorithm of integer-valued problem solution.
Сыктывкарский университет
Поступила 4-02.2006