Задача раскроя: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
пропуск буквы
оформление, стилевые правки, пунктуация, проверка орф. и пункт.
Строка 1: Строка 1:
'''Задача раскроя''' — это [[NP-полная задача| NP-полная задача]] задача [[Оптимизация (математика)|оптимизации]], по существу, сводимая к [[Задача о ранце|задаче о ранце]]. Задача является задачей [[Целочисленное программирование|целочисленного линейного программирования]]. Задача возникает во многих областях промышленности. Представим себе, что вы работаете на целлюлозно-бумажном предприятии и у вас имеется некоторое количество рулонов бумаги фиксированной ширины, но различным заказчикам нужны различные количества рулонов различной ширины. Как разрезать бумагу, чтобы минимизировать отходы?
'''Задача раскроя''' — это [[NP-полная задача| NP-полная задача]] задача [[Оптимизация (математика)|оптимизации]], по существу, сводимая к [[Задача о ранце|задаче о ранце]]. Задача является задачей [[Целочисленное программирование|целочисленного линейного программирования]]. Задача возникает во многих областях промышленности. Представим себе, что вы работаете на целлюлозно-бумажном предприятии и у вас имеется некоторое количество рулонов бумаги фиксированной ширины, но различным заказчикам нужны различные количества рулонов различной ширины. Как разрезать бумагу, чтобы минимизировать отходы?


Согласно данным {{не переведено 5|Конфедерация европейских производителей бумаги|конфедерации европейских производителей бумаги||Confederation of European Paper Industries}},<ref name=CEPI2012>{{cite web|title=Key Statistics 2012|url=http://www.cepi.org/node/16197|publisher=Confederation of Europear Paper Industries|accessdate=3 July 2013}}</ref> в 2012 году 1.331 бумагоделательных машин в регионе производят в среднем отходов на €56 миллиона (примерно US$73 миллиона) каждая. Экономии даже 1% будет очень существенной.
Согласно данным {{не переведено 5|Конфедерация европейских производителей бумаги|Конфедерации европейских производителей бумаги||Confederation of European Paper Industries}}<ref name=CEPI2012>{{cite web|title=Key Statistics 2012|url=http://www.cepi.org/node/16197|publisher=Confederation of Europear Paper Industries|accessdate=3 July 2013}}</ref>, в 2012 году 1331 бумагоделательных машин в регионе производят в среднем отходов на 56 млн евро (примерно 73 млн долларов США) каждая. Экономии даже 1 % будет очень существенной.


== Формулировка задачи и подходы к решению ==
== Формулировка задачи и подходы к решению ==
Стандартная формулировка задачи раскроя (но не единственная) предполагает список ''m'' заказов, в каждом заказе требуется <math>q_j, j = 1,\ldots,m</math> кусков. Образуем все возможные комбинации раскроя ("карты раскроя") и связываем с каждой картой положительную целую переменную <math>x_i</math>, показывающую, сколько раз карта использовалась. Выпишем задачу линейного программирования:
Стандартная формулировка задачи раскроя (но не единственная) предполагает список ''m'' заказов, в каждом заказе требуется <math>q_j, j = 1,\ldots,m</math> кусков. Образуем все возможные комбинации раскроя («карты раскроя») и связываем с каждой картой положительную целую переменную <math>x_i</math>, показывающую, сколько раз карта использовалась. Выпишем задачу линейного программирования:


:<math>\min\sum_{i=1}^n c_i x_i</math>
:<math>\min\sum_{i=1}^n c_i x_i</math>
Строка 18: Строка 18:
В целом, число возможных карт растёт экспоненциально от ''m'', числа заказов. При росте числа заказов может оказаться непрактичным перечислять возможные карты раскроя.
В целом, число возможных карт растёт экспоненциально от ''m'', числа заказов. При росте числа заказов может оказаться непрактичным перечислять возможные карты раскроя.


В качестве альтернативы можно использовать [[генерация столбцов]]. Этот метод решает задачу раскроя, начиная с нескольких карт. Метод образует новые карты, если они потребуются, в процессе решения. В одномерном случае новые карты появляются при решении дополнительной оптимизационной задачи, [[Задача о ранце|задачи о ранце]], в которой используется информации о двойственных переменных задачи [[Линейное программирование|линейного программирования]]. Задача о ранце имеет хорошо известные методы её решения, такие как [[Метод ветвей и границ|метод ветвей и границ]] и [[Динамическое программирование| динамическое программирование]]. Метод отложенной генерации столбцов может оказаться много эффективнее исходного подхода, особенно при росте размера задачи. [[Генерация столбцов|Отложенная генерация столбцов]] в применении к задаче раскроя впервые была использована Гилмором и Гомори (Gilmore, Gomory) в серии статей, опубликованных в 1960-х годах.<ref name=Gilmore61>Gilmore P. C., R. E. Gomory (1961). ''A linear programming approach to the cutting-stock problem''. Operations Research 9: 849-859</ref><ref name=Gilmore63>Gilmore P. C., R. E. Gomory (1963). ''A linear programming approach to the cutting-stock problem - Part II''. Operations Research 11: 863-888</ref> Гилмор и Гомори показали, что этот подход приводит гарантированно к (дробному) оптимальному решению без необходимости перечислять все возможные карты заранее.
В качестве альтернативы можно использовать [[генерация столбцов|генерацию столбов]]. Этот метод решает задачу раскроя, начиная с нескольких карт. Метод образует новые карты, если они потребуются, в процессе решения. В одномерном случае новые карты появляются при решении дополнительной оптимизационной задачи, [[Задача о ранце|задачи о ранце]], в которой используется информации о двойственных переменных задачи [[Линейное программирование|линейного программирования]]. Задача о ранце имеет хорошо известные методы её решения, такие как [[Метод ветвей и границ|метод ветвей и границ]] и [[Динамическое программирование| динамическое программирование]]. Метод отложенной генерации столбцов может оказаться много эффективнее исходного подхода, особенно при росте размера задачи. [[Генерация столбцов|Отложенная генерация столбцов]] в применении к задаче раскроя впервые использована Гилмором и Гомори в серии статей, опубликованных в 1960-х годах<ref name=Gilmore61>{{статья |автор=P. C. Gilmore, R. E. Gomory|заглавие=A linear programming approach to the cutting-stock problem |ссылка= |язык= |издание=Operations Research |тип= |год=1961 |том= |номер=9|страницы=849—859 |doi= |issn=}}</ref><ref name=Gilmore63>{{статья |автор=P. C. Gilmore, R. E. Gomory |заглавие=A linear programming approach to the cutting-stock problem - Part II |ссылка= |язык= |издание=Operations Research |тип= |год=1963 |том= |номер=11 |страницы=863—888 |doi= |issn=}}</ref>. Они показали, что этот подход приводит гарантированно к (дробному) оптимальному решению без необходимости перечислять все возможные карты заранее.


Исходный метод Гилмора и Гомори не был целочисленным, так что решение могло содержать дробные составляющие, например, некоторая карта должна была использоваться 3,67 раз. Округление до ближайшего целого часто не работает, в том смысле, что это приводит к подоптимальному решению и недопроизводству или перепроизводству для некоторых заказов (и возможное нарушение ограничений, если они двусторонние). Этот недостаток преодолён в новых алгоритмах, которые позволяют находить оптимальные решения (в смысле нахождения решения с минимальными отходами) очень больших задач (в общем случае больших, чем нужно на практике <ref name=Goulimis1990>Goulimis C (1990). ''Optimal solutions for the cutting stock problem''. European Journal of Operational Research 44: 197-208</ref><ref name=Carvalho1998>de Carvalho V (1998). ''Exact solution of cutting stock problems using column generation and branch-and-bound''. International Transactions in Operational Research 5: 35–44</ref>).
Исходный метод Гилмора и Гомори не был целочисленным, так что решение могло содержать дробные составляющие, например, некоторая карта должна была использоваться 3,67 раз. Округление до ближайшего целого часто не работает, в том смысле, что это приводит к подоптимальному решению и недопроизводству или перепроизводству для некоторых заказов (и возможное нарушение ограничений, если они двусторонние). Этот недостаток преодолён в новых алгоритмах, которые позволяют находить оптимальные решения (в смысле нахождения решения с минимальными отходами) очень больших задач (в общем случае больших, чем нужно на практике <ref name=Goulimis1990>{{статья |автор=C. Goulimis |заглавие=Optimal solutions for the cutting stock problem |ссылка= |язык= |издание=European Journal of Operational Research |тип= |год=1990 |том= |номер=44 |страницы=197—208 |doi= |issn=}}</ref><ref name=Carvalho1998>{{статья |автор=V. de Carvalho|заглавие=Exact solution of cutting stock problems using column generation and branch-and-bound |ссылка= |язык= |издание=International Transactions in Operational Research |тип= |год=1998 |том= |номер=5 |страницы=35—44 |doi= |issn=}}</ref>).


Задача раскроя часто является крайне вырожденной, поскольку возможно большое число решений с одним и тем же количеством потерь. Это вырождение возникает из-за возможности переставлять части, создавая новые карты раскроя, но не меняя результирующие потери. Это даёт целую коллекцию сопутствующих задач, удовлетворяющих тем же ограничениям, таких как:
Задача раскроя часто является крайне вырожденной, поскольку возможно большое число решений с одним и тем же количеством потерь. Это вырождение возникает из-за возможности переставлять части, создавая новые карты раскроя, но не меняя результирующие потери. Это даёт целую коллекцию сопутствующих задач, удовлетворяющих тем же ограничениям, таких как:
* Задача нахождения минимального числа карт раскроя: найти решение с минимальным числом карт раскроя среди решений с минимальными потерями. Эта задача очень трудна, даже если потери известны<ref name=Umetani2003>{{статья |автор=S. Umetani, M. Yagiura, and T. Ibaraki |заглавие=One dimensional cutting stock problem to minimize the number of different patterns |ссылка= |язык= |издание=European Journal of Operational Research |тип= |год=2003 |том= |номер=146 |страницы= 388—402|doi= |issn=}}</ref><ref name=Diegel1996>{{статья |автор=A. Diegel, E. Montocchio, E. Walters, S. van Schalkwyk and S. Naidoo |заглавие=Setup minimizing conditions in the trim loss problem |ссылка= |язык= |издание=European Journal of Operational Research |тип= |год=1996 |том= |номер=95 |страницы=631—640 |doi= |issn=}}</ref>. Существует [[гипотеза]], что любая ограниченная равенствами одномерная задача раскроя с ''n'' заказами, имеет по меньшей мере одно решение на минимум отходов с ''n'' + 1 картами раскроя. Верхние границы числа карт раскроя не известны, хотя примеры с ''n'' + 5 известны.


* Задача минимального склада: найти последовательность раскроя, чтобы не накапливалось большого числа частично выполненных заказов. Задача была открытой вплоть до 2007 года, когда опубликован эффективный алгоритм, основанный на динамическом программировании<ref name=Banda2007>{{статья |автор=Maria Garcia de la Banda, P. J. Stuckey |заглавие=ynamic Programming to Minimize the Maximum Number of Open Stacks |ссылка= |язык= |издание=INFORMS Journal on Computing |тип= |год=3007 |том=19 |номер=4 |страницы=607—617 |doi= |issn=}}</ref>.
* Задача нахождения минимального числа карт раскроя: найти решение с минимальным числом карт раскроя среди решений с минимальными потерями. Эта задача очень трудна, даже если потери известны.<ref name=Umetani2003>S. Umetani, M. Yagiura, and T. Ibaraki (2003). ''One dimensional cutting stock problem to minimize the number of different patterns''. European Journal of Operational Research 146, 388–402</ref><ref name=Diegel1996>A. Diegel, E. Montocchio, E. Walters, S. van Schalkwyk and S. Naidoo (1996). ''Setup minimizing conditions in the trim loss problem''. European Journal of Operational Research 95:631-640</ref> Существует [[гипотеза]], что любое ограниченная равенствами одномерная задача раскроя с ''n'' заказами, имеет по меньшей мере одно решение на минимум отходов с ''n'' + 1 картами раскроя. Верхние границы числа карт раскроя не известны, хотя примеры с ''n'' + 5 известны.

* Задача минимального склада: найти последовательность раскроя, чтобы не накапливалось большого числа частично выполненных заказов. Задача была открытой вплоть до 2007, когда был опубликован эффективный алгоритм, основанный на динамическом программировании.<ref name=Banda2007>Maria Garcia de la Banda, P. J. Stuckey. ''Dynamic Programming to Minimize the Maximum Number of Open Stacks''. INFORMS Journal on Computing, Vol. 19, No. 4, Fall 2007, 607-617.</ref>


* Задача минимального числа смен ножей (для одномерной задачи раскроя): найти последовательность применения карт раскроя, чтобы минимизировать число перемещений режущих ножей. Данная задача является частным случаем обобщённой [[Задача коммивояжёра|задачи коммивояжёра]].
* Задача минимального числа смен ножей (для одномерной задачи раскроя): найти последовательность применения карт раскроя, чтобы минимизировать число перемещений режущих ножей. Данная задача является частным случаем обобщённой [[Задача коммивояжёра|задачи коммивояжёра]].


== Иллюстрация одномерной задачи раскроя ==
== Иллюстрация одномерной задачи раскроя ==
Бумагоделательная машина может производить неограниченное число рулонов (заготовок), каждая 5600&nbsp;мм шириной. Нужно получить следующие 13 конечных рулонов:

Бумагоделательная машина может производить неограниченное число рулонов (заготовок) , каждая 5600&nbsp;мм шириной. Нужно получить следующие 13 конечных рулонов:
::{| class="wikitable"
::{| class="wikitable"
|-
|-
Строка 67: Строка 65:
===Решение===
===Решение===
[[Файл:Одномерный раскрой.svg|thumb|430px|Решение с минимальными отходами, в котором минимизировано число смен ножей. Смена ножей показана маленькими зелёными кружочками]]
[[Файл:Одномерный раскрой.svg|thumb|430px|Решение с минимальными отходами, в котором минимизировано число смен ножей. Смена ножей показана маленькими зелёными кружочками]]
Имеется 308 возможных карт раскроя для этой маленькой задачи. Оптимальное решение требует 73 исходных рулона и имеет 0.401% отходов. Можно показать, что минимальное число карт раскроя для такого количества отходов равно 10. Можно также вычислить, что существует 19 таких различных решений, каждое с 10 картами раскроя и 0.401% отходов. Одно из таких решений показано ниже и на рисунке:
Имеется 308 возможных карт раскроя для этой маленькой задачи. Оптимальное решение требует 73 исходных рулона и имеет 0,401 % отходов. Можно показать, что минимальное число карт раскроя для такого количества отходов равно 10. Можно также вычислить, что существует 19 таких различных решений, каждое с 10 картами раскроя и 0,401 % отходов. Одно из таких решений показано ниже и на рисунке:
:{| class="wikitable" border="0" cellpadding="4"
:{| class="wikitable" border="0" cellpadding="4"
!Число карт
!Число карт
Строка 96: Строка 94:


== Классификация ==
== Классификация ==
Задачи раскроя можно классифицировать различными способами.<ref name=Wäscher2007>Wäscher, G.; Haußner, H.; Schumann, H. ''An Improved Typology of Cutting and Packing Problems''. European Journal of Operational Research Volume 183, Issue 3, 1109-1130</ref> Один путь — размерность раскроя: выше приведённый пример иллюстрирует одномерный раскрой (1D). Другие промышленные применения 1D раскроя — резка труб, кабелей и стальных прутков. Двумерные (2D) задачи применяются при производстве мебели, одежды и стекла. Существует не так уж много трёхмерных (3D) применений раскроя, однако близкие 3D {{не переведено 5|Задача упаковки|задачи упаковки||packing problem}} имеют много промышленных приложений, в частности, распределение объектов в контейнеры для водного транспорта (смотрите, например, [[Контейнерные перевозки]], близкая к ней задача [[Упаковка шаров|упаковки шаров]] изучалась с 17-го столетия ([[Гипотеза Кеплера]])).
Задачи раскроя можно классифицировать различными способами<ref name=Wäscher2007>{{статья |автор=G. Wäscher, H. Haußner, H. Schumann |заглавие=An Improved Typology of Cutting and Packing Problems |ссылка= |язык= |издание=European Journal of Operational Research |тип= |год= |том=183 |номер=3 |страницы=1109—1130 |doi= |issn=}}</ref>. Один путь — размерность раскроя: выше приведённый пример иллюстрирует одномерный раскрой (1D). Другие промышленные применения 1D раскроя — резка труб, кабелей и стальных прутков. Двумерные (2D) задачи применяются при производстве мебели, одежды и стекла. Существует не так уж много трёхмерных (3D) применений раскроя, однако близкие 3D {{не переведено 5|Задача упаковки|задачи упаковки||packing problem}} имеют много промышленных приложений, в частности, распределение объектов в контейнеры для водного транспорта (смотрите, например, [[Контейнерные перевозки]], близкая к ней задача [[Упаковка шаров|упаковки шаров]] изучалась с 17-го столетия ([[Гипотеза Кеплера]])).


==Задача раскроя в бумажной, плёночной и сталепрокатной промышленностях ==
==Задача раскроя в бумажной, плёночной и сталепрокатной промышленностях ==
Промышленное применение задачи раскроя для предприятий с массовым выпуском продукции возникает, когда основной материал производится в больших рулонах, а затем режется на более мелкие части (смотрите [[слиттинг]]). Это происходит, например в бумажном производстве и при получении полимерных плёнок, а также при изготовлении плоских металлических (железных или бронзовых) листов. Существует много вариантов и дополнительных ограничений, вызванных особенностями производства или ограничениями процесса, требованиями заказчиков и вопросами качества. Некоторые примеры:
Промышленное применение задачи раскроя для предприятий с массовым выпуском продукции возникает, когда основной материал производится в больших рулонах, а затем режется на более мелкие части (см. [[слиттинг]]). Это происходит, например, в бумажном производстве и при получении полимерных плёнок, а также при изготовлении плоских металлических (железных или бронзовых) листов. Существует много вариантов и дополнительных ограничений, вызванных особенностями производства или ограничениями процесса, требованиями заказчиков и вопросами качества. Некоторые примеры:


* Двустадийный процесс, когда рулон производится на первой стадии, а затем поступает в обработку ещё раз на другой машине. Например, вся офисная бумага (например, формат [[ISO 216|A4]] в Европе, [[Letter|Letter]] в США) производится в таком процессе. Трудности появляются ввиду того, что машины для второго процесса уже машин первого. Эффективное использование обоих стадий процесса важно (как с точки зрения экономии материала, так и экономии энергии) и то, что эффективно для первой стадии может оказаться неэфективным для второй, и приходится искать компромисс. {{не переведено 5|Металлизированная плёнка|Металлизированная плёнка||Metallised film}} (используемая для упаковки продуктов питания) и покрытая пластиком бумага ({{не переведено 5|Упаковочный картон для жидкостей|упаковочный картон для жидкостей||liquid packaging board}}, например, для упаковки соков) — другие примеры таких процессов.
* Двустадийный процесс, когда рулон производится на первой стадии, а затем поступает в обработку ещё раз на другой машине. Например, вся офисная бумага (например, формат [[ISO 216|A4]] в Европе, [[Letter|Letter]] в США) производится в таком процессе. Трудности появляются ввиду того, что машины для второго процесса уже машин первого. Эффективное использование обоих стадий процесса важно (как с точки зрения экономии материала, так и экономии энергии) и то, что эффективно для первой стадии может оказаться неэфективным для второй, и приходится искать компромисс. {{не переведено 5|Металлизированная плёнка|Металлизированная плёнка||Metallised film}} (используемая для упаковки продуктов питания) и покрытая пластиком бумага ({{не переведено 5|Упаковочный картон для жидкостей|упаковочный картон для жидкостей||liquid packaging board}}, например, для упаковки соков) — другие примеры таких процессов.


* Мотальные машины ограничивают разрезание физически или логически: общие ограничения возникают из того, что только определённое число ножей допустимо, так что карта раскроя не должна содержать ножей больше некоторой величины. Поскольку мотальные машины не стандартизованы, возникает много дополнительных ограничений.
* Мотальные машины ограничивают разрезание физически или логически: общие ограничения возникают из того, что только определённое число ножей допустимо, так что карта раскроя не должна содержать ножей больше некоторой величины. Поскольку мотальные машины не стандартизованы, возникает много дополнительных ограничений.


* В качестве дополнительного ограничения можно привести, например, ограничение на направление разрезания — различные края листа могут иметь большое различие в толщине и некоторые приложения очень чувствительны к этому.
* В качестве дополнительного ограничения можно привести, например, ограничение на направление разрезания — различные края листа могут иметь большое различие в толщине и некоторые приложения очень чувствительны к этому.


* В качестве примера влияния требований качества можно привести случай, когда основной рулон содержит дефекты, которые следует вырезать. Дорогие материалы с высокими требованиями к качеству материала, такие как [[фотобумага]] или [[тайвек]] следует тщательно оптимизировать, чтобы минимизировать отходы.
* В качестве примера влияния требований качества можно привести случай, когда основной рулон содержит дефекты, которые следует вырезать. Дорогие материалы с высокими требованиями к качеству материала, такие как [[фотобумага]] или [[тайвек]], следует тщательно оптимизировать, чтобы минимизировать отходы.


* Многомашинные задачи возникают, когда заказ можно произвести на более чем одной машине и эти машины имеют различную ширину. В основном, доступность нескольких исходных рулонов с различной шириной уменьшает количество отходов. На практике, однако, приходится учитывать дополнительный порядок разрезания.
* Многомашинные задачи возникают, когда заказ можно произвести на более чем одной машине и эти машины имеют различную ширину. В основном, доступность нескольких исходных рулонов с различной шириной уменьшает количество отходов. На практике, однако, приходится учитывать дополнительный порядок разрезания.


* Имеются также задачи, когда результирующие рулоны не обязательно должны быть одного диаметра, а можгут быть в пределах некоторого интервала. Иногда эту задачу называют задачей ''1½ размерности''. Этот вариант появляется, например, при производстве [[Гофрокартон|гофрокартона]].
* Имеются также задачи, когда результирующие рулоны не обязательно должны быть одного диаметра, а могут быть в пределах некоторого интервала. Иногда эту задачу называют задачей ''1½ размерности''. Этот вариант появляется, например, при производстве [[Гофрокартон|гофрокартона]].


* В сталепрокатной промышленности отличительной особенностью является то, что исходные рулоны, в основном, различаются как по ширине, так и по длине. Таким образом, возникает схожесть с многомашинным вариантом, описанным выше. В этом случае отходы могут возникать как по ширине, так и по длине.
* В сталепрокатной промышленности отличительной особенностью является то, что исходные рулоны, в основном, различаются как по ширине, так и по длине. Таким образом, возникает схожесть с многомашинным вариантом, описанным выше. В этом случае отходы могут возникать как по ширине, так и по длине.


Программное обеспечение для решения задач раскроя для бумажной промышленности поставляют [[ABB Group]], [[Greycon]], [[Honeywell]] и [[Tieto]].<br>
Программное обеспечение для решения задач раскроя для бумажной промышленности поставляют [[ABB Group]], [[Greycon]], [[Honeywell]] и [[Tieto]].

Алгоритм раскроя для сталепрокатной промышленности было сформулирован Робертом Гонгорра (Robert Gongorra) в 1998 и S.O.N.S (Steel Optimization Nesting Software) разработал программное обеспечение для улучшения использования стального листа и уменьшения отходов.
Алгоритм раскроя для сталепрокатной промышленности сформулирован Робертом Гонгорра (Robert Gongorra) в 1998 году и S.O.N.S (Steel Optimization Nesting Software) разработал программное обеспечение для улучшения использования стального листа и уменьшения отходов.


==Задача раскроя для стекольной промышленности ==
==Задача раскроя для стекольной промышленности ==
Строка 122: Строка 121:


==Задача ассортимента==
==Задача ассортимента==
Связанная задача определения (для одномерного случая) наилучшего размера исходного рулона, который удовлетворяет требованиям, известна как задача ''ассортимента''.<ref>{{cite doi|10.1111/j.1475-3995.2009.00724.x}}</ref>
Связанная задача определения (для одномерного случая) наилучшего размера исходного рулона, который удовлетворяет требованиям; известна как задача ''ассортимента''<ref>{{cite doi|10.1111/j.1475-3995.2009.00724.x}}</ref>.


== История ==
== История ==
Задача раскроя впервые была сформулирована [[Канторович, Леонид Витальевич|Канторовичем]] в 1939.<ref >{{книга
Задача раскроя впервые сформулирована [[Канторович, Леонид Витальевич|Канторовичем]] в 1939 году<ref >{{книга
|автор=Л.В. Канторович
|автор=Л. В. Канторович
|заглавие=Mathematical methods of organizing and planning production
|заглавие=Mathematical methods of organizing and planning production
|место=Leningrad State University
|место=Leningrad State University
}}</ref> В 1951, ещё до того, как компьютеры стали широко доступны, [[Канторович, Леонид Витальевич| Л.В. Канторович]] и [[Залгаллер, Виктор Абрамович|В.А. Залгаллер]] предложили<ref>{{книга
}}</ref>. В 1951 году, ещё до того, как компьютеры стали широко доступны, [[Канторович, Леонид Витальевич| Л. В. Канторович]] и [[Залгаллер, Виктор Абрамович|В. А. Залгаллер]] предложили<ref>{{книга
| автор = Канторович Л.В., Залгаллер В.А.
| автор = Канторович Л. В., Залгаллер В. А.
| заглавие = Рациональный раскрой промышленных материалов
| заглавие = Рациональный раскрой промышленных материалов
| место = Новосибирск
| место = Новосибирск
Строка 148: Строка 147:
|}
|}


== Ссылки ==
== Примечания ==
{{примечания}}
{{reflist}}


== Литература ==
== Дальнейшее чтение ==
*{{книга
*{{книга
| Автор = [[Хватал, Вацлав]]
| Автор = [[Хватал, Вацлав]]
| заглавие = Linear Programming
| заглавие = Linear Programming
| издательство = W.H. Freeman
| издательство = W. H. Freeman
| год = 1983
| год = 1983
| isbn = 978-0-7167-1587-0}}
| isbn = 978-0-7167-1587-0}}
* {{книга
* Hatem Ben Amor, J.M. Valério de Carvalho, ''Cutting Stock Problems'' in Column Generation, edited by Guy Desaulniers, Jacques Desrosiers, and Marius M. Solomon, Springer, 2005, XVI, ISBN 0-387-25485-4
|автор=Hatem Ben Amor, J.M. Valério de Carvalho
|заглавие=Cutting Stock Problems in Column Generation
|ответственный=Guy Desaulniers, Jacques Desrosiers and Marius M. Solomon
|часть=Column Generation
|издательство=Springer
|год=2005
|том=XVI
|isbn=0-387-25485-4}}


== Ссылки ==
== Внешние ссылки ==
* [http://paginas.fe.up.pt/~esicup/tiki-index.php European Special Interest Group on Cutting & Packing]
* [http://paginas.fe.up.pt/~esicup/tiki-index.php European Special Interest Group on Cutting & Packing]
* [http://pastebin.com/1XPiBD20 A rudimentary brute-force algorithm for cutting stock]
* [http://pastebin.com/1XPiBD20 A rudimentary brute-force algorithm for cutting stock]
* [http://www.codeproject.com/Articles/706136/Csharp-Bin-Packing-Cutting-Stock-Solver Bin Packing and Cutting Stock Solver Algorithm]
* [http://www.codeproject.com/Articles/706136/Csharp-Bin-Packing-Cutting-Stock-Solver Bin Packing and Cutting Stock Solver Algorithm]

{{rq|checktranslate|style|grammar}}
{{rq|checktranslate}}
[[Категория:Комбинаторная оптимизация]]
[[Категория:Комбинаторная оптимизация]]
[[Категория: Исследование операций]]
[[Категория: Исследование операций]]

Версия от 19:55, 6 августа 2015

Задача раскроя — это NP-полная задача задача оптимизации, по существу, сводимая к задаче о ранце. Задача является задачей целочисленного линейного программирования. Задача возникает во многих областях промышленности. Представим себе, что вы работаете на целлюлозно-бумажном предприятии и у вас имеется некоторое количество рулонов бумаги фиксированной ширины, но различным заказчикам нужны различные количества рулонов различной ширины. Как разрезать бумагу, чтобы минимизировать отходы?

Согласно данным Конфедерации европейских производителей бумаги[англ.][1], в 2012 году 1331 бумагоделательных машин в регионе производят в среднем отходов на 56 млн евро (примерно 73 млн долларов США) каждая. Экономии даже 1 % будет очень существенной.

Формулировка задачи и подходы к решению

Стандартная формулировка задачи раскроя (но не единственная) предполагает список m заказов, в каждом заказе требуется кусков. Образуем все возможные комбинации раскроя («карты раскроя») и связываем с каждой картой положительную целую переменную , показывающую, сколько раз карта использовалась. Выпишем задачу линейного программирования:

, целое

где — сколько раз заказ появляется в карте и — цена (часто потери) карты . Точная природа ограничений может вести к слегка различным математическим характеристикам. Приведённые ограничения являются ограничениями на минимум (по меньшей мере заданное количество должно быть произведено, но не исключается, что будет произведено и больше). Если , требуется минимизировать число разрезаемых кусков исходного материала. Если ограничения с неравенств заменить на равенства, задача называется упаковкой в контейнеры. В более общей формулировке ограничения двухсторонние (и в этом случае решение минимизации потерь может отличаться от решения с минимальным числом кусков исходного материала):

Такая формулировка задачи применима не только к одномерному случаю. Возможно много вариаций, например, цель — не минимизация потерь, а максимизация общего числа произведённого товара.

В целом, число возможных карт растёт экспоненциально от m, числа заказов. При росте числа заказов может оказаться непрактичным перечислять возможные карты раскроя.

В качестве альтернативы можно использовать генерацию столбов. Этот метод решает задачу раскроя, начиная с нескольких карт. Метод образует новые карты, если они потребуются, в процессе решения. В одномерном случае новые карты появляются при решении дополнительной оптимизационной задачи, задачи о ранце, в которой используется информации о двойственных переменных задачи линейного программирования. Задача о ранце имеет хорошо известные методы её решения, такие как метод ветвей и границ и динамическое программирование. Метод отложенной генерации столбцов может оказаться много эффективнее исходного подхода, особенно при росте размера задачи. Отложенная генерация столбцов в применении к задаче раскроя впервые использована Гилмором и Гомори в серии статей, опубликованных в 1960-х годах[2][3]. Они показали, что этот подход приводит гарантированно к (дробному) оптимальному решению без необходимости перечислять все возможные карты заранее.

Исходный метод Гилмора и Гомори не был целочисленным, так что решение могло содержать дробные составляющие, например, некоторая карта должна была использоваться 3,67 раз. Округление до ближайшего целого часто не работает, в том смысле, что это приводит к подоптимальному решению и недопроизводству или перепроизводству для некоторых заказов (и возможное нарушение ограничений, если они двусторонние). Этот недостаток преодолён в новых алгоритмах, которые позволяют находить оптимальные решения (в смысле нахождения решения с минимальными отходами) очень больших задач (в общем случае больших, чем нужно на практике [4][5]).

Задача раскроя часто является крайне вырожденной, поскольку возможно большое число решений с одним и тем же количеством потерь. Это вырождение возникает из-за возможности переставлять части, создавая новые карты раскроя, но не меняя результирующие потери. Это даёт целую коллекцию сопутствующих задач, удовлетворяющих тем же ограничениям, таких как:

  • Задача нахождения минимального числа карт раскроя: найти решение с минимальным числом карт раскроя среди решений с минимальными потерями. Эта задача очень трудна, даже если потери известны[6][7]. Существует гипотеза, что любая ограниченная равенствами одномерная задача раскроя с n заказами, имеет по меньшей мере одно решение на минимум отходов с n + 1 картами раскроя. Верхние границы числа карт раскроя не известны, хотя примеры с n + 5 известны.
  • Задача минимального склада: найти последовательность раскроя, чтобы не накапливалось большого числа частично выполненных заказов. Задача была открытой вплоть до 2007 года, когда опубликован эффективный алгоритм, основанный на динамическом программировании[8].
  • Задача минимального числа смен ножей (для одномерной задачи раскроя): найти последовательность применения карт раскроя, чтобы минимизировать число перемещений режущих ножей. Данная задача является частным случаем обобщённой задачи коммивояжёра.

Иллюстрация одномерной задачи раскроя

Бумагоделательная машина может производить неограниченное число рулонов (заготовок), каждая 5600 мм шириной. Нужно получить следующие 13 конечных рулонов:

Ширина Рулонов
1380 22
1520 25
1560 12
1710 14
1820 18
1880 18
1930 20
2000 10
2050 12
2100 14
2140 16
2150 18
2200 20

Решение

Решение с минимальными отходами, в котором минимизировано число смен ножей. Смена ножей показана маленькими зелёными кружочками

Имеется 308 возможных карт раскроя для этой маленькой задачи. Оптимальное решение требует 73 исходных рулона и имеет 0,401 % отходов. Можно показать, что минимальное число карт раскроя для такого количества отходов равно 10. Можно также вычислить, что существует 19 таких различных решений, каждое с 10 картами раскроя и 0,401 % отходов. Одно из таких решений показано ниже и на рисунке:

Число карт Разрезы
2 1820 + 1820 + 1820
3 1380 + 2150 + 1930
12 1380 + 2150 + 2050
7 1380 + 2100 + 2100
12 2200 + 1820 + 1560
8 2200 + 1520 + 1880
1 1520 + 1930 + 2150
16 1520 + 1930 + 2140
10 1710 + 2000 + 1880
2 1710 + 1710 + 2150
73

Классификация

Задачи раскроя можно классифицировать различными способами[9]. Один путь — размерность раскроя: выше приведённый пример иллюстрирует одномерный раскрой (1D). Другие промышленные применения 1D раскроя — резка труб, кабелей и стальных прутков. Двумерные (2D) задачи применяются при производстве мебели, одежды и стекла. Существует не так уж много трёхмерных (3D) применений раскроя, однако близкие 3D задачи упаковки[англ.]* имеют много промышленных приложений, в частности, распределение объектов в контейнеры для водного транспорта (смотрите, например, Контейнерные перевозки, близкая к ней задача упаковки шаров изучалась с 17-го столетия (Гипотеза Кеплера)).

Задача раскроя в бумажной, плёночной и сталепрокатной промышленностях

Промышленное применение задачи раскроя для предприятий с массовым выпуском продукции возникает, когда основной материал производится в больших рулонах, а затем режется на более мелкие части (см. слиттинг). Это происходит, например, в бумажном производстве и при получении полимерных плёнок, а также при изготовлении плоских металлических (железных или бронзовых) листов. Существует много вариантов и дополнительных ограничений, вызванных особенностями производства или ограничениями процесса, требованиями заказчиков и вопросами качества. Некоторые примеры:

  • Двустадийный процесс, когда рулон производится на первой стадии, а затем поступает в обработку ещё раз на другой машине. Например, вся офисная бумага (например, формат A4 в Европе, Letter в США) производится в таком процессе. Трудности появляются ввиду того, что машины для второго процесса уже машин первого. Эффективное использование обоих стадий процесса важно (как с точки зрения экономии материала, так и экономии энергии) и то, что эффективно для первой стадии может оказаться неэфективным для второй, и приходится искать компромисс. Металлизированная плёнка[англ.] (используемая для упаковки продуктов питания) и покрытая пластиком бумага (упаковочный картон для жидкостей[англ.], например, для упаковки соков) — другие примеры таких процессов.
  • Мотальные машины ограничивают разрезание физически или логически: общие ограничения возникают из того, что только определённое число ножей допустимо, так что карта раскроя не должна содержать ножей больше некоторой величины. Поскольку мотальные машины не стандартизованы, возникает много дополнительных ограничений.
  • В качестве дополнительного ограничения можно привести, например, ограничение на направление разрезания — различные края листа могут иметь большое различие в толщине и некоторые приложения очень чувствительны к этому.
  • В качестве примера влияния требований качества можно привести случай, когда основной рулон содержит дефекты, которые следует вырезать. Дорогие материалы с высокими требованиями к качеству материала, такие как фотобумага или тайвек, следует тщательно оптимизировать, чтобы минимизировать отходы.
  • Многомашинные задачи возникают, когда заказ можно произвести на более чем одной машине и эти машины имеют различную ширину. В основном, доступность нескольких исходных рулонов с различной шириной уменьшает количество отходов. На практике, однако, приходится учитывать дополнительный порядок разрезания.
  • Имеются также задачи, когда результирующие рулоны не обязательно должны быть одного диаметра, а могут быть в пределах некоторого интервала. Иногда эту задачу называют задачей 1½ размерности. Этот вариант появляется, например, при производстве гофрокартона.
  • В сталепрокатной промышленности отличительной особенностью является то, что исходные рулоны, в основном, различаются как по ширине, так и по длине. Таким образом, возникает схожесть с многомашинным вариантом, описанным выше. В этом случае отходы могут возникать как по ширине, так и по длине.

Программное обеспечение для решения задач раскроя для бумажной промышленности поставляют ABB Group, Greycon, Honeywell и Tieto.

Алгоритм раскроя для сталепрокатной промышленности сформулирован Робертом Гонгорра (Robert Gongorra) в 1998 году и S.O.N.S (Steel Optimization Nesting Software) разработал программное обеспечение для улучшения использования стального листа и уменьшения отходов.

Задача раскроя для стекольной промышленности

Задача гильотинного раскроя — это задача резки листов стекла на прямоугольники определённых размеров, используя только разрезы, проходящие по всей длине (или ширине) листа.

Задача ассортимента

Связанная задача определения (для одномерного случая) наилучшего размера исходного рулона, который удовлетворяет требованиям; известна как задача ассортимента[10].

История

Задача раскроя впервые сформулирована Канторовичем в 1939 году[11]. В 1951 году, ещё до того, как компьютеры стали широко доступны, Л. В. Канторович и В. А. Залгаллер предложили[12] способ решения задачи экономного использования материала при раскрое с помощью линейного программирования. Предложенная техника позднее получила название Метод генерации столбцов.

Программное обеспечение

Название Лицензия Короткое описание
VPSolver GPL Свободное программное обеспечение «Vector Packing Solver» (VPSolver), которое можно использовать для оптимизации одномерного раскроя. Метод решения основывается на формулировке потока в графе.

Примечания

  1. Key Statistics 2012. Confederation of Europear Paper Industries. Дата обращения: 3 июля 2013.
  2. P. C. Gilmore, R. E. Gomory. A linear programming approach to the cutting-stock problem // Operations Research. — 1961. — № 9. — С. 849—859.
  3. P. C. Gilmore, R. E. Gomory. A linear programming approach to the cutting-stock problem - Part II // Operations Research. — 1963. — № 11. — С. 863—888.
  4. C. Goulimis. Optimal solutions for the cutting stock problem // European Journal of Operational Research. — 1990. — № 44. — С. 197—208.
  5. V. de Carvalho. Exact solution of cutting stock problems using column generation and branch-and-bound // International Transactions in Operational Research. — 1998. — № 5. — С. 35—44.
  6. S. Umetani, M. Yagiura, and T. Ibaraki. One dimensional cutting stock problem to minimize the number of different patterns // European Journal of Operational Research. — 2003. — № 146. — С. 388—402.
  7. A. Diegel, E. Montocchio, E. Walters, S. van Schalkwyk and S. Naidoo. Setup minimizing conditions in the trim loss problem // European Journal of Operational Research. — 1996. — № 95. — С. 631—640.
  8. Maria Garcia de la Banda, P. J. Stuckey. ynamic Programming to Minimize the Maximum Number of Open Stacks // INFORMS Journal on Computing. — 3007. — Т. 19, № 4. — С. 607—617.
  9. G. Wäscher, H. Haußner, H. Schumann. An Improved Typology of Cutting and Packing Problems // European Journal of Operational Research. — Т. 183, № 3. — С. 1109—1130.
  10. Raffensperger John F. The generalized assortment and best cutting stock length problems // International Transactions in Operational Research. — 2010. — Январь (т. 17, № 1). — С. 35—49. — ISSN 0969-6016. — doi:10.1111/j.1475-3995.2009.00724.x. [исправить]
  11. Л. В. Канторович. Mathematical methods of organizing and planning production. — Leningrad State University.
  12. Канторович Л. В., Залгаллер В. А. Рациональный раскрой промышленных материалов. — Новосибирск: Наука, 1971.

Литература

  • Linear Programming. — W. H. Freeman, 1983. — ISBN 978-0-7167-1587-0.
  • Hatem Ben Amor, J.M. Valério de Carvalho. Column Generation // Cutting Stock Problems in Column Generation / Guy Desaulniers, Jacques Desrosiers and Marius M. Solomon. — Springer, 2005. — Т. XVI. — ISBN 0-387-25485-4.

Ссылки