powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Линейный раскрой
13 сообщений из 13, страница 1 из 1
Линейный раскрой
    #38484364
Damir_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Вопрос собственно заключается в алгоритме точного линейного раскроя.
Я реализовал пока эвристику. Т.е все заготовки сортируются по убыванию. Потом берется первый пруток (брусок, профиль и т.д) и на него укладывается макс. возможное кол-во самых длинных заготовок. Потом на отходе пробуем уложить другие детали меньших размеров и так до тех пор пока отход будет меньше самой короткой заготовки. После берем второй пруток. И снова начинаем с самой длинной детали, если конечно еще не удовлетворена ее комплектность и по той же схеме производим раскладку. Пока сделал вариант где размер раскраиваемых полос одинаковый и их кол-во "неограниченно".
Например, нужно получить следующие заготовки из полосы длинной 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 полос. Но проблема в том что надо предварительно перечислять все варианты раскроя а если деталей много то уйдет очень много времени. Есть ли алгоритмы которые реализуют такой раскрой не без перечисления всех вариантов? Где то видел что применяется Метод Гомори + задача о рюкзаке+линейное программирование но в интернете что то ничего подходящего не нашел. И может быть еще есть какие то подобные алгоритмы которые решают задачу точно?
...
Рейтинг: 0 / 0
Линейный раскрой
    #38486014
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Линейный раскрой
    #38486031
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ты хочешь решать NP-полную задачу без полного перебора? совесть есть?

Единственное, что тут реально можно сделать - это просто оптимизировать поиск. Т.е. определить нижнюю границу результата, отсортировать данные (это ты сделал), и обрабатывать стандартным заполнением с обратным ходом и отсечением вариантов - чистая рекурсия с нефиксированной точкой возврата.
...
Рейтинг: 0 / 0
Линейный раскрой
    #38486063
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damir_85, Akina,

с одной стороны как бы да, NP-полнота, но и полного перебора обычно не потребуется. Вопрос оптимального раскроя неплохо освещен в литературе, есть эвристики, позволяющие далеко уйти от полного перебора. Но гуглом попользоваться придется. Это не тот вопрос, с которым нужно выходить на форум, т.к. алгоритмы оптимального раскроя - это сотни и тысячи строк скучного рекурсивного кода. Если есть хорошая база высшей математики - здорово поможет. Но опять же - лучше начать со специализованнных ресурсов, посвященных алгоритмам.

p.s. линейный раскрой сильно проще раскроя площадного. Тут вам повезло.
...
Рейтинг: 0 / 0
Линейный раскрой
    #38486270
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni полного перебора обычно не потребуется. Вопрос оптимального раскроя неплохо освещен в литературе, есть эвристики, позволяющие далеко уйти от полного перебораЕрунда. Не путай поиск оптимального решения и поиск допустимого решения.

Если ты посчитал, что надо, скажем, 46 заготовок, то, пока очередное наилучшее решение требует 47 штук или больше, ты считаешь, но как только ты нарыл один вариант с 46 штук ровно - всё, можешь тормозить и больше не считать. Или, например, нужно 10000 заготовок по минимуму, но тебя устроит любое решение на менее чем 10100 штук - опять же тормозишь, как только найдёшь такой вариант, даже если на самом деле есть лучше.

Но вот если у тебя поставлена задача найти наилучшее решение (скажем, чтобы не только количество использованных заготовок было минимально, но и для минимального количества заготовок количество остатков максимальной длины было максимально) - хрен ты без порлного перебора дашь решение, хоть обложись эвристиками и генными алгоритмами сверху донизу.
...
Рейтинг: 0 / 0
Линейный раскрой
    #38486454
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damir_85 Где то видел что применяется Метод Гомори + задача о рюкзаке+линейное программирование

Дискретная задача о рюкзаке как раз и есть пример NP-полной задачи, такой, видимо, как и твоя.
NP -полные задачи решаются только перебором всех вариантов. Либо пишется жадный алгоритм, как ты написал, эвристика, но они не факт что дают оптимальное решение.

Чтобы перейти на линейное программирование, тебе надо ещё сначала доказать, что твоя целевая функция линейна. :-)
...
Рейтинг: 0 / 0
Линейный раскрой
    #38486635
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЧтобы перейти на линейное программирование, тебе надо ещё сначала доказать, что твоя целевая функция линейна. :-)Да это в чистом виде одномерный рюкзак!
...
Рейтинг: 0 / 0
Линейный раскрой
    #38488004
Damir_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати в книге Бабаева Оптимальный раскрой с помощью ЭВМ нашел блок-схему в которой сначала решается задача с помощью двойственного симплекс-метода + задача о ранце. Как написано решение задачи основано на методе Гильмора и Гомори без составления всех исходных вариантов. Эта блок-схема приближенного целочисленного решения. И кстати как там написано вообще задачи раскроя чаще соответствуют нелинейному программированию и для них отстутствует строгий математический метод. Т.е я сделал такой вывод что, например, если материал который будет кроится дорогой и заготовок не так много то можно составить различные варианты раскроя и решить симпекс-методом чтобы сэкономить деньги на покупку материала ...ну а в остальных случаях применять эвристику)
Кстати насколько сильно результаты эвристики могут отличаться от решения симплекс-методом? Ну допустим будем говорить об эвристике которую я в начале привел. Т.е зависит ли она скажем от кол-ва заготовок? (Т.е например если слишком много заготовок то результаты эвристики могуть быть плохими. ) Может кто применял эвристику на большом количестве данных..какие были результаты?
...
Рейтинг: 0 / 0
Линейный раскрой
    #38489571
Valer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damir_85 ,
1 ваша задача не является NP сложной ( все бруски имеют одинаковую длину)
2 пример раскроя по первоначальной задаче ( 16 пар во вложении)
для 16 пар 5 полос не получить никак
...
Рейтинг: 0 / 0
Линейный раскрой
    #38490694
Damir_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 полос
...
Рейтинг: 0 / 0
Линейный раскрой
    #38490820
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valerзадача не является NP сложной ( все бруски имеют одинаковую длину)Не влияет.
...
Рейтинг: 0 / 0
Линейный раскрой
    #38500178
Valer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточняю, в задаче о раскрое ( рюкзаке с одинаковой стоимостью предметов)
существует алгоритм по сложности const * N ( N число предметов)
и перебор всех вариантов 2^N не нужен.
например: в книге Эффективные алгоритмыи сложность вычислений
Н. Н. Кузюрин С. А. Фомин стр 102-104 ( в PDF)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Линейный раскрой
    #39007423
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задачу линейного раскроя можно решать разными способами:
1. Полный перебор, как правило, не возможно реализовать в реальных условиях.
2. Самый эффективный способ - целочисленное линейное программирование. В качестве инструмента можно использовать Solver.
Но здесь есть ряд ограничений - необходимо найти все варианты сложения исходных деталей, не превышающих размер заготовок (а вариантов может быть несколько тысяч или сотен тысяч). Ограничение Solver'a - 200 изменяемых ячеек.
3. "Жадный" алгоритм. У данного алгоритма есть вариации, основное достоинство - высокая скорость. Применим для быстрой оценки раскроя, либо когда скорость важнее оптимизации.
4. Решать как частный случай задачи о рюкзаке (сумма подмножеств) и выбор наилучшего варианта из имеющихся.
5. Генетический алгоритм и алгоритм муравьиной колонии. Ничего про эти алгоритмы сказать не могу, т.к. их не изучал.

Реализовал собственный алгоритм линейного раскроя, который основан на решении задачи о рюкзаке методом целочисленного динамического программирования. Производится генерация различных вариантов раскроя в зависимости от сортировки исходных деталей и заготовок и выбор наилучшего решения.
К достоинству можно отнести - достаточно эффективный результат по сравнению с "жадным" алгоритмом, а также при сравнении с результатом программ CuttingLine и Optimize.

Примеры получаемых раскроев можно посмотреть здесь: https://yadi.sk/d/B_fg089lhsMk4
Если будет заинтересованность в алгоритме, то можете обратиться ко мне в личку.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Линейный раскрой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]