Проблема промышленного разделения
-
05-07-2019 - |
Вопрос
Речь идет о заводе металлопродукции. Существует машина, которая разрезает длинные железные прутки на более мелкие детали, которые впоследствии используются для создания различных продуктов.
Например, у меня есть требование производить бары следующей длины и количества: 2 шт. 248 мм, 5 из 1150мм, 6 из 2843 мм, 3 из 3621мм. Р>
Это вывод разделов. Р>
На входной стороне у меня есть (опять например) 3 бара по 2500мм, 2 бара по 5000мм, 6 прутков 8000 мм и 3 бара по 10000мм. Р>
Я должен найти способ оптимальной обрезки входных полос - остальные (оставшиеся детали, которые слишком малы для использования) после резки должны быть как можно меньше.
Я создал алгоритм, который просто создает все возможные комбинации, а затем выбирает лучшую из них. Код работает, но как только ввод и вывод становятся немного больше, вычисления могут длиться очень долго, поэтому я должен найти новый подход к проблеме. Р>
У вас есть какие-нибудь подсказки?
Решение
Ваша проблема - довольно распространенная проблема в исследовании операций. смотреть на Проблема режущего материала . Эта проблема по сути NP-сложная, как вы уже поняли самостоятельно. Это не очень хорошо масштабируется. Р>
Как это решить? После того, как вы сможете выяснить модель, было бы лучше назвать какой-нибудь смешанный целочисленный программный решатель. Ранее я использовал LPSolve 5.5
Могут быть более простые алгоритмы, которые вы могли бы написать, в частности, для решения этой проблемы. Проблема с этими алгоритмами обычно возникает, когда вам нужно добавить некоторые побочные ограничения, о которых авторы не думали. MIP Solver - более универсальный инструмент.
Другие советы
Это называется проблемой упаковки бинов переменного размера . Это сложный NP, а это означает, что ваше решение неизменно будет терпеть неудачу при большом входе. Эта статья, здесь , к которой, к сожалению, у меня тоже нет доступа, адресована эта проблема и использует металлорежущую промышленность в качестве примера.
Линейное программирование - твой друг. См. http://en.wikipedia.org/wiki/Linear_programming в целом и, в частности, , http://en.wikipedia.org/wiki/Linear_programming#Uses , < a href = "http://en.wikipedia.org/wiki/Linear_programming#Algorithms" rel = "nofollow noreferrer"> http://en.wikipedia.org/wiki/Linear_programming#Algorithms .
Похоже, что это похоже на проблему с рюкзаком (знаю, что это действительно противно). Мне было проще найти ее в NIST DADS (удобный справочник), чем в ACM для не членов Упаковка бинов