Раскрой в excel двумерный

Тема является продолжением линейного раскроя и задачи о рюкзаке
Задачу двумерной упаковки в полуограниченную полосу (2-Dimensional Strip Packing, 2DSP) можно сформулировать так:
Имеем набор из N прямоугольников и полуограниченный контейнер-стакан с фиксированной шириной W и бесконечной высотой. Каждый прямоугольник по ширине не превышает W. Задача — уложить прямоугольники в стакан без наложений и пересечений так, чтобы стакан стал как можно менее полон.
Подробное описание задачи и варианты жадных алгоритмов есть здесь

Мной реализован совершенно другой алгоритм, основанный на линейном программировании
В отличие от условий в статье на habr прямоугольники можно поворачивать на 90 градусов (либо отключать эту возможность)

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

Применяется гильотинный раскрой, т.е. от края до края, так режется, например, стекло.
При этом алгоритм не предназначен для раскроя листового материала, когда заданы размеры листов и нужно раскроить все прямоугольники используя наименьшее количество листов (ДСП или стекло), только для полуограниченной полосы
Ширина реза не используется, при резке стекла или пленки ширина реза равна нулю (но если очень нужно использовать ширину реза, то ее можно добавить к размерам прямоугольников).

Примеры получаемых раскроев во вложении
Рабочую программу можно скачать здесь: https://disk.yandex.ru/d/-ZbzYEJ2kdPLag
Файл cbc.exe должен находится вместе с файлом xls, в одной папке
Сложные примеры алгоритм может очень долго считать, нужно указывать ограничения (количество различных элементов в ряду и др.)

Цитата
Maks802 написал:
Уважаемые професионалы помогите теперь разобратся
двухмерный раскрой и линейным раскроем
что ето такое и с чем его едят

Двухмерный раскрой, это то, что Вы описали в первом посте, есть прямоугольник из него нужно вырезать много других прямоугольников.
При этом есть различии: нужны прямоугольники или криволинейные фигуры, можно ли вращать фигуры? прямоугольники тоже о разному кроятся — стекло и ДСП.
Стекло раскраивается гильотинным раскроем (от края до края), ДСП — можно по другому.
Отношение к ширине реза, кромкам и отступам по разному учитывается при раскрое стекла и ДСП

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

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

Если Вам нужно линейный раскрой, например раскроить оконный профиль, то смогу помочь.
По двухмерному раскрою у меня эффективного алгоритма нет.

Опубликовано 11 Июн 2019
Рубрика: Справочник Excel | 14 комментариев

Значок Честный распил!Достаточно функциональную программу для решения задач экономного линейного раскроя погонажных материалов можно создать самостоятельно и абсолютно бесплатно, используя исключительно встроенные функции и штатную надстройку «Решатель» программы Calc…

…из свободно распространяемого офисного пакета  LibreOffice. При этом ни к созданию макросов, ни к написанию пользовательских функций, ни к программированию вообще обращаться нет необходимости!

«Решатель» Calc — это NLPSolver (wiki.openoffice.org/wiki/NLPSolver).

Предложенное далее решение прекрасно работает и в Calc, и в Excel. Причем даже переписывать формулы не нужно! Достаточно просто скопировать ячейки с формулами и данными и вставить на лист Excel, а вместо «Решателя» использовать надстройку «Поиск решения» — Excel Solver (solver.com/excel-solver-online-help) или лучше – надстройку OpenSolver (opensolver.org).

И все-таки – почему в данном случае стоит попробовать использовать не Excel, а Calc?

  • Во-первых (и это важно), в «Решателе» Calc нет ограничения по количеству переменных. В Excel «Поиск решения» может принять для поиска оптимального раскройного плана только 200 схем раскроев. (Но, если скачать и в Excel подключить OpenSolver, то получите еще более широкие возможности, чем в LibreOffice Calc!)
  • Во-вторых, интерфейс «Решателя» — на русском языке. Интерфейс OpenSolver — на английском языке.
  • В-третьих, в «Решателе» Calc представлены 5 различных алгоритмов поиска решения. В Excel без надстройки OpenSolver набор алгоритмов скромнее.
  • В-четвертых, LibreOffice Calc, в отличие от MS Excel, бесплатен для коммерческого использования.
  • В-пятых, LibreOffice Calc не обязательно устанавливать на компьютер. На официальном сайте можно скачать полнофункциональную версию — LibreOffice Portable (libreoffice.org/download/portable-versions/).

Структура задачи и терминология.

Данная тема уже была подробно рассмотрена на блоге в статье «Линейный раскрой в Excel» 4 года назад. Вновь обратиться к ней побудило желание автоматизировать генерацию схем раскроев и сравнить результаты работы «Решателя» и OpenSolver.

Полную «задачу о распиле» можно разделить на две значительные подзадачи:

  1. Генерация всех возможных схем раскроев.
  2. Поиск на основе сгенерированных схем оптимального раскройного плана.

Первая подзадача в статье «Линейный раскрой в Excel» решалась методом составления схем раскроев «вручную» по определенному алгоритму.

Вторая подзадача решалась автоматически с использованием надстройки Excel «Поиск решения» (Excel Solver).

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

Поиск плана раскроя осуществим тремя способами:

  1. В LibreOffice Calc с помощью «Решателя» (NLPSolver).
  2. В MS Office Excel посредством штатного «Поиска решения» (Excel Solver).
  3. В MS Office Excel при помощи надстройки OpenSolver.

 Определимся с терминологией и ограничениями:

  1. Заготовки – это исходный материал в виде рулонов, прутков, полос, стержней и т.д. одинаковой длины.
  2. Детали – это элементы, которые необходимо получить, разрезав исходные заготовки на части.
  3. Схема раскроя – один из вариантов раскроя заготовки, при котором длина отхода всегда меньше длины самой короткой детали.
  4. План раскроя – это перечень схем раскроя с количеством их повторений.
  5. *Ширина реза равна нулю.

Пример.

Таблица Рулоны - деталиИсходные данные для примера я и в этот раз придумывать не стал, а взял из статьи «Задача раскроя» в Википедии (ru.wikipedia.org/wiki/Задача_раскроя).

Условие задачи:

Бумагоделательная машина производит рулоны (заготовки) шириной 5600 мм.

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

Ширины конечных рулонов (размеры деталей) и их необходимое количество — в таблице слева.

Скриншот программы:

Область для генерации схем раскроев имеет размер 13×213 ячеек, что обусловлено исключительно условиями этой конкретной задачи, и может быть изменена и в ширину и в высоту в сторону увеличения или уменьшения по желанию пользователя с соответствующей корректировкой формул.

К сожалению, качественно показать на скриншоте всю область программы для раскроя затруднительно. Скачайте файлы по ссылке под рисунком для детального просмотра листов Calc и Excel с программами.

В ячейках с желтой заливкой – не защищенные от изменений формулы!!! Будьте внимательны! Изменять значения можно только в ячейках со светло-бирюзовой заливкой.

Скриншот Программа для раскроя в Calc

Прошу уважающих труд автора скачать файлы с программой после подписки на анонсы статей. Подписные окна расположены в конце статьи и наверху страницы.

Ссылки на скачивание файлов с программой:

  • linejnyj-raskroj-2 (ods 106,4KB);
  • linejnyj-raskroj-2 (xlsx 60,3KB).

Правила ввода исходных данных:

В светло-бирюзовые ячейки записываем исходные данные из условия задачи:

  • длину исходных рулонов – заготовок — ;
  • длины конечных рулонов – деталей — i;
  • количество конечных рулонов – деталей — i.

Длины деталей i следует вписывать в порядке уменьшения размеров, слева – направо:

1 > 2  > 3 > … > 12 > 13

Внимание! Если типоразмеров деталей в другой вашей задаче будет меньше 13, например 10, то, чтобы не переделывать каждый раз поле схем раскроев, в первые 3 ячейки для длин деталей следует записать значения больше размера заготовки, а их количество указать равным нулю:

1 = 2 = 3 = А

А >

1= 2= 3=0

Решение:

После ввода всех исходных данных программа для раскроя автоматически сгенерирует 213 схем, решив, таким образом, первую подзадачу.

Действия пользователя при решении второй подзадачи – поиск оптимального плана раскроя — подробно описаны в статье о линейном раскрое в Excel. Эти действия полностью идентичны при работе со всеми тремя вышеназванными надстройками. Повторять их здесь нет смысла, так как, перейдя по ссылке, можно получить подробную, развернутую инструкцию.

Единственное, что следует дополнительно настроить:

  • Из окна «Решателя» нужно перейти в окно «Параметры» и выбрать в выпадающем списке «Механизма решателя»: LibreOffice CoinMP линейный решатель.
  • Там же в окне «Настройки» рекомендую проставить все галочки, так как переменные у нас в примере неотрицательные и целочисленные.

Ответ:

Минимум из 73 заготовок (исходных рулонов) можно изготовить все детали (конечные рулоны) с долей отходов всего 0,401%! В плане раскроя используется 12 схем раскроев. Время поиска решения – менее 10 секунд! (План раскроя показан выше на скриншоте программы.)

Ответ в Википедии: 73 заготовки; 0,401% отходов; в плане – 10 схем раскроев.

Итоги.

Существует несколько решений — планов раскроя с 13, 12, 11, 10 схемами раскроев, состоящих из 73 заготовок.

В таблице ниже представлены решения, найденные с использованием разных программ и надстроек. При расчетах в Excel и Calc использовались линейные механизмы поиска.

Таблица Excel Количество заготовок по планам и раскроям

Все программы справились с поставленной задачей – нашли раскройные планы, обеспечивающие минимальное количество отходов.

Для обеспечения работоспособности стандартного «Поиска решения» (Excel Solver) в Excel пришлось удалить из поиска 13 схем раскроев с большими длинами остатков.

Если для этой задачи применить прямолинейный «жадный» алгоритм, традиционно используемый на многих производствах (сначала режем широкие рулоны, а узкие – в конце, используя по возможности отходы), то потребуется 82 исходных рулона-заготовки. Более 11,3% материала уйдет в отходы. При этом в плане будет 15 схем раскроев.

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

Не используя специальных программ с помощью свободной программы LibreOffice Calc или MS Excel можно эффективно решать весьма громоздкие задачи по линейному раскрою погонажных материалов.

Возможности программы для раскроя можно существенно расширить под соответствующие задачи, увеличив количество типоразмеров деталей и пространство для схем раскроя. Ограничивающими факторами расширения являются только размеры листа программы Calc или Excel, производительность процессора  и … здравый смысл.

Другие статьи автора блога

На главную

Статьи с близкой тематикой

Отзывы

Библиографическое описание:


Каюгина, С. М. Решение задач оптимального раскроя средствами MS Excel / С. М. Каюгина. — Текст : непосредственный // Молодой ученый. — 2016. — № 23 (127). — С. 54-57. — URL: https://moluch.ru/archive/127/35159/ (дата обращения: 17.04.2023).



В статье рассматривается методика решения задачи оптимального раскроя материалов на заготовки средствами MSExcel.

Ключевые слова: математическая модель, критерий оптимальности, рациональный способ раскроя

Большинство материалов, используемых в промышленности, поступает на производство в виде стандартных форм. Непосредственное использование таких материалов, как правило, невозможно. Предварительно их разделяют на заготовки необходимых размеров. Это можно сделать, используя различные способы раскроя материала.

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

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

Рассмотрим методику решения задачи раскроя листовых материалов средствами MSExcel.

Пример. На предприятии имеются древесностружечные плиты (ДСтП) нескольких форматов, приведенные в таблице 1. Спецификация заготовок приведена в таблице 2. Требуется составить оптимальный план раскроя плит ДСтП на заготовки по критерию минимума отходов, при условии выполнения заданной спецификации заготовок.

Таблица 1

Спецификация плит ДСтП

п/п

Формат плиты, ммхмм

Количество плит, шт.

1

2440×1220

6000

2

1525×1525

8000

Таблица 2

Спецификация заготовок

п/п

Формат плиты, ммхмм

Количество заготовок на годовую программу, шт.

1

1000×600

12000

2

800×600

12000

3

600×600

18000

4

300×450

12000

5

300×300

24000

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

При разработке карт раскроя требуется соблюдать следующие условия:

− максимальный выход деталей;

− минимальное количество типоразмеров деталей при раскрое одного формата любого материала;

− минимальное повторение одних и тех же деталей в разных картах раскроя;

− обеспечение минимума отходов [2, c. 49].

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

Таблица 3

Расчет количества заготовок

Размер заготовки

Количество заготовок, получаемых по карте раскроя, шт.

Плита 2440×1220

Плита 1525×1525

1

2

3

4

5

6

1000×600

4

2

800×600

4

2

600×600

8

2

300×450

5

6

5

300×300

15

Площадь отходов, м2

0,577

0,382

0,097

0,166

0,586

0,646

На втором этапе решается задача линейного программирования для определения интенсивности использования рациональных способов раскроя.

Составим математическую модель оптимизации.

В качестве неизвестных примем Хj количество плит раскраиваемых j-м способом.

Целевая функция (минимум отходов):

F=0,577Х1+0,382Х2+0,097Х3+0,166Х4+0,586Х5+0,646Х6min

Система ограничений:

  1. по выпуску заготовок:

1+2Х5=12000

2+2Х6=12000

3+2Х6=18000

2+6Х4+5X5=12000

15Х4=24000

  1. по запасам сырья:

Х123<=6000

Х456<=8000

  1. по неотрицательности переменных:

Х1,…, Х6>=0

Симплекс-метод, основанный на идеях Л. В. Канторовича, был описан и детально разработан рядом ученых из США в середине 20 века. Надстройка MS Excel «Поиск решения» (Solver) использует этот алгоритм. Именно с помощью симплекс-метода и MS Excel мы будем решать задачу оптимального раскроя [3].

Оформим в MSExcel таблицу с исходными данными и введём формулы (рис.1):

Рис. 1. Оформление таблицы с исходными данными в MSExcel

На вкладке «Данные» нажимаем кнопку «Поиск решения». Откроется диалоговое окно «Поиск решения», в котором указываем ячейку целевой функции, её направление, изменяемые ячейки и задаём ограничения задачи (рис. 2).

Рис. 2. Диалоговое окно «Поиск решения»

Щелчком по кнопке «Параметры» заходим в диалоговое окно «Параметры поиска решения» и устанавливаем флажок «Линейная модель». Нажимаем ОК. Выполняем поиск решения.

Рис. 3. Результат решения

На рисунке 3 показан оптимальный план раскроя. Следует раскроить древесностружечные плиты размера 2440х1220 первым способом 3000 шт., вторым способом 480 шт. и третьим способом 990 шт. Всего плит данного размера потребуется 4470 шт.

Древесностружечные плиты размера 1525х1525 следует раскроить четвертым способом 1600 шт. и шестым способом 5040 шт. Пятую карту раскроя использовать нерационально. Всего плит этого размера потребуется 6640 шт.

Полученный в оптимальном решении вариант использования карт раскроя плит обеспечит выполнение плана по выходу заготовок всех размеров. Отходы будут минимальными и составят 5531,83 м2.

Литература:

  1. Пижурин А. А. Основы моделирования и оптимизации процессов деревообработки / А. А. Пижурин. — М.: Лесная промышленность, 2004.
  2. Яцун И. В., Чернышев О. Н. Моделирование и оптимизация процессов деревообработки. Часть 1. — Екатеринбург: Редакционно-издательский отдел УГЛТУ, 2011.
  3. Линейный раскрой в Excel [Электронный ресурс] — Режим доступа: http://al-vo.ru/spravochnik-excel/linejnyj-raskroj-v-excel.html

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

Вопрос.
Стоит задача (очень насущная и трудоемкая — приходится постоянно выполнять) по раскрою линейного профиля материала (брус, прут, труба). Раскрой требуется выполнять с максимальной экономией материала (деловой отход также учитывается и идет в дело при раскрое). Алгоритм раскроя известен. Вот только очень трудоемко выполнять эту задачу, особенно, если попадается большой набор материала разной длины. Как я понимаю, задача чисто арифметическая — перебор значений для максимального заполнения всей длины заготовки. Возможно ли ее решить силами самого Excel? Или для этой задачи требуются ресурсы языка программирования (наподобие Visual Basic)?

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

Перерыл весь Инет. Имеются готовые программы подобного рода, но все имеют один (или несколько недостатков) или работают ужасно. (Например, одна из них (RealCut) выполнила мою задачу — заготовки с обоими косыми углами разной величины нужно было накроить из материала — неправильно. Вывела результатом работы раскрой, где сочетание возможное равных углов заготовок не было учтено вообще, что привело к неэкономии материала. Переделал все вручную с гораздо большей экономией. Хотя в программе имеется инструмент для задания углов заготовки.) Все это делает их непригодными для моих конкретных условий.

Насколько понял из прочтений материалов на программистких форумах, задача из разряда линейного программирования и давно решена. Вот только решений не нашел готовых. А сам, своими силами программировать я не смогу — не хватает знаний и времени для восполнения этих знаний.

Подскажите, кто что знает по этому вопросу. Помощь очень нужна!


Да, задачка непростая. Сталкивался с ней, но уже давно. Подзабыл. У нас было несколько тем по раскрою. Введите в поисковое окошко слово «раскрой».


Поиск по ключевому слову «раскрой» результатов не дал. Скачал архив форума (до 2008 года) — результат аналогичный. Жалко…


Цитата: tomeo от 29.10.2010, 23:47
Поиск по ключевому слову «раскрой» результатов не дал. Скачал архив форума (до 2008 года) — результат аналогичный. Жалко…

Ну как же, я ведь проверил, прежде чем посоветовать. Конечно, полностью готового решения для excel, кажется, нет, но очень много аналогичных задач и есть ссылка на платную, но недорогую, программку. Вот, что я в течение пяти минут нашел на сайте:
http://www.cutting.com.ua/
https://forum.msexcel.ru/microsoft_excel/karta_raskroya-t1320.0.html
https://forum.msexcel.ru/microsoft_excel/summirovanie_znacheniy_kolonki_na_predmet_poiska_summy_chisel_ravnoy_x-t977.0.html
https://forum.msexcel.ru/microsoft_excel/vybrat_iz_stolbtsa_s_chislami_v_summe_maksimalno_priblizhennoe_k_zadannomu_chislu-t967.0.html
https://forum.msexcel.ru/microsoft_excel/nebolshie_problemmy_s_filtrom-t2463.0.html


Спасибо за ссылки! (Вечно я тороплюсь…) Изучу их детально. Предмет нужный для меня.


#5




31.10.2010, 00:24

Последнее редактирование: 31.10.2010, 00:27 от Алексей Шмуйлович

tomeo, я из спортивного интереса написал небольшую программку для раскроя. Сразу оговорюсь — я математического алгоритма оптимизации для этой задачи не знаю, поэтому действовал наобум. Но результат меня устроил. Я постарался набор условных данных сделать максимально правдоподобным. В свое время я работал на производстве пластиковых окон. У нас отходы профиля доходили до 10-15 %. Итак я имитировал набор заготовок (около 2,5 тыс. шт) двух типоразмеров 700 +/- 100 мм — порядка 65% и 1400 +/- 100 мм — остальное. Это распределение привязано к среднестатистическому окну 1400 х 1400. Деловыми остатками считал остатки от 500 мм включительно. Процент отходов по моему алгоритму получается 1-3 %. Но нужно еще учитывать, что деловые остатки по длине вряд ли имеют нормальное распределение. По опыту, коротышки накапливаются гораздо быстрее, чем их удается использовать, так что приходится периодически устраивать чистку завалов. Отсюда реальный процент отходов гораздо выше.
И еще я не уверен, что время на поштучный учет деловых остатков не окажется дороже, чем сэкономленный профиль :). Мы его так и не внедрили, хотя пытались (нас аудиторы и всякие проверяльщики на это пытались вынудить).

Итак, мой доморощенный алгоритм:
1. Вводим в таблицу номера всех заготовок в порядке убывания длины.
2. Для каждой заготовки, начиная с самой длинной, выбираем в таблице складских остатков самую короткую заготовку, из которой можно вырезать деталь.
3. Записываем сочетание в карту раскроя и уменьшаем длину складской заготовки на длину отрезанной детали.

Собственно все.

Прикладываю файл. Заполняйте два листа — Детали и Остатки и нажимайте кнопку Раскроить на листе Детали. По результатам откроется лист Карта раскроя, а состояние склада после раскроя можно найти на листе Остатки после раскроя.

Вы писали, что алгоритм раскроя известен. Если Вы опишите его, мне будет интересно попробовать его реализовать (если только не много времени потребуется).


Здравствуйте, Алексей Шмуйлович.

Приложенного вами файлика не увидел. Хотя интересно было бы посмотреть.
Прилаживаю свою таблицу (о которой говорил ранее). Там есть готовые уже раскрои, выполненные мною на работе. Будут интересны как наглядный пример логики раскроя (надеюсь). Таблицы чуть подправил и добавил для объяснения самого процесса и вида карт раскроя.

Да, предложенный Вами алгоритм в целом именно таков. Попытаюсь объяснить его так, как он видится и делается мною.
1. На складе имеются заготовки опеределенной длины (перечень возможных размеров — 12 000мм, 9 000мм, 6 000мм). Кол-во заготовок роли не играет — считается, что их неограниченное колличество.
2. Нужно из одной длины (допустим, 12 000мм) заготовки накроить детали заданной длинны и колличества (к примеру, 7950мм — 33шт., 8590мм — 22шт., 2543мм — 22шт., 2542мм — 22шт.).
3. Берется самая длинная деталь и улаживается на заготовку. При этом стремится надо в к тому, чтобы уложилось целое их число, без остатка. И так далее — по нисходящей.
4. Если все же имеется остаток (тут играет роль и его длина — если это <= 250-300мм — то он не учитывается при дальнейшем расчете), этот остаток вычисляется от длины заготовки, и нужная недостающая длина отпиливается от новой заготовки (так как имеем дело с металлопрофилем, имеют место сварные швы детали, но не более одного шва на одной детали). Получается своеобразная цепочка. Одна из задач — сделать эту цепочку краткой (в приложенной таблице имеются примеры).

Одной из тонкостей этого процесса является также то, что деталь может иметь как прямые, так и косые углы разной величины, что учитывается при раскрое. В этом случае производится вращение детали с тем, чтобы углы равной величины совпали. Длина «полки» этого угла является экономией, которая учитывается при раскрое. В зависимости от величины угла длина этой «полки» может быть достаточно большой, что в сумме приводит к значительной экономии.

Основная трудоемкость и рутинность работы видится мною именно в нахождении оптимального разложения длин деталей (и их недостающих остатков) на материале с целью наиболее полного заполнения последнего.

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

Хотелось бы услышать Ваше мнение.


Да, виноват. Спешил на поезд и забыл файл приложить.
Бегло посмотрел Ваш файл. Конечно, косые резы все усложняют.
Ведь у меня в алгоритм перебор вариантов вообще не заложен — все построено на сортировке списка деталей по убыванию и использованию самой короткой заготовки из возможных. И в принципе работает. А тут, действительно, нужно перебирать. Единственное, что приходит пока в голову — осуществлять подбор для деталей с одинаковым углом реза отдельными группами. Тогда длину можно искусственно уменьшить на длину одной полки угла.
В общем, обдумайте. Если сможете дать формализованный алгоритм, может быть переделаем и программку.
А Вы на VBA совсем не программируете?


К сожалению, на VBA не умею програмировать. Хотя есть начальные навыки программирования. Допустим, вложения по тем ссылкам, что Вы привели, открывал и пробовал анализировать. Что-то из исходного текста понимаю. Язык то, в общем, не сложный… Когда-то пытался Python самостоятельно изучать… :-)
Ну, это отступление от темы. Главное — самостоятельно написать подобную программу на VBA, к сожалению, мне не по силам…
Но желание автоматизировать (облегчить, исключить возможные ошибки и повысить скорость соей работы — целых 3 плюса!) у меня большое… :-)
А что значит — формализованный алгоритм? (Хотя, могу догадываться, что это)…


Ну, хотите текстом по шагам опишите действия, включая формулы расчета. Хотите, в виде блок-схемы. Плюс структура исходных данных и в каком виде нужнен результат. Как удобнее, только чтобы однозначно было понятно, что должна сделать программа. Тем более, что начальные навыки программирования есть :)


Посмотрите мой вариант. Может быть дополнить исходные данные параметрами углов? только я не понимаю, как их потом использовать.


Хорошо. Постараюсь сделать это.



Задачу линейного раскроя можно решать разными способами:
1. Полный перебор, как правило, не возможно реализовать в реальных условиях.
2. Самый эффективный способ — целочисленное линейное программирование. В качестве инструмента можно использовать Solver.
Но здесь есть ряд ограничений — необходимо найти все варианты сложения исходных деталей, не превышающих размер заготовок (а вариантов может быть несколько тысяч или сотен тысяч). Ограничение Solver’a — 200 изменяемых ячеек.
3. «Жадный» алгоритм. У данного алгоритма есть вариации, основное достоинство — высокая скорость. Применим для быстрой оценки раскроя, либо когда скорость важнее оптимизации.
4. Решать как частный случай задачи о рюкзаке (сумма подмножеств) и выбор наилучшего варианта из имеющихся.
5. Генетический алгоритм и алгоритм муравьиной колонии. Ничего про эти алгоритмы сказать не могу, т.к. их не изучал.

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

Примеры получаемых раскроев можно посмотреть здесь: https://yadi.sk/d/B_fg089lhsMk4
Если будет заинтересованность в алгоритме, то можете обратиться ко мне в личку.



  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Расчет линейного раскроя в Excel

Понравилась статья? Поделить с друзьями:
  • Ранг по возрастанию excel
  • Ранее не встречалось excel
  • Раскрашивание ячеек в excel по условию
  • Ранг в сводной таблице excel
  • Рандомные числа без повторений в excel