процесс укладывания контейнеров с учетом ограничений по 6 параметрам (синие позже выгружают, красные раньше)
процесс укладывания контейнеров с учетом ограничений по 6 параметрам (синие позже выгружают, красные раньше)

Введение: От «геометрического ада» к экосистеме

Сегодня мы выходим в продакшн с системой "Шампур Логистик", которая пакует флот из 15 судов и распределяет <cut /> манифест на 70 000 контейнеров быстрее, чем вы успеете допить кофе.

Это уже не просто «тетрис в вакууме». Мы построили промышленный конвейер на FastAPI и Celery, где математическое ядро с 90% Test Coverage сталкивается с суровой физикой моря: лимитами стекирования в 210 тонн, жестким LIFO-зонированием портов и капризными рефрижераторами.

Я покажу изнанку системы: как за 16 минут превратить маркетинговый хаос в выверенный цифровой двойник рейса, почему 10% свободного места в трюме — это не ошибка, а осознанная экономия миллионов долларов, и как наш "Шампур" защищает прибыль перевозчика в закрытом море кода.

Настоящая статья — логическое продолжение моих первых двух исследований. Мы прошли путь от векторного поиска в облаке точек до теоретической 3D-укладки.

Напомню, во второй части «Шампур» прошел через настоящий «геометрический ад» в 30+ сценариях: от упаковки 5000 микро-объектов до решения LIFO-конфликтов в глубоких трюмах. Итог тех испытаний воодушевлял: КПД 88.21% при скорости 362 контейнера в секунду. Мы доказали, что инерционный подход к упаковке — метод «Динамического Шампура» — работает.

Но даже самый совершенный алгоритм остается набором функций, если он заперт в локальном Python-скрипте. Чтобы превратить математику в деньги, нам пришлось построить «Шампур Логистик» — промышленный сервис, готовый переварить манифест на 70 000 позиций.

Архитектура: Больше чем скрипт

Глобальный этап:

На этом шаге система работает как высокоскоростной сортировщик. Мы берем паспортную маркетинговую вместимость каждого судна (TEU) и накладываем её на массив данных — 200 000 или 600 000 контейнеров .Через атомарные SQL-апдейты (scalar_subquery) гигантский объем груза за секунды распределяется по 4 портам захода и 15 бортам.

система «пробросила» весь объем манифеста, сформировав конкретные рейсы. Каждое судно на схеме — это уже не просто строчка в БД, а сформированное задание (PackingTask) с привязкой к портам и лимитам.
система «пробросила» весь объем манифеста, сформировав конкретные рейсы. Каждое судно на схеме — это уже не просто строчка в БД, а сформированное задание (PackingTask) с привязкой к портам и лимитам.
система «пробросила» весь объем манифеста, сформировав конкретные рейсы. Каждое судно на схеме — это уже не просто строчка в БД, а сформированное задание (PackingTask) с привязкой к портам и лимитам.
система «пробросила» весь объем манифеста, сформировав конкретные рейсы. Каждое судно на схеме — это уже не просто строчка в БД, а сформированное задание (PackingTask) с привязкой к портам и лимитам.

Раздел: Шесть фильтров «Шампур Логистик» или почему «просто уложить» не получится

Когда мы запускаем воркер, например, на 70 000 контейнеров, алгоритм работает не как фанатичный упаковщик, а как суровый инспектор по технике безопасности. Вот его чек-лист:

  1. 📐 Геометрия и запрет на кантованиеСудно — не склад, тут работают фитинги. Контейнер ставится только на дно. Мы учитываем две степени свободы (0°/90°) и флаг orientation_locked. Если в базе сказано «не крутить» — «Шампур» подчиняется.

  2. ⚖️ Вес и Stacking Limit (Тяжелое — вниз!)Мы не считаем «штуки», мы считаем тонны. Если сумма масс верхних ящиков превышает предел прочности нижнего (Stacking_Limit), алгоритм блокирует установку. Это залог того, что нижний контейнер не превратится в «гармошку» посреди океана.

  3. ⚓️ ЛИФО и Зонирование (Принцип Шампура по оси Z)Трюм нарезается на зоны согласно портам захода (П1, П2, П3) . Груз для финального порта (Москва) уходит в глубину, а первый на выгрузку (Коломбо) всегда остается «под рукой». Никаких лишних движений крана в порту — это чистая экономия времени и денег.

  4. ❄️ Специфика рефрижераторов (Reefers)Реф-контейнер — это капризный пациент. Модель reeferdetails.py проверяет наличие розеток (Reefer Plugs) и обеспечивает «воздушный коридор» для охлаждения агрегата. Замуровать мотор рефа — значит погубить груз. «Шампур» этого не допустит.

  5. 🔥 Опасные грузы (is_hazardous)Химия и взрывчатка изолируются от жилых надстроек и источников искр (тех же рефов). К ним всегда должен быть доступ пожарных расчетов. Безопасность экипажа — приоритет №1.

  6. 🏗 Габариты и Cell GuidesМы учитываем направляющие рельсы трюма и высоту стека (Air Draft). Мы не можем строить башни выше капитанского мостика — обзор должен быть чистым.

Этап исполнения (Celery + Redis):

Как только глобальный план распределил 600 000 контейнеров по судам, в игру вступают «рабочие руки» системы. Здесь маркетинговые цифры сталкиваются с суровой физикой.

Инфраструктурный конвейер:

  • Redis: Служит скоростным брокером сообщений. Он мгновенно пробрасывает сформированные PackingTasks в очереди.

  • Celery-воркеры: Наш вычислительный кластер. Мы не заставляем пользователя ждать 16 минут у монитора. Каждое судно пакуется в своем изолированном процессе. Это позволяет параллельно обсчитывать хоть 5, хоть 15 судов, просто масштабируя количество воркеров.

Надежность на уровне ДНК (90% Coverage):Когда алгоритм принимает решение — поставить 30-тонный контейнер в этот слот или заблокировать его по LIFO — это не «черный ящик». Мы подошли к разработке с требованием к качеству:

Наше основное геометрическое ядро (logic_vvg_avvg.py), отвечающее за векторные вычисления «Шампура», покрыто тестами на 90%.
Наше основное геометрическое ядро (logic_vvg_avvg.py), отвечающее за векторные вычисления «Шампура», покрыто тестами на 90%.

Резюме: Операционная эффективность и снижение издержек

«Шампур Логистик» — это переход от интуитивного планирования к модели Data-Driven Logistics. Система не заменяет человека, а выступает высокоточным фильтром, который оптимизирует экономику рейса в трех ключевых точках:

  1. Минимизация операционных потерь (Restow Optimization):

    - Контекст: Каждое внеплановое перемещение контейнера в порту из-за нарушения очередности выгрузки (LIFO) стоит от $150 до $300.

    - Решение: Алгоритм автоматически соблюдает зонирование по портам. Это позволяет исключить человеческий фактор и снизить количество избыточных перевалочных операций, напрямую сокращая портовые расходы линии.

  2. Повышение коэффициента использования вместимости (Payload):

    - Контекст: Из-за сложности ручного учета весовых лимитов и остойчивости, планировщики часто закладывают избыточный «запас прочности», оставляя судно недогруженным.

    - Решение: Математическое ядро с 90% Test Coverage позволяет максимально эффективно использовать доступный объем трюма, соблюдая при этом все ограничения по нагрузке на ярус (Stacking Limit). Это дает возможность увеличить полезную загрузку на несколько процентов без риска для безопасности.

  3. Сокращение времени на принятие решений:

    - Контекст: Обработка сложного манифеста на 70 000 позиций вручную может занимать дни, что критично при изменении планов погрузки в порту.

    - Решение: Связка FastAPI + Celery позволяет пересчитать план загрузки флота из 15 судов за считанные минуты.

    - Эффект: Повышение гибкости планирования (Agility) — компания может оперативно реагировать на изменения рынка и принимать дополнительные грузы «в последний момент».

  4. Контроль физических рисков:

    - Контекст: В 2024–2025 гг. количество инцидентов с потерей контейнеров выросло. Ошибки в расчете развесовки — одна из главных причин.

    - Решение: Автоматическая проверка каждого слота на соответствие параметрам веса, опасности и специфики груза (Reefers).

    - Эффект: Снижение вероятности страховых случаев и повреждения груза, что укрепляет репутацию перевозчика и снижает операционные риски.

Update: От алгоритма к реальности — Estimated Cargo Plan (ECP)

Математика — это хорошо, но судно не пойдет в рейс по «красивой картинке». Самое важное происходит на третьем эндпоинте системы, который формирует Estimated Cargo Plan (ECP).

Как это работает для флота?

В нашем варианте между есть разница между рейсом (одно судно) и роутом (цепочка судов на маршруте). Мы собираем данные по всему роуту и рассылает грузовым помощникам (чифам) на все суда предварительные планы.

В чем боль чифа сегодня? Он получает маркетинговый план («загрузи 2000 ящиков»), начинает считать остойчивость и LIFO (чтобы не переставлять контейнеры в каждом порту) — и понимает, что влезет только 1200. Начинается хаос, вычеркивание грузов и простои.

Как делает наш сервис:Мы сразу высылаем JSON-спецификацию, которая учитывает 6 критических ограничений. Грузовой помощник видит реальность еще до начала погрузки.

Пример данных, которые уходят на судно:

Каждая запись — это не просто «место», а точные координаты в пространстве судна и физические параметры груза.

[
{
"slot": {
"x": 7314,
"y": 0,
"z": 242320
},
"box": {
"w": 2438,
"h": 2591,
"d": 6058
},
"cargo": {
"db_id": 42447,
"external_id": "CNT-129062-042446",
"weight_kg": 8198.0,
"pol": "Shanghai",
"pod": "Moscow"
}
},
{
"slot": {
"x": 4876,
"y": 0,
"z": 242320
},
"box": { "w": 2438, "h": 2591, "d": 6058 },
"cargo": {
"db_id": 42489,
"external_id": "CNT-D70938-042488",
"weight_kg": 5087.0,
"pol": "Shanghai",
"pod": "Shenzhen"
}
}
]

Технологический бенчмарк: Индустриальные гиганты vs «Шампур Логистик»

Технологический бенчмарк: Индустриальные гиганты vs «Шампур Логистик»

Критерий / Метрика

👴 Промышленные системы (Navis, MACS3)

💪 Наше решение (Шампур Логистик)

Парадигма расчета

Reactive Validation (проверка созданного человеком плана) 😱

Proactive Generation (автоматический синтез плана «с нуля») ⚡

Scope (Охват)

Single Voyage. Изолированный рейс одного судна.

Route-Wide. Сквозная оптимизация всей цепочки судов и портов. 🌐

Constraint Handling

Пост-фактум (уведомление об ошибках LIFO/веса) ⏳

Hard-coded. Ограничения вшиты в математическое ядро алгоритма. 🎯

Data Granularity

Slot-based (номер ячейки/ряда) — «примерно тут».

Precise 3D-mapping. Координаты (x, y, z) до миллиметра. 🤖

Вердикт:

«Шампур Логистик» — это инструмент для компаний, которые стремятся перевести свою логистику на уровень автоматизированного цифрового двойника. Мы масштабировали алгоритм до масштабов флота, подтвердили надежность тестами и готовы к интеграции в реальные портовые экосистемы.

Заключение: От алгоритма к индустриальному стандарту

«Шампур Логистик» прошел путь от абстрактного вектора в облаке точек до системы, способной «переварить» флот из 15 судов и манифест на 600 000 позиций. Мы подтвердили математическую точность 90%-ным покрытием тестами и доказали, что безопасность в море может соседствовать с высокой плотностью укладки.

Что дальше?Проект находится на стадии работающего MVP, готового к пилотным интеграциям в реальные терминальные системы (TOS) или логистические платформы. Мы открыты к конструктивному фидбеку от профессионалов индустрии, штурманов и разработчиков транспортного ПО.

Если вам близка идея перевода «бумажной» логистики на рельсы цифровых двойников или вы видите потенциал для внедрения «Шампура» в свои цепочки поставок — пишите в личные сообщения или в комментарии. Буду рад обсудить концептуальные детали, вопросы оптимизации LIFO или возможности масштабирования системы.

До встречи в закрытом море кода! 🌊