AI Packaging and Palletization Optimization System

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
AI Packaging and Palletization Optimization System
Medium
~1-2 weeks
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823
  • image_logo-aider_0.jpg
    AIDER company logo development
    762
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    848

Разработка 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 палетизация:

Строим паллет послойно — каждый слой = набор коробок одной высоты:

  1. Группировка коробок по высоте (кластеризация ±2 см)
  2. Для каждого слоя: 2D bin packing (прямоугольная укладка с поворотами)
  3. Чередование слоёв с перевязкой для устойчивости
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.