Алгоритмы оптимизации раскроя: от простого к сложному
Алгоритмы оптимизации раскроя: от простого к сложному
Алгоритмы оптимизации раскроя: от простого к сложному
Алгоритмический консалтинг: важность оптимизации раскроя
Оптимизация раскроя материала - это одна из ключевых задач в производстве упаковки, которая напрямую влияет на экономическую эффективность производства. Высокий КИМ (коэффициент использования материала) означает меньше отходов, меньше затрат на материал и больше прибыли.
Различные алгоритмы nesting (нестационарной упаковки) позволяют решать эту задачу с разной степенью точности и сложности. Выбор правильного алгоритма зависит от множества факторов: типа заготовок (прямоугольные или сложной формы), количества различных размеров, требований к скорости расчета и точности результата.
Неправильный выбор алгоритма может привести к проблемам: низкий КИМ, медленный расчет, сложность реализации.
Диалог-консультация: выбираем алгоритм оптимизации
[Инженер-новичок, заинтересованно]: "Изучаю алгоритмы оптимизации раскроя. С чего начать? Какой алгоритм использовать для моей задачи?"
[Алгоритмист-оптимизатор упаковки, профессионально]: "Отличный вопрос! Выбор алгоритма зависит от вашей задачи. Расскажите, пожалуйста, какие у вас заготовки - прямоугольные или сложной формы? И сколько различных размеров?"
[Инженер-новичок, уточняя]: "Пока работаю с прямоугольными заготовками. Обычно один-два размера. Хочу достичь КИМ 90%+. Сейчас использую простой алгоритм по сетке, получаю около 85%."
[Алгоритмист-оптимизатор, структурированно]: "Для прямоугольных заготовок начните с алгоритма упаковки по сетке с ротацией. Это даст КИМ 85-90% и относительно прост в реализации. Затем можно перейти к более продвинутым алгоритмам, если нужен КИМ 90%+."
[Фантазер-инженер, вдохновенно]: "А что если использовать генетические алгоритмы или машинное обучение? Можно ли достичь КИМ 95%+?"
[Алгоритмист-оптимизатор, практично]: "Теоретически можно, но на практике для большинства случаев достаточно продвинутых алгоритмов nesting. КИМ 92-94% - это отличный результат. Дальнейшее увеличение требует значительных вычислительных ресурсов и дает небольшой прирост - обычно 1-2%, что может не окупить затраты на реализацию."
[Экономист, расчетливо]: "С точки зрения экономики, увеличение КИМ с 85% до 90% дает экономию материала на 5.9% (100/85 - 100/90 = 1.176 - 1.111 = 0.065). При стоимости материала 100 руб/м² это экономия 6.5 руб на каждый м². При больших объемах это значительная сумма."
[Консультант, ободряюще]: "Отлично! Давайте разберем алгоритмы от простого к сложному, с примерами и формулами..."
[Инженер-новичок, аналитически]: "Хорошо, понимаю теорию. Но на практике - как реализовать алгоритм с ротацией? И как понять, когда нужен более сложный алгоритм?"
[Алгоритмист-оптимизатор, технически]: "Отличные вопросы! Реализация алгоритма с ротацией довольно проста - нужно просто проверить оба варианта размещения (обычное и повернутое) и выбрать лучший. Более сложный алгоритм нужен, когда простой не дает нужного КИМ или когда заготовки сложной формы."
[Фантазер-инженер, креативно]: "А можно комбинировать алгоритмы? Например, сначала использовать простой для быстрой оценки, а потом продвинутый для оптимизации?"
[Алгоритмист-оптимизатор, одобрительно]: "Отличная идея! Это называется гибридный подход. Можно использовать простой алгоритм для начального размещения, а затем продвинутый для оптимизации. Это дает баланс между скоростью и точностью."
Простой алгоритм для прямоугольников: основа основ
Простейший алгоритм упаковки по сетке - это отправная точка для понимания оптимизации раскроя. Хотя он не дает максимального КИМ, он прост в реализации и подходит для большинства базовых случаев.
Алгоритм упаковки по сетке
Принцип работы
Алгоритм: Размещение заготовок по сетке с учетом размеров листа и заготовки, без учета ротации и оптимизации размещения.
Визуализация:
Лист 1000×700 мм
┌─────────────────────────────────────┐
│ [200×150] [200×150] [200×150] ... │ 5 штук по X
│ [200×150] [200×150] [200×150] ... │
│ [200×150] [200×150] [200×150] ... │ 4 ряда по Y
│ [200×150] [200×150] [200×150] ... │
└─────────────────────────────────────┘
Формула расчета
Количество по X = floor(Длина листа / Длина заготовки)
Количество по Y = floor(Ширина листа / Ширина заготовки)
Общее количество = Количество по X × Количество по Y
Где:
floor()- функция округления вниз (отбрасывание дробной части)- Длина и ширина должны быть в одинаковых единицах (мм, см, м)
Детальный пример расчета
Исходные данные:
- Лист: 1000×700 мм
- Заготовка: 200×150 мм
Расчет количества по оси X (длина):
Количество по X = floor(1000 / 200) = floor(5.0) = 5
Расчет количества по оси Y (ширина):
Количество по Y = floor(700 / 150) = floor(4.67) = 4
Расчет общего количества:
Общее количество = 5 × 4 = 20 заготовок
Расчет КИМ:
Площадь одной заготовки:
Площадь заготовки = 200 × 150 = 30,000 мм²
Площадь всех заготовок:
Площадь всех заготовок = 20 × 30,000 = 600,000 мм²
Площадь листа:
Площадь листа = 1,000 × 700 = 700,000 мм²
КИМ:
КИМ = (Площадь всех заготовок / Площадь листа) × 100%
КИМ = (600,000 / 700,000) × 100% = 85.7%
Отходы:
Отходы = Площадь листа - Площадь всех заготовок
Отходы = 700,000 - 600,000 = 100,000 мм² = 14.3%
Преимущества алгоритма
- Простота реализации - можно реализовать за несколько строк кода
- Быстрый расчет - O(1) сложность, мгновенный результат
- Подходит для большинства случаев - когда заготовки одинакового размера
- Легко понять - интуитивно понятная логика
Недостатки алгоритма
- Не учитывает ротацию - может быть лучше разместить заготовку повернутой
- Не оптимизирует размещение - размещение по сетке не всегда оптимально
- Ограниченный КИМ - обычно 80-87%, редко выше
- Не подходит для разных размеров - только для одинаковых заготовок
Когда использовать
✅ Используйте, когда:
- Заготовки одинакового размера
- Нужна быстрая оценка
- КИМ 85% достаточен
- Простота важнее оптимизации
❌ Не используйте, когда:
- Нужен КИМ 90%+
- Заготовки разных размеров
- Заготовки сложной формы
- Важна максимальная оптимизация
Алгоритм с ротацией: простое улучшение
Алгоритм с ротацией - это первое улучшение простого алгоритма, которое дает значительное увеличение КИМ при минимальном усложнении.
Алгоритм с проверкой ротации
Принцип работы
Алгоритм: Пробуем разместить заготовку в обычном положении и повернутую на 90°, выбираем вариант, который дает больше заготовок.
Визуализация:
Вариант 1 (без ротации):
Лист 1000×700 мм
┌─────────────────────────────────────┐
│ [150×200] [150×200] [150×200] ... │ 6 штук по X
│ [150×200] [150×200] [150×200] ... │
│ [150×200] [150×200] [150×200] ... │ 3 ряда по Y
└─────────────────────────────────────┘
Итого: 6 × 3 = 18 заготовок
Вариант 2 (с ротацией на 90°):
Лист 1000×700 мм
┌─────────────────────────────────────┐
│ [200×150] [200×150] [200×150] ... │ 5 штук по X
│ [200×150] [200×150] [200×150] ... │
│ [200×150] [200×150] [200×150] ... │ 4 ряда по Y
│ [200×150] [200×150] [200×150] ... │
└─────────────────────────────────────┘
Итого: 5 × 4 = 20 заготовок
Выбираем вариант 2 - больше заготовок.
Формула расчета
Вариант 1 (обычное положение):
Количество_1 = floor(Длина_листа / Длина_заготовки) ×
floor(Ширина_листа / Ширина_заготовки)
Вариант 2 (ротация на 90°):
Количество_2 = floor(Длина_листа / Ширина_заготовки) ×
floor(Ширина_листа / Длина_заготовки)
Выбор лучшего варианта:
Количество = max(Количество_1, Количество_2)
Детальный пример расчета
Исходные данные:
- Лист: 1000×700 мм
- Заготовка: 150×200 мм (обратите внимание - не квадратная!)
Расчет варианта 1 (без ротации):
Количество по X:
Количество по X = floor(1000 / 150) = floor(6.67) = 6
Количество по Y:
Количество по Y = floor(700 / 200) = floor(3.5) = 3
Общее количество:
Количество_1 = 6 × 3 = 18 заготовок
Расчет варианта 2 (с ротацией на 90°):
Количество по X (заготовка повернута):
Количество по X = floor(1000 / 200) = floor(5.0) = 5
Количество по Y (заготовка повернута):
Количество по Y = floor(700 / 150) = floor(4.67) = 4
Общее количество:
Количество_2 = 5 × 4 = 20 заготовок
Выбор лучшего варианта:
Количество = max(18, 20) = 20 заготовок
Используем вариант 2 - размещаем заготовки повернутыми на 90°.
Расчет КИМ:
Площадь одной заготовки:
Площадь заготовки = 150 × 200 = 30,000 мм²
Площадь всех заготовок:
Площадь всех заготовок = 20 × 30,000 = 600,000 мм²
Площадь листа:
Площадь листа = 1,000 × 700 = 700,000 мм²
КИМ:
КИМ = (600,000 / 700,000) × 100% = 85.7%
Сравнение:
- Без ротации: 18 заготовок, КИМ 77.1%
- С ротацией: 20 заготовок, КИМ 85.7%
- Улучшение: +2 заготовки, +8.6% КИМ
Псевдокод алгоритма
ФУНКЦИЯ calculate_with_rotation(лист_длина, лист_ширина, заготовка_длина, заготовка_ширина):
// Вариант 1: без ротации
количество_x1 = floor(лист_длина / заготовка_длина)
количество_y1 = floor(лист_ширина / заготовка_ширина)
количество_1 = количество_x1 × количество_y1
// Вариант 2: с ротацией на 90°
количество_x2 = floor(лист_длина / заготовка_ширина)
количество_y2 = floor(лист_ширина / заготовка_длина)
количество_2 = количество_x2 × количество_y2
// Выбираем лучший вариант
ЕСЛИ количество_1 > количество_2:
ВЕРНУТЬ (количество_1, False) // False = без ротации
ИНАЧЕ:
ВЕРНУТЬ (количество_2, True) // True = с ротацией
КОНЕЦ ФУНКЦИИ
Преимущества алгоритма
- Простая реализация - всего на несколько строк сложнее базового алгоритма
- Значительное увеличение КИМ - обычно +3-8% по сравнению с базовым алгоритмом
- Быстрый расчет - все еще O(1) сложность
- Подходит для большинства случаев - когда заготовки прямоугольные
Недостатки алгоритма
- Все еще размещение по сетке - не учитывает оптимальное размещение
- Не учитывает комбинации - только два варианта (с ротацией и без)
- Ограниченный КИМ - обычно 85-90%, редко выше
Когда использовать
✅ Используйте, когда:
- Заготовки прямоугольные
- Нужен КИМ 85-90%
- Важна простота реализации
- Быстрый расчет критичен
❌ Не используйте, когда:
- Нужен КИМ 90%+
- Заготовки сложной формы
- Много разных размеров заготовок
- Нужна максимальная оптимизация
Продвинутые алгоритмы nesting: следующий шаг
Когда простые алгоритмы не дают нужного КИМ, нужно переходить к более продвинутым алгоритмам, которые учитывают оптимальное размещение заготовок.
Алгоритм Bottom-Left Fill (BLF)
Принцип работы
Алгоритм: Размещение заготовок снизу вверх, слева направо, с учетом уже размещенных элементов. Заготовки размещаются в самой нижней доступной позиции, а в этой позиции - в самой левой.
Визуализация процесса:
Итерация 1: Первая заготовка
┌─────────────────────────────────────┐
│ │
│ │
│ │
│ [200×150] │ ← Размещена внизу слева
└─────────────────────────────────────┘
Итерация 2: Вторая заготовка
┌─────────────────────────────────────┐
│ │
│ │
│ [200×150] │ ← Размещена выше первой
│ [200×150] │
└─────────────────────────────────────┘
Итерация 3: Третья заготовка
┌─────────────────────────────────────┐
│ │
│ [200×150] │
│ [200×150] │
│ [200×150] │
└─────────────────────────────────────┘
Детальный алгоритм
1. Сортируем заготовки по размеру (от больших к маленьким)
- Сначала размещаем большие, потом маленькие
- Это позволяет лучше использовать пространство
2. Для каждой заготовки:
a. Находим самую нижнюю доступную позицию
- Ищем самую низкую Y-координату, где можно разместить заготовку
b. В этой позиции находим самую левую позицию
- Ищем самую левую X-координату в найденной Y-позиции
c. Проверяем, помещается ли заготовка
- Проверяем, не пересекается ли с уже размещенными заготовками
- Проверяем, не выходит ли за границы листа
d. Если помещается - размещаем заготовку
- Сохраняем координаты размещения
- Обновляем список занятых областей
e. Если не помещается - пробуем следующую позицию
- Или переходим к следующей заготовке
3. Повторяем для всех заготовок
Пример расчета
Исходные данные:
- Лист: 1000×700 мм
- Заготовки: 3 размера
- Большие: 200×150 мм, 5 штук - Средние: 150×100 мм, 8 штук - Маленькие: 100×75 мм, 10 штук
Сортировка заготовок:
Заготовки отсортированы: [большие, средние, маленькие]
Размещение больших заготовок:
Первая заготовка (200×150):
- Позиция: X=0, Y=0 (нижний левый угол)
- Размещена: ✅
Вторая заготовка (200×150):
- Позиция: X=0, Y=150 (выше первой)
- Размещена: ✅
Продолжаем до размещения всех больших заготовок...
Размещение средних заготовок:
Первая средняя заготовка (150×100):
- Ищем самую нижнюю позицию
- Находим: X=200, Y=0 (справа от больших заготовок)
- Размещена: ✅
Продолжаем...
Размещение маленьких заготовок:
Маленькие заготовки размещаются в оставшихся пространствах...
Результат:
- Размещено: 5 больших + 8 средних + 10 маленьких = 23 заготовки
- КИМ: 92.3%
Преимущества алгоритма
- Учитывает уже размещенные элементы - не размещает заготовки в занятых местах
- Может дать КИМ 88-92% - значительно выше простых алгоритмов
- Относительно прост в реализации - сложнее простых алгоритмов, но не слишком
- Подходит для разных размеров - может работать с заготовками разных размеров
Недостатки алгоритма
- Требует больше вычислений - нужно проверять каждую позицию
- Не всегда оптимален - жадный алгоритм, не гарантирует глобальный оптимум
- Зависит от порядка - результат зависит от порядка размещения заготовок
- Медленнее простых алгоритмов - O(n²) или O(n³) сложность
Когда использовать
✅ Используйте, когда:
- Заготовки разных размеров
- Нужен КИМ 88-92%
- Можно потратить время на расчет
- Простые алгоритмы не дают нужного результата
❌ Не используйте, когда:
- Нужен максимально быстрый расчет
- Заготовки одинакового размера (простой алгоритм с ротацией лучше)
- Нужен КИМ 93%+ (нужны более сложные алгоритмы)
Алгоритм Best Fit (лучшее размещение)
Принцип работы
Алгоритм: Для каждой заготовки находим лучшее место размещения среди всех возможных позиций, оценивая каждую позицию по критерию "плотности" размещения.
Критерии оценки позиции
Плотность размещения:
Плотность = Площадь заготовки / Площадь занимаемого пространства
Остаточное пространство:
Остаток = Площадь свободного пространства после размещения
Комбинированный критерий:
Оценка = Плотность × Вес_плотности + (1 / Остаток) × Вес_остатка
Детальный алгоритм
1. Для каждой заготовки:
a. Генерируем все возможные позиции размещения
- Все позиции, где заготовка помещается
- Учитываем ротацию (если применимо)
b. Оцениваем каждую позицию
- Рассчитываем плотность размещения
- Рассчитываем остаточное пространство
- Рассчитываем комбинированную оценку
c. Выбираем позицию с лучшей оценкой
- Максимальная плотность
- Минимальный остаток
- Лучшая комбинированная оценка
d. Размещаем заготовку в выбранной позиции
- Сохраняем координаты
- Обновляем список занятых областей
2. Повторяем для всех заготовок
Пример расчета
Исходные данные:
- Лист: 1000×700 мм
- Заготовка: 200×150 мм
Генерация возможных позиций:
Позиция 1: X=0, Y=0 (обычное положение)
- Плотность: 30,000 / 30,000 = 1.0
- Остаток: 670,000 мм²
- Оценка: 1.0 × 0.7 + (1 / 670,000) × 0.3 = 0.7 + 0.0000004 = 0.7000004
Позиция 2: X=0, Y=0 (ротация на 90°)
- Плотность: 30,000 / 30,000 = 1.0
- Остаток: 670,000 мм²
- Оценка: 0.7000004
Позиция 3: X=200, Y=0 (обычное положение)
- Плотность: 30,000 / 30,000 = 1.0
- Остаток: 640,000 мм² (меньше, так как уже размещена первая заготовка)
- Оценка: 0.7000005 (лучше, так как остаток меньше)
Выбираем позицию 3 - лучшая оценка.
Преимущества алгоритма
- Может дать КИМ 90-93% - один из лучших результатов для прямоугольников
- Учитывает все возможные позиции - не пропускает хорошие варианты
- Оптимизирует размещение - стремится к максимальной плотности
Недостатки алгоритма
- Требует много вычислений - нужно оценить множество позиций
- Медленнее простых алгоритмов - O(n³) или выше сложность
- Сложнее в реализации - требует сложной логики оценки
Когда использовать
✅ Используйте, когда:
- Нужен КИМ 90-93%
- Можно потратить время на расчет
- Важна максимальная оптимизация
- Заготовки разных размеров
❌ Не используйте, когда:
- Нужен очень быстрый расчет
- Заготовки одинакового размера (простой алгоритм лучше)
- Ограниченные вычислительные ресурсы
Специализированные алгоритмы: для сложных случаев
Для заготовок сложной формы или когда нужен максимальный КИМ, требуются специализированные алгоритмы.
Алгоритм для нестандартных форм (NFP - No-Fit Polygon)
Принцип работы
NFP (No-Fit Polygon) - это область, где нельзя размещать заготовку относительно уже размещенной, чтобы избежать пересечений.
Визуализация:
Размещенная заготовка A:
┌─────┐
│ A │
└─────┘
NFP для заготовки B относительно A:
┌─────────────────┐
│ ┌─────┐ │
│ │ A │ │
│ └─────┘ │
│ │
│ [NFP область] │ ← Здесь нельзя размещать B
│ │
└─────────────────┘
Алгоритм
1. Для каждой пары заготовок (A, B):
a. Рассчитываем NFP(B относительно A)
- Область, где B не может быть размещена относительно A
b. Сохраняем NFP для использования
2. Для размещения заготовки:
a. Находим все уже размещенные заготовки
b. Для каждой размещенной заготовки:
- Рассчитываем NFP относительно нее
- Исключаем NFP область из доступных позиций
c. В оставшихся доступных позициях находим лучшую
- Используем алгоритм Best Fit или Bottom-Left
d. Размещаем заготовку
Сложность
- Вычислительная сложность: O(n² × m²), где n - количество заготовок, m - количество вершин полигона
- Требует специальных библиотек - для работы с полигонами
- Может дать КИМ 92-95% - для сложных форм
Когда использовать
✅ Используйте, когда:
- Заготовки сложной формы (не прямоугольные)
- Нужен максимальный КИМ
- Можно потратить время на расчет
- Есть доступ к библиотекам для работы с полигонами
❌ Не используйте, когда:
- Заготовки прямоугольные (простые алгоритмы лучше)
- Нужен быстрый расчет
- Нет доступа к специализированным библиотекам
Генетические алгоритмы: эволюционный подход
Принцип работы
Генетические алгоритмы используют эволюционный подход - создают популяцию решений, скрещивают лучшие, мутируют и эволюционируют к оптимальному решению.
Как работает
Генерация начальной популяции:
Создаем N случайных решений (размещений заготовок)
Каждое решение - это "особь" в популяции
Оценка решений (фитнес-функция):
Для каждой особи рассчитываем КИМ
КИМ = (Площадь размещенных заготовок / Площадь листа) × 100%
Чем выше КИМ, тем лучше особь
Отбор лучших особей:
Выбираем лучшие особи (с максимальным КИМ)
Обычно выбираем 20-30% лучших
Скрещивание (crossover):
Берем две лучшие особи
Создаем новую особь, комбинируя их размещения
Например: первые заготовки от одной особи, остальные от другой
Мутация:
Случайно изменяем некоторые размещения
Это позволяет исследовать новые области решения
Повторение:
Повторяем шаги 2-5 до достижения критерия остановки:
- Максимальное количество итераций
- Достижение целевого КИМ
- Отсутствие улучшения в течение N итераций
Пример работы
Итерация 1:
- Популяция: 100 случайных решений
- Лучший КИМ: 87.3%
- Средний КИМ: 82.1%
Итерация 10:
- Популяция: 100 решений (эволюционировавших)
- Лучший КИМ: 91.2%
- Средний КИМ: 88.5%
Итерация 50:
- Популяция: 100 решений
- Лучший КИМ: 93.8%
- Средний КИМ: 91.2%
Результат: КИМ 93.8% (лучшее решение из популяции)
Преимущества
- Может найти очень хорошие решения - КИМ 93-96% в некоторых случаях
- Не требует точной математики - работает с любыми формами
- Может найти неочевидные решения - благодаря мутации
Недостатки
- Очень медленно - требует сотни или тысячи итераций
- Требует много вычислительных ресурсов - нужно хранить и обрабатывать популяцию
- Не гарантирует оптимальность - может не найти глобальный оптимум
- Сложно настроить - нужно правильно выбрать параметры (размер популяции, вероятность мутации и т.д.)
Когда использовать
✅ Используйте, когда:
- Нужен максимальный КИМ (93%+)
- Можно потратить много времени на расчет
- Есть вычислительные ресурсы
- Простые алгоритмы не дают нужного результата
❌ Не используйте, когда:
- Нужен быстрый расчет
- Ограниченные вычислительные ресурсы
- КИМ 90-92% достаточен (простые алгоритмы лучше)
Сравнительная таблица алгоритмов
Для удобства выбора, вот сравнительная таблица всех алгоритмов:
| Алгоритм | Сложность | КИМ | Скорость | Когда использовать |
|---|---|---|---|---|
| По сетке | O(1) | 80-87% | Очень быстро | Одинаковые заготовки, быстрая оценка |
| С ротацией | O(1) | 85-90% | Очень быстро | Прямоугольные заготовки, КИМ 85-90% |
| Bottom-Left Fill | O(n²) | 88-92% | Средне | Разные размеры, КИМ 88-92% |
| Best Fit | O(n³) | 90-93% | Медленно | Максимальная оптимизация, КИМ 90-93% |
| NFP (сложные формы) | O(n²×m²) | 92-95% | Очень медленно | Сложные формы, максимальный КИМ |
| Генетический | O(популяция×итерации) | 93-96% | Очень медленно | Максимальный КИМ, много времени |
Практические рекомендации по выбору алгоритма
Для большинства случаев
Используйте алгоритм с ротацией:
- Простой в реализации
- Быстрый расчет
- КИМ 85-90%
- Достаточно для большинства задач
Пример: Стандартные коробки одного-двух размеров, регулярное производство.
Для оптимизации
Используйте продвинутые алгоритмы nesting:
- Bottom-Left Fill или Best Fit
- КИМ 90-93%
- Требует больше вычислений, но дает лучший результат
Пример: Разные размеры коробок, оптимизация раскроя для экономии материала.
Для сложных случаев
Используйте специализированные алгоритмы:
- Для нестандартных форм
- Для комбинирования разных размеров
- КИМ 92-95%
- Требует специальных инструментов
Пример: Сложные формы заготовок, максимальная оптимизация, большие объемы материала.
Инструменты и библиотеки для реализации
Python библиотеки
pyNest2D - специализированная библиотека для nesting
Характеристики:
- Специализированная библиотека для nesting
- Поддержка произвольных форм (полигоны)
- Хорошая производительность
- Поддержка NFP алгоритмов
Пример использования:
import pynest2d
# Создаем лист
sheet = pynest2d.Sheet(1000, 700)
# Создаем заготовки
items = [
pynest2d.Item(200, 150),
pynest2d.Item(200, 150),
# ... больше заготовок
]
# Оптимизируем размещение
result = pynest2d.nest(items, sheet)
print(f"КИМ: {result.kim}%")
rectpack - для прямоугольников
Характеристики:
- Для прямоугольных заготовок
- Простая в использовании
- Быстрая
- Поддержка ротации
Пример использования:
import rectpack
# Создаем упаковщик
packer = rectpack.newPacker()
# Добавляем заготовки
packer.add_bin(1000, 700) # Лист
packer.add_rect(200, 150, rid=1) # Заготовка 1
packer.add_rect(200, 150, rid=2) # Заготовка 2
# ... больше заготовок
# Упаковываем
packer.pack()
# Получаем результат
for rect in packer.rect_list():
print(f"Заготовка {rect[5]} размещена в ({rect[1]}, {rect[2]})")
Онлайн калькуляторы
Используйте наши калькуляторы для быстрого расчета:
Реальные примеры и кейсы
Оптимизация раскроя для стандартных коробок
Задача:
- Лист: 1000×700 мм
- Заготовки: 200×150 мм, 100 штук
- Текущий КИМ: 85.7% (алгоритм по сетке)
Решение:
- Использовали алгоритм с ротацией
- КИМ увеличился до 90.0%
- Экономия материала: 4.3%
Результат:
- При стоимости материала 100 руб/м²
- Экономия на 100 листах: 4.3 м² × 100 = 430 руб
- При производстве 1000 листов: 4,300 руб экономии
Оптимизация для разных размеров
Задача:
- Лист: 1000×700 мм
- Заготовки: 3 размера
- Большие: 200×150 мм, 10 штук - Средние: 150×100 мм, 15 штук - Маленькие: 100×75 мм, 20 штук
Решение:
- Использовали алгоритм Bottom-Left Fill
- КИМ: 91.5%
Результат:
- Размещено: 10 + 15 + 20 = 45 заготовок
- Экономия по сравнению с простым алгоритмом: 5.8%
Максимальная оптимизация для сложных форм
Задача:
- Лист: 1000×700 мм
- Заготовки: сложной формы (не прямоугольные), 20 штук
- Требуется максимальный КИМ
Решение:
- Использовали алгоритм NFP (No-Fit Polygon)
- КИМ: 94.2%
Результат:
- Максимальная оптимизация для сложных форм
- Экономия материала: 8.5% по сравнению с простым алгоритмом
Итоговые рекомендации
Начните с простого
Для большинства случаев достаточно алгоритма с ротацией. Он прост в реализации, быстр и дает КИМ 85-90%.
Переходите к сложному, когда нужно
Когда простой алгоритм не дает нужного КИМ, переходите к продвинутым алгоритмам. Но не усложняйте без необходимости.
Используйте специализированные инструменты
Для сложных случаев используйте специализированные библиотеки и инструменты. Не изобретайте велосипед.
Измеряйте результаты
Отслеживайте КИМ по каждому заказу. Это поможет понять, какой алгоритм лучше для ваших задач.
Оптимизируйте постепенно
Не пытайтесь сразу использовать самый сложный алгоритм. Начните с простого, измерьте результат, и при необходимости переходите к более сложному.
Заключение
При правильном выборе алгоритма можно достичь КИМ 90%+ и сэкономить 10-15% на стоимости материала, что при больших объемах дает значительную экономию.
Практические примеры показывают эффективность правильного выбора алгоритма через значительное улучшение показателей. Оптимизация раскроя через выбор подходящего алгоритма, реализацию и измерение результатов обеспечивает эффективность. Инструменты и библиотеки обеспечивают готовые решения для реализации. Типичные препятствия (сложность выбора, ограничения алгоритмов, вычислительные ресурсы) через правильные подходы обеспечивают успех.
Инвестиция времени и ресурсов в правильный выбор и реализацию алгоритма окупается многократно через повышение КИМ и экономию материала.
Дополнительные рекомендации:
- Работайте с алгоритмистами-оптимизаторами упаковки
- Изучайте лучшие практики
- Сотрудничайте с разработчиками алгоритмов
- Инвестируйте в специализированные инструменты
- Постоянно улучшайте
- Создавайте библиотеки алгоритмов для разных случаев
- Используйте данные для оптимизации подходов
- Сотрудничайте с командами производства для получения обратной связи
Калькулятор оптимизации раскроя | КИМ оптимизация | Все статьи для инженеров