«Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки

от автора

В промышленной инженерии и логистике существует вечный спор: искать ли единственный «идеальный» вариант укладки часами или выстроить систему, которая выдает оптимальный результат за миллисекунды.

Недавно мне представилась возможность проверить это на практике. Коллега-логист (назовем его Сергей) предложил сравнить мой алгоритм Skewer-API с его собственной разработкой на реальном кейсе: 398 разнородных SKU, которые нужно распределить по контейнерам с минимальными затратами.

В прошлой статье я рассказывал о запуске веб-сервиса https://packing.skewer-api.ru/, который предназначен для быстрой упаковки грузов в контейнеры и фуры. На тот момент система умела работать в двух режимах: «по объему» (приоритет крупным объектам) и «по списку» (First In — First Packed).

Вскоре после публикации в моем Telegram-боте @routeload_bot появился пользователь (тот самый Сергей-логист), который активно тестировал систему на сложных манифестах. Позже мы списались, и Сергей попросил доступ к веб-интерфейсу для решения реальной бизнес-задачи. Сергей сам занимается автоматизацией логистики, и у нас появилась уникальная возможность: сравнить два разных инженерных подхода на одном и том же массиве данных.

1. Ресурсы: Доступный флот

Первым делом мы определили правила игры. В нашем распоряжении стандартный набор контейнеров с разной стоимостью фрахта:

  • 20′ DC — $1 000 (Эталон стоимости)

  • 40′ DC — $1 800

  • 40′ HC — $2 000

  • 45′ HC — $2 200

характеристики контейнеров.

характеристики контейнеров.

Кейс: 398 предметов и «суровая» логистика

Задача алгоритма: не просто заполнить объем, а выбрать такую комбинацию типов контейнеров, чтобы итоговый чек был минимальным.

габариты в см, вес в кг

габариты в см, вес в кг

Несмотря на то, что формат входных данных поддерживал сложную матрицу ориентаций и условий стекирования, для данного конкретного манифеста параметры были унифицированы. Это позволило упростить структуру до ключевых метрик (габариты, вес, количество), не теряя при этом в строгости расчетов.

2. «Сверхзвуковой математик» против «Вдумчивого логиста»

Математический поток vs Геометрический перебор

В то время как классический подход пытается найти локальный минимум в бесконечном пространстве вариантов (тратя на это десятки секунд), алгоритм Skewer-API работает как гидродинамическая модель. Мы не ищем «идеальную точку» для каждой коробки — мы задаем вектор давления и позволяем массиву данных «кристаллизоваться» в сетке контейнера.

Чтобы не быть голословными, сведем ключевые отличия подходов в таблицу.

Сравнение технологических стеков

Параметр

Классический алгоритм (Логист)

Skewer-API (Математический поток)

Базовая логика

Extreme Points (wall-corner greedy)

Grid-Native (векторизация пространства)

Скорость (398 SKU)

24.0 сек.

0.1 – 0.3 сек.

Стратегия подбора

Перебор 8 стратегий (volume, weight, density и др.)

Бизнес-Ассемблер («Якорь и Свита» + Unit Cost)

Оптимизация флота

Пост-обработка (try_improve_pair / eliminate_sparse)

Динамическая «пружина» КПД (Adaptive EFF)

Опора основания

92% (единая жесткая точность)

50/20% (адаптивная: крупный/мелкий груз)

Физика и логистика

Max Payload, Повороты 90°, EPS-точность

LIFO, Stack Limit, Крен (балансировка COG)

Механизм стакирования

Поштучная укладка

Гибридное (Batch + Adaptive Fill)

3. Момент истины: Гравитация против Математики

Результат Сергея: 54 × 20’DC + 8 × 40’HC = $70 000.

Мой результат: 38 × 20’DC + 7 × 40’DC + 9 × 40’HC = $68 600.

Сравнение результатов принесло неожиданный и полезный опыт. В расчетах Сергея (логиста) получилось 54 «двадцатки» и 8 «сороковок» с общим чеком в $70 000. Мой алгоритм выдал результат в $68 600 (38*20 + 7*40 DC + 9*40 HC), но разница в деньгах здесь — не самое главное.

Анализируя наши подходы, я заметил фундаментальное различие в «приоритетах». По моим расчетам, в манифесте присутствовало 22 позиции «Якорей» общим весом более 287 тонн. При стандартных лимитах (26 тонн на контейнер) для их перевозки требуется минимум 12 «сороковок». Сергей в своем расчете использовал всего 8, что, скорее всего, стало возможным благодаря изменению весовых лимитов в настройках его системы в ходе тестов.

Это подсветило важную мысль: логистика — это всегда баланс между «математическим идеалом» и суровыми регламентами перевозчиков.

Почему стакирование (укладка в 2 яруса) не уронило цену еще ниже? Ответ в логах: при геометрическом КПД 61%, весовой КПД составил 83.7%.Контейнеры закрывались не потому, что в них кончилось место, а потому что они набрали свои законные 25 тонн.

Вместо эпилога

Конечно, «каждому своя рубаха ближе к телу», и я могу быть чрезмерно увлечен своими алгоритмическими фантазиями. Поэтому я очень надеюсь, что Сергей прочитает эту статью. Было бы здорово увидеть его развернутый взгляд на эту задачу. Возможно, его «вдумчивый» подход учитывает те нюансы, которые мой «сверхзвуковой поток» проскочил на большой скорости.

Ведь в конечном итоге мы оба работаем над одной целью — сделать сложную логистику прозрачной и эффективной.

ссылка на оригинал статьи https://habr.com/ru/articles/1023920/