|
|
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Вопрос собственно заключается в алгоритме точного линейного раскроя. Я реализовал пока эвристику. Т.е все заготовки сортируются по убыванию. Потом берется первый пруток (брусок, профиль и т.д) и на него укладывается макс. возможное кол-во самых длинных заготовок. Потом на отходе пробуем уложить другие детали меньших размеров и так до тех пор пока отход будет меньше самой короткой заготовки. После берем второй пруток. И снова начинаем с самой длинной детали, если конечно еще не удовлетворена ее комплектность и по той же схеме производим раскладку. Пока сделал вариант где размер раскраиваемых полос одинаковый и их кол-во "неограниченно". Например, нужно получить следующие заготовки из полосы длинной 4000мм: 698 мм 16 шт. 518 мм 16 шт. Раскрой по алгоритму получается следующий: 698x5 - 3 полосы 698+518х6 518х7 518х3 В результате уходит 6 полос материала. Кстати где то на форуме видел программу Optimize 1.05. Установил ее. Результат такой же. Мне кажется она работает на той же эвристике. Пробовал различные примеры все раскрои совпадают с моими. Если же этот пример решать с помощью линейного программирования то получится следующий раскрой: 698x2+518x5 - 2 полосы 698х4+518х2 - 3 полосы Т.е уходит не 6 а 5 полос. Но проблема в том что надо предварительно перечислять все варианты раскроя а если деталей много то уйдет очень много времени. Есть ли алгоритмы которые реализуют такой раскрой не без перечисления всех вариантов? Где то видел что применяется Метод Гомори + задача о рюкзаке+линейное программирование но в интернете что то ничего подходящего не нашел. И может быть еще есть какие то подобные алгоритмы которые решают задачу точно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 13:13 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Damir_85, посмотри может что-то и поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 14:42 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Не, ты хочешь решать NP-полную задачу без полного перебора? совесть есть? Единственное, что тут реально можно сделать - это просто оптимизировать поиск. Т.е. определить нижнюю границу результата, отсортировать данные (это ты сделал), и обрабатывать стандартным заполнением с обратным ходом и отсечением вариантов - чистая рекурсия с нефиксированной точкой возврата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 14:56 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Damir_85, Akina, с одной стороны как бы да, NP-полнота, но и полного перебора обычно не потребуется. Вопрос оптимального раскроя неплохо освещен в литературе, есть эвристики, позволяющие далеко уйти от полного перебора. Но гуглом попользоваться придется. Это не тот вопрос, с которым нужно выходить на форум, т.к. алгоритмы оптимального раскроя - это сотни и тысячи строк скучного рекурсивного кода. Если есть хорошая база высшей математики - здорово поможет. Но опять же - лучше начать со специализованнных ресурсов, посвященных алгоритмам. p.s. линейный раскрой сильно проще раскроя площадного. Тут вам повезло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 15:23 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
arni полного перебора обычно не потребуется. Вопрос оптимального раскроя неплохо освещен в литературе, есть эвристики, позволяющие далеко уйти от полного перебораЕрунда. Не путай поиск оптимального решения и поиск допустимого решения. Если ты посчитал, что надо, скажем, 46 заготовок, то, пока очередное наилучшее решение требует 47 штук или больше, ты считаешь, но как только ты нарыл один вариант с 46 штук ровно - всё, можешь тормозить и больше не считать. Или, например, нужно 10000 заготовок по минимуму, но тебя устроит любое решение на менее чем 10100 штук - опять же тормозишь, как только найдёшь такой вариант, даже если на самом деле есть лучше. Но вот если у тебя поставлена задача найти наилучшее решение (скажем, чтобы не только количество использованных заготовок было минимально, но и для минимального количества заготовок количество остатков максимальной длины было максимально) - хрен ты без порлного перебора дашь решение, хоть обложись эвристиками и генными алгоритмами сверху донизу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 17:18 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Damir_85 Где то видел что применяется Метод Гомори + задача о рюкзаке+линейное программирование Дискретная задача о рюкзаке как раз и есть пример NP-полной задачи, такой, видимо, как и твоя. NP -полные задачи решаются только перебором всех вариантов. Либо пишется жадный алгоритм, как ты написал, эвристика, но они не факт что дают оптимальное решение. Чтобы перейти на линейное программирование, тебе надо ещё сначала доказать, что твоя целевая функция линейна. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 18:48 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
MasterZivЧтобы перейти на линейное программирование, тебе надо ещё сначала доказать, что твоя целевая функция линейна. :-)Да это в чистом виде одномерный рюкзак! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 21:07 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Кстати в книге Бабаева Оптимальный раскрой с помощью ЭВМ нашел блок-схему в которой сначала решается задача с помощью двойственного симплекс-метода + задача о ранце. Как написано решение задачи основано на методе Гильмора и Гомори без составления всех исходных вариантов. Эта блок-схема приближенного целочисленного решения. И кстати как там написано вообще задачи раскроя чаще соответствуют нелинейному программированию и для них отстутствует строгий математический метод. Т.е я сделал такой вывод что, например, если материал который будет кроится дорогой и заготовок не так много то можно составить различные варианты раскроя и решить симпекс-методом чтобы сэкономить деньги на покупку материала ...ну а в остальных случаях применять эвристику) Кстати насколько сильно результаты эвристики могут отличаться от решения симплекс-методом? Ну допустим будем говорить об эвристике которую я в начале привел. Т.е зависит ли она скажем от кол-ва заготовок? (Т.е например если слишком много заготовок то результаты эвристики могуть быть плохими. ) Может кто применял эвристику на большом количестве данных..какие были результаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 20:14 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Damir_85 , 1 ваша задача не является NP сложной ( все бруски имеют одинаковую длину) 2 пример раскроя по первоначальной задаче ( 16 пар во вложении) для 16 пар 5 полос не получить никак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 20:52 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Valer, Длина раскраиваемой полосы 4000 мм 698x2+518x5 -2 полосы Отход с каждой полосы 14 мм Получаем 698 - 4 шт и 518 -10 шт 698х4+518х2 - 3 полосы Отход с каждой полосы 172 мм Получаем 698-12 шт 518-6 шт в сумме 698: 4+12=16 и 518: 10+6=16 шт Ушло 5 полос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2013, 17:04 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Valerзадача не является NP сложной ( все бруски имеют одинаковую длину)Не влияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2013, 17:56 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Уточняю, в задаче о раскрое ( рюкзаке с одинаковой стоимостью предметов) существует алгоритм по сложности const * N ( N число предметов) и перебор всех вариантов 2^N не нужен. например: в книге Эффективные алгоритмыи сложность вычислений Н. Н. Кузюрин С. А. Фомин стр 102-104 ( в PDF) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 15:10 |
|
||
|
Линейный раскрой
|
|||
|---|---|---|---|
|
#18+
Задачу линейного раскроя можно решать разными способами: 1. Полный перебор, как правило, не возможно реализовать в реальных условиях. 2. Самый эффективный способ - целочисленное линейное программирование. В качестве инструмента можно использовать Solver. Но здесь есть ряд ограничений - необходимо найти все варианты сложения исходных деталей, не превышающих размер заготовок (а вариантов может быть несколько тысяч или сотен тысяч). Ограничение Solver'a - 200 изменяемых ячеек. 3. "Жадный" алгоритм. У данного алгоритма есть вариации, основное достоинство - высокая скорость. Применим для быстрой оценки раскроя, либо когда скорость важнее оптимизации. 4. Решать как частный случай задачи о рюкзаке (сумма подмножеств) и выбор наилучшего варианта из имеющихся. 5. Генетический алгоритм и алгоритм муравьиной колонии. Ничего про эти алгоритмы сказать не могу, т.к. их не изучал. Реализовал собственный алгоритм линейного раскроя, который основан на решении задачи о рюкзаке методом целочисленного динамического программирования. Производится генерация различных вариантов раскроя в зависимости от сортировки исходных деталей и заготовок и выбор наилучшего решения. К достоинству можно отнести - достаточно эффективный результат по сравнению с "жадным" алгоритмом, а также при сравнении с результатом программ CuttingLine и Optimize. Примеры получаемых раскроев можно посмотреть здесь: https://yadi.sk/d/B_fg089lhsMk4 Если будет заинтересованность в алгоритме, то можете обратиться ко мне в личку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2015, 00:38 |
|
||
|
|

start [/forum/topic.php?fid=16&gotonew=1&tid=1340971]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
138ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 446ms |

| 0 / 0 |
