|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
LISP. Задача оптимизации раскроя
Регистрация: 30.03.2012
Сообщений: 101
|
||
Просмотров: 4650
|
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Задача за которую Вы беретесь весьма не простая и в то же время интересная. Я не знаю область применения Вашего случая, но в большинстве своем брутфорсовые алгоритмы здесь не применимы (время поиска растет в геометрической прогрессии). Перед тем как подбирать решение, не забудьте про существенные важные физические факторы - каким методом проводиться резка - необходимо ли учитывать ширину фрезы, карта раскроя может быть любой или, под т.н. "гильотинную резку" - то есть рез может быть осуществлен только от края до края (большинство технологических процессов в реальности рассчитываются именно так), есть ли технологический смысл оптимизировать с учетом т.н. "полезных остатков" - то вводиться некий коэффицент соотношения остатка площади, на их количество и близость их к квадрату (проще говоря выгодней оставить пол листа 1 куском под будущею оптимизацию, чем 2\3 площади нарезанных на пять кусков - которые пойдут в мусор). Сейчас может ситуация и изменилась, но несколько лет назад, хорошие вероятностные алгоритмы (с нормальным коэффицентом оптимизации к времени выполнения), можно было только купить, да и то не сами алгоритмы, а в виде библиотек. Если Вам требуется сделать не абы как - а для крупного производства - то это наверное и сейчас самый правильный метод - окупиться очень быстро на сэкономленном материале - просто этот шаг надо "грамотно" обосновать с учетом человеко-часов на Вашу разработку (причем не факт что сделаете лучше) и соотношения реальной производительности Вашего решение к уже готовому. По поводу вопроса, я при всей своей любви к лиспу не стал-бы реализовывать "основной алгоритм" оптимизации на нем (в данном случая я имею в виду автолисп, на других диалектах кстати весьма вероятно) - т.к. задача это очень ресурсоемкая, да и "велосипедов" придется написать не мало. Но повторюсь все зависит от задачи - если она не выходит за рамки Вашего примера, то никаких проблем в бутфорсировании ее автолиспом я не вижу - вводите критерии оптимальности Ваших условий, шаги изменения (перебора взаимного размещения элементов) и ищете лучший.
з.ы. чуть не забыл, если все-же автолисп - то я бы рекомендовал связаться с Елпановым Евгением, вполне возможно он сможет поделиться с Вами какой либо частью своих разработок в этой области на какой-либо основе. з.з.ы есть вполне рабочие демоверсии коммерческого ПО, по которым Вы сможете оценить и продемонстрировать реальную производительность и эффективность оптимизации.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 11.05.2014 в 10:42. |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Дима_, спасибо за мысли.
Задачу решаю по большей части из практического и спортивного интереса. Стоит она именно так, как я описал. То есть учёта допусков на ширину фрезы нет, а также "гильотинность" резки не важна. На данный момент целевая оптимизация - по минимуму площади на которой будет произведено размещение. Поэтому время на решение задачи в данной постановке еще вполне приемлимо для варианта полного перебора (если не ошибаюсь nlog(n)) и тут, я думаю, трудностей с ресурсами возникнуть не должно. В моем случае количество размещаемых прямоугольников - десяток другой. Да, знаю, что существует специальное ПО. Есть оно и у меня. Но, согласитесь, удобней выделить что то непосредственно в акаде, чем забивать размеры в стороннее ПО. Да, знаю, что Евгений Елпанов решил задачу еще более сложную по размещению фасонных деталей! Но, боюсь, там и подход абсолютно другой и намного сложнее. У меня всё таки надежда, что для прямоугольных областей всё будет доступно даже таким как я. Ну и конечно будет прекрасно, если подобные Вам мастера подключатся к решению. Да, есть и готовые решения на других языках. В частности по ссылке. Я, конечно, не многими владею, но насколько знаю, какой то сильно более подходящей структуры в других языках тоже нет. То, что Вы говорите, что в указанных рамках задачу решать можно и на лиспе, радует. Какую структуру представления информации выбрали бы Вы? Я подозреваю, что это один из ключевых моментов в решении и если здесь принять неоптимальное решение, то возни с кодом будет намного больше, чем могло бы быть. Да, кстати, было поздно и я забыл написать, что еще в каждом списке есть элемент, отражающий занята ячейка или нет (0 и 1 как классический вариант), то есть (x y w h 0) к примеру. Есть и другой подход из более менее простых, который, видимо, ближе по структуре к лиспу, но там не совсем понятный мне критерий размещения в ту или иную ячейку нового прямоугольника. Ознакомиться можно по ссылке http://www.blackpawn.com/texts/lightmaps/default.html Как считаете, какой проще в реализации? |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
А в автолиспе кроме списков ничего и нет (задавать длинной\шириной и 1 координатой, либо координатами углов - разницы большой нет - что удобней - зависит от реализации).
Цитата:
Второй проще, но оба алгоритма ой как далеки от оптимальности - "разрежьте" произвольный прямоугольник перпендикулярными резами и сложите вручную получившееся по любому из них - в редких случаях Вы получите исходный обратно. До кучи они еще оба ограниченны только одним положением исходных прямоугольников (это нужно только если материал имеет направление/фактуру) в остальных случаях надо проверять оба положения (какое задали и повернутое на 90 гр.) Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 480
|
Все это конечно похвально, но я бы пошел другим путем. Более простым.
Существуют готовые продукты, которые решают задачи раскроя. Например всем известный Cutting. Сам интерфейс (имхо) оставляет желать лучшего, но в этой программе есть замечательная возможность, - чтение данных из текстового файла. По сути нужно сделать некий модуль в виде посредника между автокадом и каттингом. Т.е. пользователь формирует данные в автокаде, затем промежуточный модуль конвертирует эти данные в текстовый файл, который нужен каттингу. В каттинге делаем раскрой. И собственно все! Вот пример реализации того о чем я говорил. Делал для себя, можно наворачивать до бесконечности. Реализовано для 3DSolid'ов - составляется спецификация, подготавливаются данные для каттинга. Ориентировано на мебель. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
О, каждый день этим занимаюсь (в смысле развертками)
![]() У нас детали все очень сложные и просто прямоугольниками не обойтись. Более менее приемлемого софта так и не нашлось. Приходится все ручками делать. Даже не знаю, как можно подступиться к решению такой задачи как автоматизация раскроя. Кто сделает такую программу - памятник при жизни! ![]() |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Боюсь он тоже не в силах помочь.
![]() Ну уж точно не из золота ![]() ![]() В моем случае задача сводится не только к прямоугольникам, а большей частью к разверткам конусов, отводов, переходников, много шайб и крышек, а это несколько непрямоугольные элементы ![]() Так что задача больше кажется невыполнимой - компьютер ведь не заставить думать и мыслить как человек. Или я не прав? Как алгоритм решения думаю, что надо сперва на развертку добавить внешний отступ в половину минимального расстояния между развертками, такой же отступ, только уже внутренний добавить от края нарезаемого листа. Потом располагать детали в порядке убывания площади/периметра насколько возможно минимально плотно друг к другу. Большинство готовых решений подразумевает оптимизацию одинаковых деталей, а например в моем случае, процент одинаковости упорно стремится к нулю ![]() |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 480
|
http://nesting.astrapro.ru/
http://tehtran.com/nestf.html http://www.haitek.ru/products/sirius.php что это за программы я не знаю, больше ничего не могу сказать. Знаю, еще у одного знакомого на работе есть ЧПУ-шная плазменная резка. Со станком идет какая то прога. В нее закидываются (грубо говоря) контур деталей и их количество, а прога сама размещает эти детали на листе. Поэтому 100% такие программы есть, погуглите - фигурный раскрой еще, что нашел: http://www.exactcam.com/ru/SampleNesting.htm http://www.tflex.ru/products/priklad/raskr/ http://softpartal-com.narod.ru/index.htm http://www.bestdownloads.ru/soft/plotcalc/1676/ p.s. ничего не проверял Последний раз редактировалось gumel, 19.05.2014 в 09:42. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какой язык перспективен для инженера-конструктора с условием | The_Mercy_Seat | Программирование | 705 | 17.03.2021 14:19 |
{Конкурс} Lisp. Задачки для студентов | gomer | LISP | 10 | 05.01.2011 16:33 |
Дурацкая задача по оптимизации | Kross-vort | Разное | 8 | 04.10.2010 13:27 |
задача для LISP | RSD | LISP | 5 | 22.08.2005 12:59 |
загрузка DOS прог через LISP | Gaa | LISP | 15 | 12.08.2005 19:19 |