Добрый день. Сразу предупреждаю , что я объясняюсь я хуже всех на планете)) Спасибо за внимание и терпение )
Ситуация такая. Занимаюсь пилом ал. профилей. Предпочитаю подсчитывать все в экселе по производству. Но вот , уже какой день бьюсь над реализацией своей идеи в эксель. Мне нужно минимизировать используемое кол-во материала. Попытаюсь объяснить нагляднее.
У меня есть заказ: Профиль А 500 см 8 шт. Профиль B 730 см 7 шт. Профиль С 901 см 5 шт. Размер 1 целого профиля у меня обычно идет по соткам от 4000 до 6500 ( 4100;4200; ..... ; 6400;6500) Мне нужно чтобы программа находила оптимальный размер целого профиля с минимальным отходом.
Есть куча программ которые это делают , но я хочу внести такую функцию в свой ексель , чтобы все можно делать с 1 файла и не заморачиваться. Привел , пару примеров в скриншотах. Но такие программы все равно не делают все что я хочу . Мне нужно , чтобы оно искала сама оптимальный размер профиля с наименьшими затратами. В скриншотах я вводил это значение руками 4000,5000,6300 При 4000 у нас выходит 4 палки , что равняется 16000 При 5000 у нас выходит 3 палки , что равняется 15000 При 6300 у нас выходит 3 палки , что равняется 18900 Получается что искомое наше значение 4000 , самое оптимальное. http://cs622525.vk.me/v622525792/1fa0e/dqLg4OYl9Rk.jpg http://cs622525.vk.me/v622525792/1fa17/9ATMvP6lHmI.jpg http://cs622525.vk.me/v622525792/1fa05/lF9UKFwM-UM.jpg
Не могу даже привести пример в эксель. Одно могу еще написать. Что программа дожна брать допустим размер 4000 и запихнуть туда максимальное кол-во палок с размер 500,730,901 с минимальным остатком ! как то так
Обязательно нужно использовать заготовки одного размера или можно комбинировать различные? Например, одновременное использование заготовок размером 4000, 4800 и 4900 можно минимизировать отходы. 901*3 + 730*3 = 4893 901*2 + 730*4 = 4722 500 * 8 = 4000 суммарные отходы - 85, всего 0,62%
если использовать только один вид, то оптимальным будет размер 4600: 901 + 730*3 + 500*3 = 4591 901 + 730*3 + 500*3 = 4591 901*3 + 730 + 500*2 = 4433 суммарный отход - 185 или 1,34%
В описании и на скринах различная информация. во 2м и 3м скрине указано следующее количество: 500 - 10шт, 730 - 7 шт, 901 - 5 шт.\ Оптимальным в данном случае нужно взять 3 заготовки размером 4900 901*3 + 730*3 = 4893 901 +730*2 + 500*5 = 4861 901 + 730*2 + 500*5 = 4861
общий отход составит 0,58% Пример варианта распила см. в файле
Задача очень не простая. И довольно интересная. Вот по поводу варианта распила под ноль хотелось бы уточнить у автора: на практике реально распилить профиль 4000 на 8 кусков по 500? Ведь сам рез отнимает свои миллиметры от длины профиля.
Тема интересная, жаль что ТС пропал Хотел протестировать свои алгоритмы на реальных данных в сравнении с CuttingLine и др. программами линейного раскроя.
Блин , и в правду пропал. Много работы было , не до этого. Пользовался специальными программами. Сейчас появилась новая проблема , изучаю VB Хочу быть опытным юзером)
Цитата
ber$erk написал: на практике реально распилить профиль 4000 на 8 кусков по 500? Ведь сам рез отнимает свои миллиметры от длины профиля.
Нет , обычно длинна пропила 5-10 мм. Зависит от заготовки.
Да, есть определенный опыт по написанию алгоритма оптимизации линейного раскроя (сам по работе с раскроем не связан)
Цитата
Только я не могу понять как запустить расчёт?
В приложенном файле нет макросов, это просто сгенерированный отчет.
Мне самому интерессно, как работают алгоритмы линейного раскроя, которые я написал. Могли бы выложить реальные данные здесь (или отправить в личку). Можно было бы сравнить их эффективность.
saint93 написал: то есть это не программа , а просто вбитые данные?
В приложенном мной файле "просто вбитые данные", но посчитаны они программным способом.
Задачу линейного раскроя можно решать разными способами: 1. Полный перебор, как правило, не возможно реализовать в реальных условиях. 2. Самый эффективный способ - целочисленное линейное программирование. В качестве инструмента можно использовать Solver. Но здесь есть ряд ограничений - необходимо найти все варианты сложения исходных деталей, не превышающих размер заготовок (а вариантов может быть несколько тысяч или сотен тысяч). Ограничение Solver'a - 200 изменяемых ячеек. 3. "Жадный" алгоритм. У данного алгоритма есть вариации, основное достоинство - высокая скорость. Применим для быстрой оценки раскроя, либо когда скорость важнее оптимизации. 4. Решать как частный случай задачи о рюкзаке (сумма подмножеств) и выбор наилучшего варианта из имеющихся. 5. Генетический алгоритм и алгоритм муравьиной колонии. Ничего про эти алгоритмы сказать не могу, т.к. их не изучал.
Реализовал собственный алгоритм линейного раскроя, который основан на решении задачи о рюкзаке методом целочисленного динамического программирования. Производится генерация различных вариантов раскроя в зависимости от сортировки исходных деталей и заготовок и выбор наилучшего решения. К достоинству можно отнести - достаточно эффективный результат по сравнению с "жадным" алгоритмом, а также при сравнении с результатом программ CuttingLine и Optimize.
Примеры получаемых раскроев можно посмотреть здесь: https://yadi.sk/d/B_fg089lhsMk4 Если будет заинтересованность в алгоритме, то можете обратиться ко мне в личку.