Комментарии 13
Как здесь стрелять? (с)
если вы про отправку джейсона, то 3мя вариантами 1. сваггер POST
/api/v1/skewer/pack 2. в боте отправляйте в теле джейсон 3. в боте отправляйте файл джейсон. Пример, можете подсмотреть в сваггере или вот:
{
"container": {
"external_id": "EURO_TRUCK_01",
"w": 2450,
"h": 2600,
"d": 13600,
"max_payload": 22000
},
"items": [
{
"external_id": "HEAVY_EQUIPMENT",
"w": 2000, "h": 1500, "d": 3000,
"weight": 4500.0,
"qty": 2,
"stacking_limit": 0,
"stop_sequence": 2
},
{
"external_id": "STANDARD_PALLET_V1",
"w": 800, "h": 1600, "d": 1200,
"weight": 600.0,
"qty": 12,
"stacking_limit": 1200.0,
"stop_sequence": 2
},
{
"external_id": "URGENT_CARGO_STOP_1",
"w": 1000, "h": 1000, "d": 1000,
"weight": 200.0,
"qty": 5,
"stacking_limit": 500.0,
"stop_sequence": 1
}
],
"settings": {
"use_cog": true,
"step_mm": 0
}
}
Будут вопросы, задавайте.
Сначала нажимаете /Start потом уже отправляете джейсон любым способом. и пользуетесь остальными кнопками меню бота (последние запросы, фидбэк, хелп и тп). Может это не понятно из статьи, что /Start всему голова
С точки зрения ОБЫЧНОГО пользователя.
Какой такой Джонс - это что? Тут ексель тока есь..А насяльника мне тендюлей не даст , за отправку данных в сторонний сервис?
"Джейсон" — это просто формат, в котором бот читает данные, программистское заклинание, вам его учить не надо.
Насчет насяльника: бот живет на защищенном российском (Питерском) сервере Timeweb. Мы не воруем ваши секреты — бот видит только то, что вы сами ему пишете в Telegram, и никуда дальше не отправляет.
А оптимально разложить коробки по паллетам может?
Алгоритм не просто заполняет 3D-пространство, а работает по принципам промышленной логистики. Вот как это реализовано в коде:
1. Физическая устойчивость (COG-балансировка)В отличие от простых упаковщиков, наш движок при каждой итерации вызывает get_current_cog().
Как это работает: Если после укладки первых рядов центр тяжести сместился влево, параметр
dynamic_target_xавтоматически переключает поиск зон на правый борт.Результат: В отчете вы видите
kren_percentage. Мы стремимся к 0%, чтобы паллета не завалилась при движении погрузчика.
2. Контроль прочности (Stacking Limit)Через phys_map алгоритм отслеживает давление на каждый квадратный сантиметр пола или нижележащего груза.
Логика: При расчете батча (
calculate_fit) учитываетсяitem['stack_limit'] // item['weight']. Тяжелый станок никогда не будет поставлен на хрупкую коробку с чипсами, даже если там есть идеальное пустое место.
3. Гарантия опоры (Gravity Check)В функции check_constraints зашит коэффициент coverage < 0.90.
Зачем: Это гарантирует, что коробка опирается на нижний слой минимум на 90% своей площади. Мы исключаем ситуации «повисания в воздухе» или опоры на тонкое ребро.
4. Стратегическое планирование (Roadmap & Scraper)Движок использует StrategicRoadmap, который «давит» груз от дальней стенки к выходу. Это создает плотный фронт загрузки без пустот в глубине паллеты, которые могли бы привести к рассыпанию груза при торможении.
Пример входных данных (JSON Request)
Чтобы проверить алгоритм в деле, достаточно отправить структуру типа PackingRequest. Вот пример для паллеты с тяжелым оборудованием и легким догрузом:{
"container": {
"external_id": "PALLET_EURO_01",
"w": 800, "h": 1800, "d": 1200,
"weight_limit": 1500
},
"items": [
{
"external_id": "ENGINE_BLOCK",
"w": 400, "h": 500, "d": 400,
"weight": 150.0, "qty": 4,
"stacking_limit": 1000, "stop_sequence": 1
},
{
"external_id": "LIGHT_BOX_SAMPLES",
"w": 200, "h": 200, "d": 200,
"weight": 5.0, "qty": 50,
"stacking_limit": 50, "stop_sequence": 1
}
],
"settings": { "use_cog": true, "step_mm": 20 }
}
Что вы получите на выходе (Output Report)
Функция solve вернет детальный анализ качества укладки:
real_fill_percentage: Насколько плотно забита паллета (КПД объема).kren_percentage: Насколько центрирован груз (безопасность).cog_offset_mm: Смещение центра тяжести от осевой линии в миллиметрах.manifest: Точные координаты и ориентация для каждой коробки.(формат джейсон)визуализация
Хотите проверить свой кейс? Присылайте размеры ваших коробок (ДхШхВ), их вес, количество и параметры паллеты — мы прогоним их через Skewer-Engine и покажем результат!
Спасибо, для наших целей это немного перебор, и заточены вы под транспорт больше. Сэндвич-паллет может иметь свои правила сборки, типа разрешенная высота до 2500 (но лучше 1800 :)), и каждые 2 слоя прокладываются пустым поддоном.
Согласен, сэндвич-паллеты — это отдельное искусство! Но на самом деле для нашего алгоритма это не "перебор", а просто дополнительный набор правил (Constraints).
Смотрите, как легко мы можем адаптировать Skewer-Engine под ваши требования:
Ограничение высоты (1800-2500 мм):
Это решается одной правкой в схеме контейнера или настройкойsettings. Алгоритм просто перестанет искать свободные зоны (AFV) выше 1800 мм.Правило "Каждые 2 слоя — пустой поддон":
В нашей логикеBatchPacker_V2уже есть учет слоев. Мы можем добавить условие: «Если текущий Z (высота) достиг суммарной высоты двух упакованных объектов — принудительно вставить виртуальный объект с размерами паллеты (1200х800х150)».
Это создаст новую "опору" (floor) для следующих слоев, и физический движокphys_mapначнет считать нагрузку уже на этот новый поддон.Специфика транспорта vs Склад:
Да, мы добавили балансировку (COG), которая критична для фур. Но для сэндвич-паллеты это тоже огромный плюс: чем точнее центр тяжести в середине поддона, тем меньше шансов, что ваш "сэндвич" высотой 1.8м завалится при резком маневре погрузчика.
Итого: Наш бот — это "конструктор". Мы можем задать любые правила сборки, и он упакует 10 000 таких сэндвичей за доли секунды.
Хотите эксперимент? Дайте нам размеры коробок для ваших двух слоев и параметры прокладочного поддона — мы пришлем JSON-манифест идеальной сборки вашего сэндвича!
Спасибо за информацию, мы не продаём, мы покупаем, задача на порядок проще - поставщик отгружает кратно транспорту, типа вес 20 тонн или 21 паллета, и надо набрать нужное количество к заказу кратно транспорту. Поэтому габаритов коробок кроме веса у нас нет.
Даже без габаритов коробок наша система решает вашу задачу через весовую оптимизацию.
Вы подаете список доступных товаров (их веса) и лимит транспорта (например, 20 000 кг). Алгоритм работает как интеллектуальный подборщик: он сам рассчитает, сколько штук каждого товара нужно добавить в заказ, чтобы:
Суммарный вес был максимально близок к 20 тоннам (без недогруза и штрафного перегруза).
Количество было кратно паллетам (мы просто задаем вес целой паллеты как единицу SKU).
По сути, мы находим идеальный микс товаров, который "закрывает" транспортный квант. Вам не нужно считать вручную — система сама выдаст готовый список: "Возьмите X паллет товара А и Y паллет товара Б".
Если хотите проверить это на ваших реальных данных: вы можете оставить конкретные веса и параметры в фидбеке (или личных сообщениях) и сообщить, по какому каналу связи с вами лучше связаться. Мы прогоним ваш кейс через движок и покажем результат расчета оптимального заказа.

️ UPDATE: Специально для тех, кому лень составлять JSON