Страницы: 1
RSS
Сколько нужно рюкзаков или раскрой погонажа
 
Доброго времени суток, просмотрел форум но подходящего ответа не нашел. Итак, имеется энное количество отрезков разной длины в виде списка, есть одна ячейка в которую вводиться длина погонажа из которого эти отрезки будут нарезаться.  Задача найти количетво в штуках погонажей заданной длины. Про VBA знаю то, что он существует. Может кто подскажет где подсмотреть решение этой задачки. Заранее спасибо за внимание к моей теме.
 
Рюкзаков должно быть столько, сколько участников в группе :)  
 
Не совсем понял. Может быть, ВПР()?  
=ВПР(H4;D3:E39;2;1)  
 
Но, похоже, не того хочется.
 
Ну да не того, хочется чтобы рассчитывался оптимальный раскрой при подсчете количества погонажей иначе эта затея не имеет смысла
 
гугл или яндекс не пробовали помучить? вот, например (кстати, мне тоже интересно, но сейчас совершенно не актуально, просто добавил в закладки):  
 http://forum-okna.ru/index.php?showtopic=6516
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Специальных программ для раскроя погонажа или листового материала знаю кучу, но блин у ВСЕХ у них есть одна уникальная особенность, а именно нельзя ни копипастом ни каким либо импортированием переместить список размеров и количества в окно этих программ, приходиться перенабивать все вручную.
 
вы по ссылке ходили?  
там, специально для вас, в одном из постов имеется архив с программой, загружающей данные из файла эксель. и пример есть. и описание есть.    
блинов, правда, нету, врать не буду :(
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Тут у меня завалялось кое-что, может подойдет.  
Автор: Шпец Докапыч с родственного форума.
 
{quote}{login=ikki}{date=20.02.2012 11:19}{thema=}{post}вы по ссылке ходили?  
{/post}{/quote}  
 
Благодарю, за наводку на программу, на WIN7x64 заработала после закидывания файла COMDLG32.OCX в Windows/Sistem32, к сожалению не работает с файлами .xlsx - это уже мелочи.    
 
Но вопрос еще остается открытым, можно ли тоже самое провернуть в моем файле без других программ.
 
Прока есть бревна - надо пилить... ;)  
 http://www.planetaexcel.ru/forum.php?thread_id=14719
 
К сожалению не совсем то что нужно, потому что при помощи поиска решения необходимо указывать все доступные варианты раскроя, а в моем случае их число может быть очень велико и каждый раз по разному.
 
{quote}{login=gorAi}{date=20.02.2012 11:04}{thema=}{post}...нельзя ни копипастом ни каким либо импортированием переместить список размеров и количества в окно этих программ, приходиться перенабивать все вручную.{/post}{/quote}Посмотрите программу Cutting. Каждый день многократно импортирую и экспортирую данные из Excel в Cutting и наоборот. Всё замечательно получается (-:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
>>> Но вопрос еще остается открытым, можно ли тоже самое провернуть в моем файле без других программ. Немного о Теории раскроя  
 http://www.studfiles.ru/dir/cat40/subj1301/file13293/view131347/page5.html  
Основы теории раскроя в нашей стране были заложены выдающимися учеными Л.В.Канторовичем и В.А.Залгаллером. Современный математический аппарат не гарантирует получение оптимального плана раскроя материала для большинства раскройных задач, поэтому разработка эффективных методов оптимизации расхода материала остается актуальнейшей проблемой раскройно-заготовительного производства.
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Вариант с реализацией "жадного" алгоритма
 
При запуске файла Раскрой.xls появляется окно "Исправления в Раскрой.xls" Excel удалось открыть файл восстановив или удалив не читаемое содержимое;  Для этой книги недоступны проект VBA, элементы управления ActiveX и остальные программные средства". Подскажите что у меня не так если в параметрах макросов стоит "Включить все макросы". Я так понял что мне нужно добавить пользовательскую функцию, но вот где код для нее.
 
Не знаю, что за сбой. Ничего не стандартного, кроме Microsoft ActiveX Data Objects версии 2.8 (если не ошибаюсь, не использовал). Если проект VBA не сохранился, то смогу сбросить кодом, но только, к сожалению, в пятницу.
 
Скачал, открыл свой архив. С файлом всё нормально.  
После вставки кода нужно будет установить сслыку на Microsoft ActiveX Data Objects Library, версия не принципиальна, какую-нибудь со 2.  
 
Private Const sSize As String = "FSize", sCount As String = "FCount"  
 
Private Function GetTable(ByVal forRange As Range) As ADODB.Recordset  
   Dim pRSet As New Recordset, vData As Variant, i As Long  
   pRSet.CursorLocation = adUseClient  
   pRSet.Fields.Append sSize, adInteger: pRSet.Fields.Append sCount, adInteger  
   pRSet.Open: pRSet.Sort = sSize & " ASC"  
   vData = forRange.Value  
   For i = 1 To UBound(vData, 1)  
       pRSet.AddNew  
       pRSet(0).Value = CLng(vData(i, 1)): pRSet(1).Value = CLng(vData(i, 2))  
   Next i  
   pRSet.Update  
   Set GetTable = pRSet  
End Function  
 
Private Sub Split(ByVal forLength As Long, ByVal inTable As ADODB.Recordset)  
   Dim vCount As Long, Remainder As Long, vSize As Long, calcCount As Long  
   If inTable.RecordCount = 0 Then Exit Sub  
   inTable.MoveLast  
   inTable.Find sSize & "<" & CStr(forLength), SearchDirection:=adSearchBackward  
   If Not (inTable.EOF Or inTable.BOF) Then  
       vSize = inTable(0).Value: vCount = inTable(1).Value  
       calcCount = forLength \ vSize  
       If calcCount < vCount Then  
           inTable(1).Value = vCount - calcCount: inTable.Update  
           Remainder = forLength - calcCount * vSize  
       Else  
           inTable.Delete adAffectCurrent  
           Remainder = forLength - vSize * vCount  
       End If  
       Split Remainder, inTable  
   End If  
End Sub  
 
Public Function PieceCount(ByVal forLength As Long, ByVal forRange As Range) As Long  
   Dim pTable As ADODB.Recordset, vParts As Long  
     
   Set pTable = GetTable(forRange)  
   vParts = 0  
   Do Until pTable.RecordCount = 0  
       vParts = vParts + 1  
       Split forLength, pTable  
   Loop  
   PieceCount = vParts  
End Function
 
Интересная штуковина "PieceCount"! Потестил. При "удобных" вариантах (количество маленьких отрезков пропорционально количеству больших) PieceCount отрабатывает отлично (погрешность 0,5 %). Но при других вариантах… )-: см.файл
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Ёксель-моксель  
Посмотрел ваш вариант. Нигде "жадный" алгоритм не проигрывает Cutting - использует меньше заготовок (хотя до идеала далеко(.  
Тогда к чему ирония?  
>Но при других вариантах… )-: см.файл
 
anvg, никакой иронии и в мыслях не было! Мой аватар, видимо, создал ироничную окраску (-:  
По роду работы мне приходится ежедневно сталкиваться с раскроем листового и погонажного материала. Поэтому PieceCount мне очень интересна.  
Насчёт того, что PieceCount выигрывает у Cutting: заготовок погонажа как раз и нужно больше, чем выдаёт PieceCount! Иначе останутся неразмещённые в раскрое отрезки. А это недопустимо! Посмотрите "Вариант 3" в файле "post_311043.xls". Разместить 23 отрезка на 8 заготовках погонажа невозможно (см.приложенный jpg)  
Всё что хотел сказать предыдущим своим постом - при ПРАКТИЧЕСКОМ применении PieceCount можно натолкнуться на "подводные камни".  
Повторюсь - PieceCount мне очень интересна. И если уважаемый мною anvg продолжит улучшение PieceCount - гарантирую быть верным адептом!
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
PieceCount - практически функция моей мечты. Потестил результаты в сравнении с CuttingLine и 2D-Place. То что у вас, Ёксель-моксель, программа раскроя насчитала заготовок больше чем PieceCount - это не удивительно тк. PieceCount не учитывает отступы от краев заготовки, ширину реза и тп., отсюда и результат, ведь в любой более или менее приличной программе раскроя эти параметры нужно задавать обязательно. А вот насчет "подводных камней" они действительно есть, в программах для раскроя. Там обычно присутствуют несколько алгоритмов раскроя, так вот если задать самый простой алгоритм то имеем результат 1 в 1 совпадающий с PieceCount, а вот если поставить сложный алгоритм с максимальным перебором то программы внезапно насчитывают больше чем нужно заготовок!!! anvg - огромное вам спасибо за кучу сэкономленного рабочего времени надеюсь не только у меня, к сожалению не знаю как вас отблагодарить.
 
1. При тестировании PieceCount vs Cutting и ширина реза, и отступы от краёв заготовки были заданы одинаково для всех испытуемых = 0 , что очень хорошо видно из "post_311093.JPG". Пост, который Вы, gorAi, или не посмотрели, или невнимательно посмотрели (-:  
2. При ЛЮБОМ алгоритме расчёта главное условие - разместить ВСЕ заготовки. Именно это условие невыполняет PieceCount, что очень наглядно видно из "Варианта 3" файла "post_311043.xls". Пост, который Вы, gorAi, также или не посмотрели, или невнимательно посмотрели (-:  
 
пс функция PieceCount - работа достойная уважения. Но экономия рабочего времени за счёт ошибочных расчётов?! - вот это решать каждому персонально (-:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Ёксель-моксель, с файлом "post_311043.xls" я ознакомился самым подробным образом. Проверил все наверное раз двадцать, ведь с помощью  PieceCount планируется работать, и тут не до шуток. Так вот чтобы не быть голословным, посмотрите результаты раскроя варианта 3 при разных алгоритмах. В других вариантах как я уже писал выше может получиться так, что коммерческя программа насчитывает больше заготовок, чем нужно на самом деле.  
 
http://zalil.ru/32762218
 
Ёксель-моксель  
Собственно, моя реплика относилась не к вашему нику, а к некоторой бездоказательности утверждений. Чтобы не толочь воду в ступе выкладываю файл с раскроем, удовлетворяющим требованиям (показано дополнительно на сводных таблицах). Да и в исходных - идеал 7.5, алгоритм выдал 8 - это ведь не противоречие? Кстати, по совдным хорошо видно особенность работы "жадного" алгоритма.  
 
gorAi  
В файле есть подправленная функция PieceCount2. В ней добавлены параметры:  
3 - PieceIndent сумма отступов от краёв заготовки.  
4 - Gap ширина зазора (реза) между выкройками (препологается, что для первой и последней выкройки полуширина зазора перекрывается с отступом от края заготовки).  
 
В принципе, достаточно и спасибо. Задачей занимался ради своего удовольствия. Да и функция работает только с целыми числами. (0.2 будет интерпретироваться как 0). Но если вы придерживаетесь принципа donate, то можно на яндекс деньги 41001116945983. На всякий случай e-mail anvg@mail333.com, если возникнет потребоность углубить сотрудничество.  
 
P. S. Не претендую на то, что реализовал идеальный алгоритм. Возможно он оказался чуть эффективнее на примерах программ в силу своей линейности (верёвочности). Есть варианты - было бы время попробовать :-(
 
2 gorAi  
>>> с файлом "post_311043.xls" я ознакомился самым подробным образом...  
>>> ведь ... эти параметры (отступы от краев заготовки, ширину реза) нужно задавать обязательно...  
 
Сложите 346 + 763 + 789 + 852 (Лист 1 раскроя в "post_311093.JPG") и Вы получите 2750.  
Сложите 114 + 211 + 525 + 526 + 687 + 687 (Лист 2 раскроя в "post_311093.JPG")и Вы получите 2750.  
 
Из этого следует, что и отступы от краев заготовки и ширина реза при моём расчёте заданы равными "0".  
Отсюда и мой вывод о спешном или неполном изучении Вами предоставленных мною аргументов (-:  
 
>>> ...посмотрите результаты раскроя варианта 3 при разных алгоритмах  
Посмотрел, и признаю Вашу правоту! При необходимости раскроить погонажный материал ДО этого использовал программу для раскроя листового материала Cutting2 (задавая ширину заготовки =50мм). Теперь раскрой погонажа - ТОЛЬКО от CuttingLine! Бесплатные благодарности 2 gorAi от моего шефа (-:  
 
2 anvg  
>>> Собственно, моя реплика относилась не к вашему нику, а к некоторой бездоказательности утверждений...  
Ок, бездоказательность практической эффективности PieceCount и рассматривалась мною. Я повторюсь про адепта и коммерциализации доказанной PieceCount хотя бы в масштабах мебельных кампаний Калининградской области (-: Юрий М если что проверит, я надеюсь! (-:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Ёксель-моксель, а по криволинейному раскрою листа опыт имеется?  
Тоже интересуюсь :)
 
Ёксель-моксель  
Что ж продолжим оффтоп  
>>Разместить 23 отрезка на 8 заготовках погонажа невозможно    
 
Привёл в файле post_311492.rar на сводных раскладки по заготовкам - 8 штук. Был ли он вами просмотрен? Что там невозможного?  
Возможно, весь сыр-бор связан с тем, что у вас в варианте 3 длина 687 введена два раза с количествами 3 и 1. Скорее всего в программу для файла post_311093.JPG были введены разные длины, а не дважды: 687 числом 3 и 687 числом 1.  
 
>>>Ок, бездоказательность практической эффективности PieceCount и рассматривалась мною. Я повторюсь про адепта и коммерциализации доказанной PieceCount хотя бы в масштабах мебельных кампаний Калининградской области (-: Юрий М если что проверит, я надеюсь! (-:  
 
Что в этом тексте считать доказательством моей не правоты?
 
anvg >>> Привёл в файле post_311492.rar на сводных раскладки по заготовкам - 8 штук. Был ли он вами просмотрен? Что там невозможного?  
В предыдущем своём посте я уже признал свою неправоту (-: Разместить 23 детали на 8 заготовках возможно. И это подтверждено gorAi в http://zalil.ru/32762218.  
anvg >>> Что в этом тексте считать доказательством моей не правоты?  
Речь в этом тексте не шла о доказательствах. О доказательствах речь шла выше, где я сравнивал PieceCount и Cutting.  
На работе буду делать линейный раскрой в Cutting, CuttingLine и в PieceCount паралельно. О результатах буду периодически отписываться.  
kim >>> по криволинейному раскрою листа опыт имеется?  
Нет, не сталкивался. Но тоже интересно.
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
Страницы: 1
Читают тему
Наверх