Разработка AI-системы оптимизации упаковки и палетизации
Выбор упаковки и укладки на паллет напрямую влияет на транспортные и складские расходы. AI-оптимизатор снижает количество паллет на 10–18% и подбирает тип упаковки с учётом защитных требований и стоимости.
Оптимизация размерного ряда упаковки
Задача: минимизировать количество типоразмеров коробок при максимальном заполнении. Слишком мало типоразмеров → много пустот. Слишком много → логистика SKU упаковки.
Алгоритм кластеризации габаритов товаров → k-means на (длина, ширина, высота) → оптимальные K типоразмеров упаковки. Критерий: среднее заполнение >85% при K ≤ 8–12 типоразмеров.
Оптимизация подбора коробки под товар:
from scipy.spatial import KDTree
import numpy as np
class PackagingSelector:
def __init__(self, available_boxes):
"""available_boxes: [(l, w, h, cost_per_unit), ...]"""
self.boxes = available_boxes
# KD-tree для быстрого поиска
dims = np.array([(b[0], b[1], b[2]) for b in available_boxes])
self.tree = KDTree(dims)
def select_optimal_box(self, product_dims, padding=0.02):
"""Найти минимальную коробку, в которую влезает товар с padding"""
l, w, h = product_dims
min_dims = np.array([l + padding, w + padding, h + padding])
# Фильтр: коробки, в которые влезает
valid = [b for b in self.boxes
if b[0] >= min_dims[0] and b[1] >= min_dims[1] and b[2] >= min_dims[2]]
if not valid:
return None # нужен нестандартный размер
# Из валидных выбрать с минимальным объёмом (или стоимостью)
return min(valid, key=lambda b: b[0] * b[1] * b[2])
def fill_rate(self, product_dims, box):
"""Коэффициент заполнения коробки"""
return np.prod(product_dims) / (box[0] * box[1] * box[2])
3D-палетизация
Задача укладки коробок на паллет: максимизировать количество коробок при устойчивости стопки.
Ограничения реальной палетизации:
- Максимальная высота (стандарт: 1.2 м до 1.8 м для еврошаблета)
- Максимальный вес (750–1000 кг)
- Тяжёлое снизу, лёгкое сверху
- Последовательность выгрузки: LIFO если мультидропп
- Нельзя смешивать несовместимые товары (химия / пища)
Layer-based палетизация:
Строим паллет послойно — каждый слой = набор коробок одной высоты:
- Группировка коробок по высоте (кластеризация ±2 см)
- Для каждого слоя: 2D bin packing (прямоугольная укладка с поворотами)
- Чередование слоёв с перевязкой для устойчивости
def layer_based_palletizer(boxes, pallet_l=1.2, pallet_w=0.8, max_height=1.8):
"""Упрощённая послойная палетизация"""
# Сортировка по высоте для формирования слоёв
sorted_boxes = sorted(boxes, key=lambda b: -b['h'])
layers = []
remaining = sorted_boxes.copy()
while remaining and sum(l['height'] for l in layers) < max_height:
# Новый слой: коробки близкой высоты
reference_h = remaining[0]['h']
layer_boxes = [b for b in remaining if abs(b['h'] - reference_h) <= 0.02]
# 2D bin packing для слоя
layer_items = pack_2d(layer_boxes, pallet_l, pallet_w)
if layer_items:
layers.append({'items': layer_items, 'height': reference_h})
remaining = [b for b in remaining if b not in layer_items]
else:
break
return layers
Интеграция с упаковочным оборудованием
Автоматические картонизаторы (IS machine, Packsize On Demand Packaging) принимают команды на размер коробки:
- API-интеграция: WMS → AI-оптимизатор → картонизатор → указание на нужный размер
- Для смешанных заказов: декомпозиция на несколько упаковок с минимальными пустотами
Роботизированная палетизация (FANUC, KUKA, ABB паллетайзеры):
- Система передаёт координаты укладки каждой коробки
- Роборуку в реальном времени — CAD-план паллетной укладки
Метрики
| KPI | До оптимизации | После |
|---|---|---|
| Заполнение коробки | 62–70% | 78–88% |
| Коробок на паллет | базис | +12–18% |
| Паллетов на загрузку | базис | -10–15% |
| Расходы на упаковочный материал | 100% | 82–90% |
Срок разработки: 2–3 месяца для системы подбора упаковки и палетизации с интеграцией в WMS.







