Алгоритм оптимизации разреза - PullRequest
3 голосов
/ 05 декабря 2010

Мне и некоторым моим друзьям в колледже было поручено разработать сетевое приложение для оптимизации резки прямоугольных деталей из какого-либо материала.Что-то вроде приложений в этом списке, но более упрощенное.В основном, мне интересно, есть ли какой-нибудь исходный код для этого вида алгоритмов оптимизации, доступных в Интернете.Я планирую разработать приложение с использованием платформы Adobe Flex.Программная часть будет выполнена в Actionscript 3, ofc.Однако я сомневаюсь, что есть какие-либо примеры оптимизации для этого языка.Хотя могут быть некоторые для Java, C ++, C #, Ruby или Python и других более популярных языков (тогда мне просто нужно переписать его в AS)Так что, если кто-нибудь знает какие-нибудь бесплатные библиотеки или примеры кода алгоритма, которые мне подходят, я бы хотел услышать ваши предложения.:)

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

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

http://www.intechopen.com/articles/show/title/a_greedy_algorithm_with_forward-looking_strategy

Нет кода, но алгоритм описан достаточно подробно, чтобы его было не сложно реализовать.Я реализовал это с помощью C # (извините, не могу поделиться этим кодом) и был очень доволен результатом.

1 голос
/ 06 декабря 2010

Это звучит так же, как проблема резания заготовки , которая чрезвычайно сложна! В лучших решениях используется линейное программирование (обычно основанное на симплекс-методе) с генерацией столбцов (которая даже послегоды, проведенные в исследовательском проекте по решению проблем, я чувствую себя не готовым дать достаточно приличное объяснение).Короче говоря, вы не захотите попробовать этот подход в Actionscript;следовательно, независимо от того, что вы делаете, вы не должны ожидать хороших результатов ни с чем, кроме мелких проблем.

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

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

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

Надеюсь, это поможет.

0 голосов
/ 05 декабря 2010

У меня были проблемы с поиском примеров, когда я хотел сделать то же самое для деревообрабатывающей компании, в которой я работаю. Сама проблема NP-сложна, поэтому вам нужно использовать алгоритм аппроксимации, такой как алгоритм первого или наилучшего соответствия. Сделайте поиск для 2d алгоритмов упаковки бина. На той, которую я нашел, вы сортируете панели по размеру от самых больших к маленьким, а затем добавляете их к листам по порядку, помещая первую ячейку, в которую она поместится. Извините, у меня нет кода со мной и его на vb.net.

...