Задача оптимального раскроя excel

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


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

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

Опубликовано 02 Дек 2015
Рубрика: Справочник Excel | 49 комментариев

Режем с умом!!!Экономичный линейный раскрой материалов (раскрой погонажа) актуален для многих отраслей производства и в строительстве. Это — распил бревен и досок в деревообработке, резка прутков, арматурных стержней, уголков, швеллеров, труб, двутавров на заготовки…

…в производстве металлоконструкций и машиностроении, поперечный раскрой рулонов с бумагой и тканью в целлюлозной и легкой промышленности.

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

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

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

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

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

Включим Excel и на простом примере порезки металлических стержней на детали познакомимся с одним из способов решения практических задач линейного раскроя. Часто математики эту задачу называют «задачей о распиле».

Исходные данные для примера я не стал придумывать, а взял из статьи Покровского М.А. «Минимизация неизбежных потерь материалов в промышленном производстве при их раскрое на штучные заготовки» опубликованной в №5 (май 2015)  электронного научно-технического журнала «Инженерный вестник» издаваемого ФГБОУ ВПО «МГТУ им. Н.Э. Баумана» (ссылка: engbul.bmstu.ru/doc/775784.html).

Цель, которую я преследовал – сравнить полученные результаты решения задачи.

Пример решения задачи линейного раскроя в MS Excel.

Договоримся, что:

1. Заготовки – это исходный материал в виде прутков, полос, стержней и т.д. одинаковой длины.

2. Детали – это элементы, которые необходимо получить, разрезав исходные заготовки на части.

3. Ширина пила, реза, руба принята равной нулю.

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

Для комплектации одного из заказов заготовительный участок должен порубить на комбинированных ножницах из одинаковых прутков-заготовок длиной 1500 мм три типоразмера деталей:

151 штуку длиной 330 мм

206 штук длиной 270 мм

163 штуки длиной 190 мм

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

Исходные данные:

1. Длину исходных заготовок Lз в миллиметрах записываем в объединенную ячейку

D3E3F3: 1500

2. Присваиваем номера i всем типоразмерам деталей, начиная от самой длинной и заканчивая самой короткой в ячейках

D4; E4; F4: 1; 2; 3

3. Длины деталей Lдi в миллиметрах пишем в

D5; E5; F5: 330; 270; 190

4. Количество деталей Nдi в штуках заносим в

D6; E6; F6: 151; 206; 163

5.Приступаем к очень важному этапу – заполнению вариантов раскроев.

Необходимо запомнить и понять 2 принципа выполнения  этой работы.

1. Длины отходов должны быть меньше самой маленькой детали (0<Loj<Lдmin).

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

Если какого-нибудь типоразмера деталей в варианте раскроя нет, то ячейку оставляем пустой, ноль писать не будем для облегчения визуального восприятия таблицы.

Вариант раскроя №1:

Попытка выкроить из одной заготовки 5 деталей №1 невозможна, поэтому пишем в ячейку

D7: 4

Добавить в раскрой деталь №2 или деталь №3 также невозможно, поэтому оставляем пустыми ячейки

E7 и F7:

Вариант раскроя №2:

Уменьшаем на 1 от предыдущего варианта количество деталей №1 и записываем в

D8: 3

Пробуем добавить 2 детали №2 – не получается, поэтому дополняем в

E8: 1

Остается возможность дополнить раскрой деталью №3. Заносим в

F8: 1

Придерживаясь озвученных принципов, заполняем по аналогии все возможные в данном случае 18 вариантов раскроев.

Сделав пару-тройку таблиц вариантов раскроев самостоятельно, вы уясните логику действий и будете тратить считанные минуты на эту работу.

Если при раскрое не выполняется первый принцип, то ячейка с длиной отхода автоматически окрашивается в красный цвет. Условное форматирование, примененное к ячейкам G7…G24, наглядно поможет вам в этой работе.

В ячейках H7…H24 ничего не пишем! Они используются для вывода результата решения!

Линейный раскрой в Excel -1-26s

Ссылка на скачивание файла с примером: lineynyy-raskroy-v-excel (xls 38,5KB).

Подготовка к решению:

* В ячейках G7…G24 вычисляются длины отходов (обрезков), остающиеся в результате выполнения раскроев, по формуле

Loj=LзΣ(Lдi*Nдij)

6. Количество деталей каждого типоразмера, изготовленных по всем примененным вариантам раскроя, будут подсчитываться в ячейках D26, E26 и F26 по формуле

Nдiрасч=Σ(Nдij*Nзj)

Количество деталей в найденном в конце решения плане раскроя должно полностью соответствовать заданному количеству деталей!

7. Необходимое число заготовок для выполнения оптимального плана раскроя будет определяться в объединенной ячейке D27E27F27 по формуле

Nзрасч=ΣNзj

8. Общая длина всех заготовок, необходимых чтобы выполнить линейный раскрой всех деталей будет подсчитываться в объединенной ячейке D28E28F28 по формуле

LзΣ= Lз*Nзрасч

9. Общая длина всех отходов, получаемых при выполнении найденного плана раскроя, будет считаться в объединенной ячейке D29E29F29 по формуле

LоΣ= Σ(Lоj*Nзj)

10. Доля отходов, полученных при выполнении оптимального плана линейного раскроя от общего количества использованного материала, будет вычисляться в объединенной ячейке D30E30F30 по формуле

Ωo=Σ/Σ

Решение:

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

1. Выбираем в главном меню «Сервис» —  «Поиск решения…».

2. В появившемся одноименном окне  «Поиск решения» производим настройки.

2.1. Назначаем целевой функцией общую длину отходов Σ и вводим ссылку в окно целевой ячейки.

2.2. Устанавливаем переключатель «Равной:» в положение «минимальному значению».

2.3. Указываем ячейки с переменными j в окне «Изменяя ячейки».

2.4. Вводим ограничения в одноименное окно. В качестве условий указываем необходимость равенства заданного i и расчетного iрасч количества деталей, а так же на переменныеj – расчетное количество заготовок по вариантам раскроев – накладываем ограничение: это должны быть целые числа.

poisk-resheniya-26s

3. Нажимаем кнопку «Параметры» и в выпавшем окне  «Параметры поиска решения» выполняем  настройки так, как показано на следующем скриншоте. Закрываем окно кнопкой «ОК».

parametry-poiska-resheniya-26s

4. В окне «Поиск решения» нажимаем кнопку «Выполнить» и ждем, пока Excel найдет решение. Это может длиться несколько минут.

rezultaty-poiska-resheniya-26s

5. После сохранения найденного решения кнопкой «ОК», результаты отобразятся в ячейках  H7…H24 на листе Excel.

На следующей картинке показан найденный оптимальный линейный раскройный план.

raskroynyy-plan-№1-26s

Что в итоге?

Линейный раскрой в Excel заготовок для задач подобных рассмотренной в этой статье выполняется описанным выше методом за 10-15 минут! «Вручную», не зная метод индексов Канторовича, за такое время решения не найдешь.

Запустив «Поиск решения» несколько раз при разных параметрах поиска, удалось найти 5 различных планов рубки заготовок. Все 5 планов требуют одинаковое число заготовок – 93 и дают отходов всего 2,21%!!! Эти планы почти на 6% лучше, чем план, рассчитанный Покровским и более чем на 10% экономичнее «Традиционного» плана (смотри ссылку на первоисточник в первой части статьи). Очень достойный результат достигнут быстро и без применения дорогостоящих программ.

kolichestvo-zagotovok-po-planam-i-raskroyam-26s

Следует заметить, что надстройка Excel Solver («Поиск решения»), использующая симплекс-метод при решении задач линейного программирования, может работать не более чем с 200 переменными. В приложении к рассмотренной нами задаче линейного раскроя это означает, что количество раскроев не может превышать 200 вариантов. Для простых задач этого достаточно. Для более сложных задач следует попробовать применить «смесь» «жадного» алгоритма и симплексного метода Solver, отобрав из полного списка раскроев не более 200 самых экономичных. Далее запасаемся терпением и добиваемся результатов. Можно попытаться разбить сложную задачу на несколько простых, но «уровень оптимальности» найденного решения будет при этом, скорее всего, ниже.

Может быть, рассмотренный вариант решения вопросов линейного раскроя и не «высший пилотаж», но однозначно шаг вперед по сравнению с «традиционным» подходом на многих производствах.

Использование надстройки MS Excel «Поиск решения» (Solver) было на блоге уже однажды рассмотрено в статье «Бак для воды? «Поиск решения» в Excel!». Думаю, что этот замечательный инструмент достоин пристального внимания и еще не раз поможет изящно и быстро решить ряд новых нетривиальных задач.

P.S. Ссылки на лучшие из бесплатных программ линейного раскроя, найденных мной в Сети:

http://stroymaterial-buy.ru/raschet/70-raskroy-lineynih-izdeliy.html

http://forum-okna.ru/index.php?app=core&module=attach&section=attach &attach_id=7508

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

http://forum.dwg.ru/attachment.php?attachmentid=114501&d=13823277 74

http://www.planetcalc.ru/917/

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

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

На главную

P. S. (11.06.2019)

В статье «Программа для раскроя в Excel и Calc» представлено решение автоматизации заполнения вариантов (схем) раскроев. Для поиска оптимального плана раскроя кроме надстройки Excel Solver использованы более мощные инструменты: NLPSolver и OpenSolver.

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

Отзывы

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

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

Сравнительные тесты различных специализированных программ линейного раскроя применительно к оконному производству проводилось здесь: http://forum-okna.ru/index.php?showtopic=35118
Применяемый мной алгоритм обошел все специализированные программы.

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

Domo -версию программы можно скачать здесь или здесь, она полностью функциональна, доступен расчет с помощью динамического программирования (DP).
Расчет с помощью линейного программирования (LP) отключен.
Также отключена возможность составления и экспорта отчетов.

Можно использовать до 20 различных размеров заготовок и до 90 различных размеров деталей.
Есть возможность задать ширину реза, размер торцевой кромки, размер полезного (делового) остатка, возможность раскраивать в два профиля (если это требуется)

Можно убедиться в эффективности алгоритма раскроя в сравнении с другими программами.
Если будет заинтересованность в алгоритме или потребуется адаптация отчета под ваши требования, то можете обратиться ко мне в личку.

UPDATE, декабрь 2021
PS:
В связи с нехваткой свободного времени на адаптацию программы по линейному раскрою для нужд всех желающих, а также с учетом отсутствия личной мотивации в этом, выкладываю ссылку на рабочую программу с открытым кодом: https://disk.yandex.ru/d/wLjg9aMUpoGtLw
Реализованы разные алгоритмы по раскрою
Тем, кто знаком с VBA, не трудно будет внести изменение в код, если функционала текущей версии недостаточно.
Либо можно воспользоваться веткой фриланс на данном форуме, где специалисты за разумную оплату смогут реализовать все хотелки.
Для дальнейшего продолжения темы по раскрою есть моя реализация двумерной упаковки (раскроя) в полуограниченную полосу с использованием линейного программирования: http://www.excelworld.ru/forum/3-48430-1

PPS:
Если программа по раскрою окажется полезной и возникнет непреодолимое желания меня отблагодарить, то не откажусь от любого доната
ЯД: 410012329135704

UPDATE, апрель 2022
Выкладываю небольшой калькулятор с примерами, который работает в 3х режимах (быстро, медленно и очень медленно)
т.к. используется внешняя dll, то будет работать только в Excel 32бит

Завод производит
электронные приборы трех видов (прибор
А, прибор В и прибор С), используя при
сборке микросхемы трех видов (тип 1,
тип2, тип3). Расход микросхем задается
следующей таблицей:

Прибор
А

Прибор
В

Прибор
С

Микросхема
1

2

5

1

Микросхема
2

2

0

4

Микросхема
3

2

1

1

Стоимость
изготовленных приборов одинакова.
Ежедневно на склад завода поступает
500 микросхем типа 1 и по 400 микросхем
типов 2 и 3. Каково оптимальное соотношение
дневного производства приборов различного
типа, если производственные мощности
завода позволяют использовать запас
поступивших микросхем полностью?

Формальная математическая постановки задачи

Константы

  1. Пусть
    mij
    – расход микросхем i
    для прибора j,
    где i=1,2,3;
    j=1,2,3.

    2

    5

    1

    mij
    =

    2

    0

    4

    2

    1

    1

  2. Пусть
    Zi
    – ежедневный
    запас микросхем i
    на складе, где i=1,2,3.

    Z1=500;
    Z
    2=400;
    Z
    3=400.

Переменные

  1. Обозначим
    через xj
    дневное производство приборов j,
    j=1,2,3,
    то есть
    x1
    — дневной
    выпуск приборов А;

    x2
    — дневной
    выпуск приборов В;

    x3
    — дневной
    выпуск приборов С.

  2. Обозначим
    через Ri
    расход микросхем i,
    где i=1,2,3,
    то есть
    R1
    — расход
    микросхем 1-го типа;
    R2
    – расход микросхем 2-го типа;
    R3
    – расход микросхем 3-го типа.

  3. Обозначим
    через N
    дневное производство всех видов
    приборов.

Решение

1.Зададим
математическую модель расхода микросхем

,
где i=1,2,3.

или

  1. Зададим
    математическую модель нахождения
    общего количества приборов N=x1+x2+x3.
    Его максимизация является целью решения
    задачи. Следовательно, целевая функция
    будет иметь вид:

Ограничения

  1. Расход
    микросхем не
    должен превышать

    их запас

(для микросхем
1-го типа)

или (для микросхем 2-го типа)

(для микросхем 3-го типа)

  1. Количество
    выпускаемых приборов должно быть целым
    числом.

  2. Поскольку
    x1,
    x2,
    x3
    выражают объем выпускаемых приборов,
    то они не могут быть отрицательны, то
    есть
    x1≥0;
    x2≥0;
    x3≥0;
    x4≥0

Методика выполнения в Microsoft Excel

1. Запустите
программу Excel
(Пуск
ПрограммыMicrosoft
Excel)
и создайте рабочую книгу.

2. Создайте новый
рабочий лист «Организация
производства 2».

3. В ячейки E2,
E3,
и E4
занесите дневной запас микросхем –
числа 500, 400, и 400 соответственно.

4. В ячейки B5,
C5
и D5
занесите нули – в дальнейшем значения
этих ячеек будут подобраны автоматически.

5. В ячейках диапазона
A1:D4
разместите таблицу расхода комплектующих.

6. В ячейках F2:F4
нужно указать формулы для расчета
расхода микросхем по типам. В ячейке F2
формула будет иметь вид =$B$5*B2+$C$5*C2+$D$5*D2,
а остальные формулы можно получить
методом автозаполнения (обратите
внимание на использование абсолютных
и относительных ссылок).

7. В ячейку F5
занесите формулу, вычисляющую общее
количество произведенных приборов: для
этого выделите диапазон B5:D5
и щелкните на кнопке Автосумма
на стандартной
панели инструментов.

8.
Дайте команду
СервисПоиск
решения –
откроется
диалоговое окно
Поиск решения.

9. В поле Установить
целевую
укажите
ячейку, содержащую оптимизируемое
значение (F5).
Установите переключатель Равной
максимальному значению
(требуется
максимальный объем производства).

10. В поле Изменяя
ячейки
задайте
диапазон подбираемых параметров –
B5:D5.

11. Необходимо
добавить ограничения:

  • Расход
    микросхем не
    должен превышать

    их запас.

  • Количество
    выпускаемых приборов должно быть целым
    числом.

  • Число
    производимых приборов неотрицательно

12. Чтобы определить
набор ограничений, щелкните на кнопке
Добавить. В
диалоговом окне Добавление
ограничения
в
поле Ссылка
на ячейку
укажите
диапазон F2:F4.
В качестве условия задайте <=. В поле
Ограничение
задайте
диапазон E2:E4.
Это условие указывает, что дневной
расход комплектующих не должен
превосходить запасов. Щелкните на кнопке
ОК.

13. Снова щелкните
на кнопке Добавить.
В поле Ссылка
на ячейку
укажите
диапазон B5:D5.
В качестве условия задайте >=. В поле
Ограничение
задайте
число 0. Это условие указывает, что число
производимых приборов неотрицательно.
Щелкните на кнопке ОК.

14. Снова щелкните
на кнопке Добавить.
В поле Ссылка на ячейку укажите диапазон
B5:D5.
В качестве условия выберите пункт цел.
Это условие не позволяет производить
доли приборов. Щелкните на кнопке ОК.

15. Щелкните на
кнопке Выполнить.
По завершении
оптимизации откроется диалоговое окно
Результаты
поиска решения.

16. Установите
переключатель Сохранить
найденное решение,
после
чего щелкните на кнопке ОК.

17. Проанализируйте
полученное решение. Кажется ли оно
очевидным? Проверьте его оптимальность,
экспериментируя со значениями ячеек
B5:D5.
Чтобы восстановить оптимальные значения,
можно в любой момент повторить операцию
поиска решения.

18. Сохраните рабочую
книгу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

Встал вопрос, возможно ли создать средствами эксель оптимизацию по раскрою линейных материалов.
Чтобы было понятнее  даю исходные данные примера:
Имеются детали с указанием их длин в столбец  2500, 900, 2200 ….
Исходная длина заготовки =3000
Задача: сколько целых полотен по 3000 уйдет на раскрой деталей  2500, 900, 2200 ?
Причем, программы по раскрою , понятно что существуют и в них присутствуют карты в графическом виде. От эксель требуется только нахождение целых полотен по количеству без карт.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

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

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

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

https://yadi.sk/d/B_fg089lhsMk4

Если будет заинтересованность в алгоритме, то можете обратиться ко мне в личку.

Тесты эффективности различных специализированных программ линейного раскроя есть здесь:

http://forum-okna.ru/index.php?showtopic=35118

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

Изменено: MCH03.02.2016 20:16:42

 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

Я хочу объяснить цель только в рамках своей узкой задачи.
Сейчас сотрудничаю с фирмой по производству мебели. Задача была поставлена по оптимизации кухонных столешниц длиной 3 и 4 метра в основе. При просчете дизайнер рисует кухню , где максимальное количество деталей в раскрое не превышает 5-6 штук. Но как правило — 90% случаев до 3-х деталей. На эснове этого, можно конечно все гораздо быстрее разложить врукопашную, но это одна из тех многих точек внимания , которую нужно убрать из ручного ввода. Ньюансов и так предостаточно . Дизайнер скидывает кухонную деталировку и нажимает кнопочку расчитать,  далее макрос выполняет работу по выводу итогов. У меня и так к экселю подключена программа оптимизации раскроя, в которую автоматом вгружаются детали для оптимизации (полотна). Я просто подумал, что профили можно реализавть и макросом, тем самым упростив работу людей.

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

Если у Вас расчет раскроя автоматизирован, то зачем тогда делать дополнительный расчет?
Можно сделать быструю оценку, сколько максимально нужно заготовок используя «жадный» алгоритм.
Реализуется очень просто, работает быстро, гарантированно потребуется заготовок не более, чем расчитал «жадный» алгоритм.
Учитывая, что у Вас 5-6 деталей, то алгоритм, как правило, будет выдавать оптимальный результат.
Для реализации примера выложите данные в виде файла в том виде, как они у Вас храняться и какой должен получится результат.

 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

 видео пример

https://drive.google.com/file/d/0BxrfsCg1fMBOR3p4cUJFZlZVRDA/view?usp=sharing

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

Изменено: Sla_041230.09.2015 23:07:44

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

Пример реализации «жадного» алгоритма для задачи линейного раскроя.
Он не самый эффективный, но очень быстрый

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

Реализацию программы по линейному раскрою на базе Excel выложил здесь:

http://www.excelworld.ru/forum/3-21304-1

 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

Спасибо вам. В любом случае интересно.

 

Сливочный

Пользователь

Сообщений: 178
Регистрация: 27.11.2013

Win 10, MSO 2016

Здравствуйте уважаемые профессионалы, у меня один большой (для меня большой) вопрос.

Имеется готовый макрос, взялся его усовершенствоваться, но мозгов к сожалению на всё не хватает..   Что-то получилось улучшить и внедрить, что-то получилось улучшить, но внедрить не получается.. а что-то даже не понимаю, потихоньку изучаю (Уокенбах Дж. — Excel 2010. Профессиональное программирование на VBA — 2012), но время как всегда не ждёт.

1. Необходимо разложить по полочкам что в этом макросе и как работает (могу показать до куда я разобрался, не много :)) .

2. Глобальное (основное) усовершенствование программы заключается в следующем (как вы наверное поняли это задача линейного раскроя) Есть арматура в виде заготовок фиксированной длины (готовое решение как раз только их и использует), а нужно научить программу использовать остатки (обрезки) по определённым условиям. Начитался много тем и не только на этом форуме, народ пишет что самый оптимальный вариант это заставить «Поиск решения» (некий модуль SOLVER) думать над оптимальным вариантом обозначив начальные условия (естественно всё макросом)

если это большой запрос для бесплатной помощи, можно обсудить величину «спасибо»

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

Сливочный, использованный Вами макрос использует «жадный» алгоритм при решении задачи линейного раскроя, он не эффективный и может привести к большому проценту отходов.
Ссылка на мою реализацию линейного раскроя есть в 8м сообщении данной темы.
Там решены многие вопросы: можно использовать как неограниченное кол-во заготовок, так и остатки со склада
применяются разные методы и алгоритмы, которые показывают хорошую эффективность на реальных данных.

PS: Вы мне так и не ответили на мое письмо в почте.

 

elnino

Пользователь

Сообщений: 3
Регистрация: 17.12.2016

#12

17.12.2016 22:50:11

Цитата
MCH написал: Пример реализации «жадного» алгоритма для задачи линейного раскроя GreedyAlgo.xlsm  (16.18 КБ)

Все работает пока не вводишь значения ширины реза ((
Или я что то не так делаю?

Прикрепленные файлы

  • GreedyAlgoError.xlsm (15.28 КБ)

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

#13

18.12.2016 12:53:25

Все правильно считает, вы детали 12000мм не сможете сделать из заготовки 12000мм при ширине реза 1мм
т.к. нужны заготовки как минимум 12001мм, поэтому данные детали пропускаются
В коде заложен алгоритм, что для изготовления каждой детали ее нужно отпилить от заготовки и каждый рез обязателен.
Чтобы игнорировать последний рез (не обязательность последнего реза), то достаточно к размеру заготовки прибавить ширину реза и формула будет иметь вид:

Код
=GreedyAlgo(A8:A11;B8:B11;B2+B3;B3;B4)

или уберите из кромки ширину реза:

Код
=GreedyAlgo(A8:A11;B8:B11;B2;B3;B4-B3)

Но повторюсь, «жадный» алгоритм считает не эффективно на реальных данных, лучше для раскроя применять другие алгоритмы

Изменено: MCH18.12.2016 12:58:50

 

elnino

Пользователь

Сообщений: 3
Регистрация: 17.12.2016

Еще этот алгоритм, по той же самой причине, видимо, не понимает когда рез всего один и заготовка режется на две ровные части.

Изменено: elnino18.12.2016 13:47:46

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

#15

18.12.2016 13:56:34

Цитата
elnino написал:
Еще этот алгоритм, по той же самой причине, видимо, не понимает когда рез всего один и заготовка режется на две ровные части.

из заготовки 12000 не возможно сделать две по 6000 если на рез уходит несколько мм (если ширину реза и кромки прировнять к нулю, тогда возможно)

 

elnino

Пользователь

Сообщений: 3
Регистрация: 17.12.2016

Нет, я имею ввиду, что если нужно разрезать 12м на 2 ровные части с шириной реза 2мм, то получится в реальной жизни два куска по 5999мм.
Но алгоритм считает что от каждого куска нужно отрезать по 2мм.
Таким образом для этой задачи он заложит две заготовки.
Другая ситуация, более реальная. Есть несколько деталей длиной 2158, 149, 856, 5148, 516, 896, 2265. Невооруженным глазом сразу не сообразить, что с учетом резов 2мм, получится ровно труба 12000мм (2158+2+149+2+856+2+5148+2+516+2+896+2+2265=12000), однако алгоритм к каждой детали добавит по 2мм и заложит две заготовки вместо одной. И это проблема не жадного алгоритма, а его конкретной реализацией, как я понимаю.

MCH

, а в вашем алгоритме учтен этот момент?

Изменено: elnino19.12.2016 01:35:11

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

#17

19.12.2016 07:01:14

Цитата
elnino написал:
а в вашем алгоритме учтен этот момент?

В алгоритме заложено, что последний рез обязателен, но я описал, как обойти это ограничение, нужно просто добавить к размеру заготовки ширину реза
Соответственно получится:
2158+2+149+2+856+2+5148+2+516+2+896+2+2265+2=12000+2
Это математическое решение необязательности последнего реза (когда последний рез необязательный или его можно совместить с кромкой).

Если рассудить логически, то пила, как правило, режет автоматически и какая ей разница, сколько ей отрезать в конце от заготовки 2мм, 1мм или 0мм (сделать рез в воздухе)
таким образом будут допустимым следующие решения:
5999+2+5999+0=12000
5999+2+5998+1=12000
5998+2+5998+2=12000

Данный математический подход можно применить в любом алгоритме линейного раскроя

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

shk, Вы прорекламироваться зашли? Можно, но с разрешения администратора. Без разрешения нарываетесь на бан.

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#19

19.06.2017 15:41:23

при этих исходных:

Цитата
Исходная длина заготовки =3000
Задача: сколько целых полотен по 3000 уйдет на раскрой деталей  2500, 900, 2200 ?

требуется 3 заготовки
если например, 2500 нужно А шт. 2200 нужно В шт., а 900 нужно С шт.
то всего заготовок нужно
А + В + Целое((С+2)/3)
и считается это устно без Excel

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Игорь, дата сообщения (перед моим) какая?

 

да, уж… не слабо
а для информации: по истечении скольких лет НЕЛЬЗЯ писать в тему? в т.ч. если это решение по существу заданного вопроса
решения ведь не только для автора, а для всех, кто столкнулся с аналогичным вопросм и нашел на форуме ответ на него

Изменено: Ігор Гончаренко19.06.2017 15:53:50

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

#22

19.06.2017 15:53:35

Цитата
Ігор Гончаренко написал:
и считается это устно без Excel

Не всегда можно устно сосчитать в более сложных примерах:
Если не принимать во внимание что тема старая, то простой пример из

Википедии

:
Сколько заготовок размером 5600 мм нужно для изготовления следующих деталей (ширина реза равна нулю):
размер — количество
1380 — 22
1520 — 25
1560 — 12
1710 — 14
1820 — 18
1880 — 18
1930 — 20
2000 — 10
2050 — 12
2100 — 14
2140 — 16
2150 — 18
2200 — 20

Скрытый текст

Изменено: MCH19.06.2017 15:53:58

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

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

 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

Приветствую всех. Раз уж тема снова всплыла. Задам в ней вопрос. Существует много программ где нет встроенного раскрой прямоугольных деталей. Более того данные зачастую передаются через Excel в программы раскроя. По опыту вижу, что у Excel нет никаких противопоказаний для того, чтобы таковая программа была реализована прямо в нем. (Кроме конечно того, такая программа станет бесплатным достоянием общественности.)
В противовес -автор мог бы себя прорекламировать. Так почему же такой программы до сих пор нет?

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

#25

19.06.2017 16:27:08

Цитата
Sla_0412 написал:
Excel нет никаких противопоказаний для того, чтобы таковая программа была реализована прямо в нем

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

 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

Не уверен что дело в времени. По опыту-  использовал Базис раскрой, Новый Раскрой-Pro100,  
PaneCut. Первые две-делают раскрой практически моментально. Третья о-очень медленно. Сравнивал деталировку    Раскрой-Pro100 vs PaneCut. Закладывал одну и туже деталировку. Думал что PaneCut выиграет. Однако при детальном рассмотрении выиграл   Раскрой-Pro100. Думаю, тут главное алгоритм.

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#27

22.12.2020 10:55:54

Сообщение andris krusines удалено [МОДЕРАТОР]

andris krusines, здесь форум по обмену знаниями, а не реклама ХЗ какой программы
Если ваш алгоритм хорош, то поделитесь им тут — есть MCH, который давно и прочно зарекомендовал себя отличным специалистом в этой области. Есть и другие знающие люди — они проверят (если им не лень) и дадут заключение

Если не поделитесь алгоритмом, то это 100%ный маркер мягко говоря «некачественного» продукта, а человек, решивший такого «кота в мешке» приобрести сильно пожалеет
А самое смешное, то такие «авторы» даже понять не могут, что именно с их «продуктом» не так, если вообще обнаружат проблему без обратной связи :D

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

Like this post? Please share to your friends:
  • Задача об оптимальном выпуске продукции в excel
  • Задачи excel среднее значение
  • Задать цвет строке excel
  • Задача об ассортименте продукции в excel
  • Задачи excel с or или and