Ответ 1
Это классическая, сложная проблема для эффективного решения. Алгоритм, который вы описываете, звучит как Жадный алгоритм. Взгляните на эту статью в Википедии за дополнительной информацией: Проблема разрезания
Я работаю над проектом, где я создаю список разрезания алюминиевой экструзии.
Алюминиевые экструзии имеют длину 5 м.
У меня есть список меньших длин, которые нужно вырезать из 5-миллиметровой длины алюминиевых профилей.
Меньшие длины должны быть разрезаны в порядке, при котором образуется наименьшее количество отработанных отходов с 5-миллиметровой длины алюминиевых профилей.
В настоящее время я заказываю список резки таким образом, что в большинстве случаев самая длинная из меньших длин разрезается первой, а самая короткая из меньших длин уменьшается. Исключением из этого правила является всякий раз, когда более короткая длина не будет соответствовать тому, что осталось от алюминиевой экструзии длиной 5 м, я использую самую длинную более короткую длину, которая будет соответствовать.
Это, по-видимому, создает очень эффективный (очень маленький отрезной отрезной) список сокращений и не требует много времени для расчета. Я полагаю, однако, что хотя режущий список эффективен очень, он не обязательно эффективен наиболее.
Кто-нибудь знает способ расчета наиболее эффективного списка реза, который может быть рассчитан за разумный промежуток времени?
EDIT: Спасибо за ответы, я продолжу использовать "жадный" подход, поскольку он, кажется, делает очень хорошую работу (из-за каких-либо попыток человека создать эффективный список реза) и очень быстро.
Это классическая, сложная проблема для эффективного решения. Алгоритм, который вы описываете, звучит как Жадный алгоритм. Взгляните на эту статью в Википедии за дополнительной информацией: Проблема разрезания
Никаких конкретных идей по этой проблеме, я боюсь, но вы могли бы заглянуть в " генетический алгоритм '(что бы было что-то как это)...
Поместите длины, чтобы вырезать случайный порядок, и дайте этому ордену оценку, основанную на хорошем совпадении с вашим идеальным решением (0% отходов, предположительно).
Затем, итеративно производите произвольные изменения в порядке и заново оценивайте их. Если оценка выше, сравните результат. Если оценка ниже, сохраните ее и используйте ее в качестве основы для следующего расчета. Продолжайте, пока вы не получите свой счет в допустимых пределах.
То, что вы описали, действительно классифицировано как проблема Cutting Stock, поскольку Wheelie, а не проблема Bin Packing, потому что вы пытаетесь минимизировать количество отходов (сумма остатков), а не количество используемых экструзий.
Обе эти проблемы могут быть очень трудными для решения, но алгоритм "наилучшего соответствия", который вы упомянули (с использованием самой длинной "малой длины", которая соответствует текущему экструзии), скорее всего, даст вам очень хорошие ответы с очень низкой сложностью.
Собственно, поскольку размер материала фиксирован, но запросы не являются, это проблема упаковки корзины.
Опять же, википедия на помощь!
(Что-то мне, возможно, придется заглянуть в работу тоже, так что!)
Это интересная проблема, потому что я полагаю, она зависит от количества каждой длины, которую вы производите. Если они имеют одинаковое количество, и вы можете получить каждую разную длину на одну экструзию 5 м, тогда у вас есть оптимальное решение.
Однако, если они не все подходят для одного экструзии, тогда у вас есть большая проблема. Чтобы сохранить одинаковое количество разрезов для каждой длины, вам нужно рассчитать, сколько длин (не обязательно в порядке) может поместиться на одном экструдере, а затем выполнить порядок через каждый экструдер.
Я боролся с этой точной (проблема с моей проблемой - 6 м) здесь тоже.
Решение, над которым я работаю, немного уродливое, но я не согласен с вашим решением. Позвольте мне объяснить:
Размер запаса 5 м
Требуется разрезать размеры (по 1):
** 3,5
1
1,5 **
Ваше решение:
3,5 | 1 с отходами 0,5
1,5 с остатком 3,5
См. проблему?
Решение, над которым я работаю → Грубая сила
1 - Проверить все возможные решения
2 - Закажите раствор с помощью их отходов
3 - Выберите лучшее решение
4 - Удалите элементы в решении из "Вселенной"
5 - Перейти к 1
Я знаю, что это занимает много времени (но я беру 1х30 м на обед... так...:))
Мне действительно нужно оптимальное решение (я использую оптимальное решение almoust вручную (+ -) в excel) не только потому, что я обследую, но и не дешево.
Если у кого-то есть легкое лучшее решение, мне бы это понравилось