Розробка AI-системи оптимізації маршрутів доставки

Маршрути будуються вручну, диспетчер тоне у правках, а рейси вирушають напівпорожніми. Ми розробляємо AI-систему оптимізації маршрутів доставки під ключ: від аналізу даних до передачі в експлуатацію. Скорочуємо пробіг і час планування у рази, зберігаючи контроль диспетчера.
Часті запитання

Чому AI-оптимізація маршрутів доставки ламається на реальних даних

Класичний збій: алгоритм видає гарний план на 40 машин, а до обіду диспетчер вручну перетасовує половину рейсів.

Причина в тому, що планування рейсів рахується за статичним графом доріг, тоді як факт залежить від перекриттів, сезонного трафіку й погоди, яких у моделі на вході просто немає.

Розрив між розрахунковим часом у дорозі та спостережуваним — зазвичай найбільше джерело помилки, і він тягне за собою все інше.

Якість вхідних даних дає другу порцію розбіжностей. Різні написання адрес, координати за центроїдом будівлі, відсутність поверху й під'їзду — і точка на карті стоїть там, де машина не стане.

Нормалізація адресного довідника, прив'язка до входів і окремий шар історичних замірів часу розвантаження дають більше приросту, ніж будь-яке ускладнення самого розв'язувача.

Обмеження за вантажем і вікнами доставки додають жорсткості, яку не можна порушити.

Вага й габарит кузова, сумісність товарних груп, робота холодильника, режим роботи точки та закриті інтервали приймання — кожна така зв'язка робить задачу не «знайти найкоротший шлях», а «вкластися в допустиму множину».

Тут же спливають вузькі місця диспетчеризації: той самий автомобіль потрібен двом клієнтам із несумісними вікнами, і рішення доводиться шукати з відкатом.

Ручні правки диспетчера — не саботаж, а сигнал. Він бачить контекст, якого немає в даних: клієнт просить приїхати раніше, у водія закінчується зміна, на об'єкті сьогодні розвантаження до полудня.

Якщо правки не повертаються в модель, оптимізація маршрутів доставки деградує: план усе точніший на папері й усе далі від двору. Далі розбираємо, як це закривається.

Що змінюється після впровадження: ефект у вимірюваних метриках

Ефект оптимізації маршрутів рахується не за відчуттями, а за метриками, які знімаються на історичних даних до старту й повторюються на тому самому обсязі замовлень після запуску. Нижче — набір, який ми фіксуємо у звіті за кожним контуром доставки.

  • Скорочення пробігу — сумарний кілометраж на зіставній кількості точок падає на 8–15%: маршрутизатор збирає ланцюжки за часом і геометрією, а не в порядку надходження заявок.
  • Порожні рейси — частка перегонів без вантажу йде вниз, бо зворотне завантаження планується в тому самому проході, а не окремим дзвінком диспетчера.
  • Частка запізнень за вікнами доставки — рахується за фактом в'їзду на точку; жорсткі вікна й пріоритети клієнтів задані обмеженнями, тому план не розсипається на першій же пробці.
  • Навантаження диспетчера — час на ручні правки скорочується з годин до хвилин: система перебудовує день у разі зриву вікна, а людина підтверджує зміни.
  • Рівномірність завантаження — розкид кількості точок і ваги по машинах зменшується, крайні перевантаження рейсів ідуть.

Метрики збираються автоматично, тому ефект видно в динаміці по тижнях, а не один раз на презентації. Рахує план розрахункове ядро на Google OR-Tools — воно перебирає варіанти під задані обмеження й повертає кілька рівноцінних рішень на вибір.

Режими роботи: онлайн-перерахунок, пакетний розрахунок, гібрид

Режим планування вибирають не за смаком, а за двома величинами: як часто в системі з'являються нові замовлення й наскільки дорого змінювати вже узгоджений рейс.

Перерахунок маршруту в момент надходження замовлення дає мінімальний пробіг, але кожну зміну доводиться підтверджувати з водієм і клієнтом. Рідкісний пакетний розрахунок дешевший у супроводі, зате гірше реагує на сплески навантаження в середині дня.

Варіант Коли підходить Обмеження
Онлайн-перерахунок маршрутів Замовлення йдуть потоком увесь день, вікна доставки короткі, склад точок змінюється динамічно Потрібен швидкий розв'язувач і постійний канал до водія; надто часті правки плану збивають виконавців
Пакетний розрахунок рейсів Замовлення збираються заздалегідь, доставка на наступний день, рівний парк машин Плану немає до моменту запуску; термінове замовлення в середині дня ламає вже зібрані рейси
Гібридне планування Основний обсяг плановий, але регулярно з'являються термінові врізки Складніше в налаштуванні: потрібні правила, що саме дозволено перебудовувати і як часто

На практиці вибір режиму оптимізації зводиться до частоти перерахунку.

Ми заміряємо, скільки замовлень надходить після старту зміни, який відсоток відмов від уже призначених точок прийнятний для диспетчерської і з якою швидкістю водій підтверджує нове завдання — за цими цифрами режим або закріплюється, або змінюється.

Гібридне планування майже завжди будується на розділенні рейсу: жорсткий каркас з адресами та часовими вікнами фіксується, а вільна частина — неповні слоти, попутні точки — перераховується за подією.

Частота перерахунку стає налаштовуваним параметром: раз на годину для планового контуру, миттєво для термінових замовлень, із забороною чіпати рейси, де водій уже в дорозі.

Етапи впровадження: від аудиту даних до передачі в експлуатацію

Впровадження розбивається на короткі етапи з перевірюваним результатом після кожного.

Порядок не випадковий: правила планування не можна налаштовувати раніше, ніж зрозуміло, які обмеження взагалі є в даних, а перевіряти якість плану безглуздо до того, як диспетчери погодилися з логікою розрахунку.

  1. Аудит даних про доставку. Вивантажуємо історію рейсів, адреси точок, часові вікна одержувачів, вагу й габарити вантажу, режим праці водіїв. Рахуємо частку адрес без точної геоприв'язки, замовлень без вікна й дубльованих точок — саме ці прогалини дають нереалістичні строки в розрахунку.
  2. Схема рішення. Визначаємо, що рахує система, а що залишається за людиною: жорсткі обмеження (вантажопідйомність, час зміни, заборони проїзду) і м'які переваги (постійні клієнти, рівномірне завантаження машин). Фіксуємо, що саме оптимізуємо — пробіг, кількість машин чи дотримання вікон.
  3. Налаштування правил планування. Правила, які диспетчер тримає в голові, переводимо у формальні обмеження й ваги. Кожне перевіряємо на конфлікт з іншими, спірні пари розводимо за пріоритетами, щоб розрахунок не «зависав» на взаємовиключних умовах.
  4. Перевірка на історичних рейсах. Проганяємо план на закритих періодах і порівнюємо з фактом: пробіг, запізнення, кількість задіяних машин, частка ручних правок. Розбіжності розбираємо разом із диспетчерами, уточнюємо правила й повторюємо цикл, поки відхилення не стануть зрозумілими.
  5. Пробний запуск на одній ділянці. Один філіал або зміна працює в системі паралельно зі звичним плануванням: звіряємо результат у реальному часі, знімаємо заперечення диспетчерів до того, як змінювати процес цілком.
  6. Передача в експлуатацію. Передаємо конфігурацію, регламенти й порядок ручних правок, навчаємо диспетчерів на їхніх же маршрутах, фіксуємо ролі й права доступу. Далі — супровід і доналаштування правил за фактичними даними.

Що передаємо на руки: конфігурації, схеми та регламенти

Віддаємо не «чорну скриньку», а систему, яку ваша команда може розвивати й обслуговувати самостійно. Правила планування винесені в конфігурацію, доступи описані ролями, поведінка при збоях зафіксована в регламентах — рутинні зміни не потребують звернення до розробників.

  • Конфігурація правил планування: пріоритети клієнтів, часові вікна, вантажопідйомність і сумісність транспорту, штрафи за порушення вікна — правляться в окремому файлі без перезбирання системи.
  • Схема потоків даних: шлях заявки від облікової системи через перевірку адрес і розрахунок матриці відстаней до готового маршруту в інтерфейсі диспетчера — з точками відмови й повторами за недоступності зовнішніх сервісів.
  • Політики доступу до системи: ролі диспетчера, логіста, аналітика й адміністратора, видимість за філіалами, журнал дій і порядок видачі прав.
  • Документація рішення: обмеження алгоритму, довідник параметрів, порядок оновлення карт і тарифних зон.
  • Регламент роботи диспетчера: приймання перерахованого маршруту, розбір нерозпізнаних адрес, умови переведення замовлення на ручне планування.
  • Набір перевірок і метрик: тестові сценарії на історичних днях, звіт за часткою автоматично побудованих маршрутів і відхиленнями від плану.

Комплект передаємо разом з навчанням ваших фахівців: розбираємо конфігурацію, проганяємо типові збої, фіксуємо, до кого йти з питаннями за кожним блоком.

Кейс: парк доставки після переходу на AI-планування рейсів

Кейс: дистриб'ютор із власним парком і двома складами

Точка відліку

Планування трималося на диспетчері: він збирав заявки, розкидав точки по машинах у таблиці й вручну розрулював перетини вікон доставки. Лише на ранкові правки йшло близько трьох годин, а до обіду з'являлися термінові замовлення — і частину рейсів перекроювали на ходу.

Машини їхали через усе місто, пробіг зростав, доставка в строк трималася близько 87%, частину точок водії проходили не по дорозі.

Що змінили і що отримали

Модель побудували на історії рейсів, фактичних часів у дорозі й простоїв на розвантаженні, додали обмеження: вікна доставки, вантажопідйомність, режим праці водіїв, пріоритети клієнтів.

План рахується на кілька днів уперед і повністю перераховується, коли надходить термінове замовлення — диспетчер бачить не весь розклад, а лише точки, які його зламали. Ручні коригування залишилися для нестандартних випадків, але стали точковими, а не щоденними.

  • Пробіг на маршрут скоротився на 18% за того самого обсягу замовлень.
  • Кількість рейсів зменшилася на 12%: частину точок об'єднали в один виїзд.
  • Доставка в строк зросла з 87% до 98%, запізнення з вини планування майже зникли.
  • Час диспетчера на ручне коригування — з трьох годин до півгодини за зміну.
  • Відмови через зсунуті вікна доставки скоротилися вдвічі.

Такий розрив між «до» і «після» дає не окрема формула, а зв'язка моделі з обмеженнями реального парку й зрозумілим процесом перерахунку плану.

Чим потокова оптимізація відрізняється від пакетного перерахунку

Пакетний перерахунок маршрутів працює вікнами: заявки вивантажуються з облікової системи, розв'язувач рахує матрицю часу в дорозі за всім пулом і повертає готовий план цілком.

План виходить стійким і зрозумілим, але всередині вікна система не бачить ні нового замовлення, ні скасування — усе чекає наступного запуску.

Потокова оптимізація тримає маршрут живим: заявка або збій потрапляють у чергу, перераховується лише зачеплена ділянка, оновлення йде водієві за секунди. Швидкість реакції на збій зростає, але режим вимагає дисципліни щодо стабільності видаваного маршруту.

Критерій Пакетний перерахунок Потокова оптимізація
Швидкість реакції на збій до наступного вікна плану секунди, перерахунок зачепленої ділянки
Обсяг даних за цикл повне вивантаження заявок і матриці лише дельта: нова заявка, зміна статусу
Стабільність маршруту висока, план не змінюється всередині вікна задається порогами зсуву
Обмін з обліковою системою пакетний обмін за розкладом події та зворотний запис статусів

Стабільність — головний компроміс. У потоковому режимі ми фіксуємо вже відвантажені точки, обмежуємо кількість перестановок на маршрут і задаємо поріг зсуву: поки виграш за часом у дорозі нижчий за поріг, план не чіпаємо. Інакше водій отримує новий маршрут кожні кілька хвилин і перестає йому довіряти.

Обмін з обліковою системою йде в обидва боки, різниться лише частота. Пакет підходить, коли замовлення надходять хвилями; потік — коли важлива реакція на збій у моменті. Частіше збирають гібрид: нічне вікно будує базовий план, денні коригування вносять точкові правки.

Технічні сумніви: дані, інтеграції та контроль диспетчера

Перед запуском замовники ставлять ті самі питання: що робити з неповними даними про дорожню обстановку, як вбудуватися у вже розгорнуту систему планування і чи залишиться ручне підтвердження маршруту в диспетчера.

Що робити, якщо дані про дорожню обстановку неповні?

Ми не будуємо план на одному джерелі. Розклади рейсів і обмеження беремо з облікової системи, дорожній граф — з відкритих карт, наприклад OpenStreetMap, а фактичний час проїзду накопичуємо з історії виконаних замовлень.

Там, де даних немає, система рахує не «середнє по місту», а діапазон: план будується за консервативною оцінкою, а факт уточнює прогноз на наступних рейсах.

У нас уже розгорнута система планування — її доведеться міняти?

Ні, оптимізатор стає поряд із поточним контуром. Інтеграція з обліковою системою йде через обмін файлами або програмний інтерфейс, чинна логіка розподілу замовлень залишається робочою.

Перехід робимо за групами машин: якщо за часом або пробігом результат гірший, група повертається до попереднього режиму без зупинки доставки.

Диспетчер зможе правити маршрут вручну?

Так, і це частина системи, а не обхід її. Гнучкість правил задається пріоритетами: клієнтський інтервал, вага вантажу, заборона розворотів, обмеження водія.

Диспетчер бачить, чому маршрут склався саме так, і може зафіксувати ділянку — ручне підтвердження зберігається як правило й ураховується в наступних розрахунках.

Обговоримо задачу: що потрібно для першого етапу

Оцінка проєкту доставки починається не з доступу до вашої системи планування, а з вивантажень і опису обмежень. Нам достатньо зрозуміти, які дані вже є, як вони структуровані й де розрахунок маршрутів упреться в реальні правила складу, а не в математику. Чим точніші вхідні дані, тим менше припущень у плані першого етапу.

  • Вивантаження історичних рейсів за кілька тижнів: точки, час прибуття й відбуття, фактичний пробіг, вага й обсяг замовлення.
  • Склад парку: типи машин, місткість за вагою й обсягом, прив'язка до складів, змінність водіїв — від цього залежить, які маршрути взагалі допустимі.
  • Вікна доставки за клієнтами й групами: жорсткі інтервали, м'які допуски, обідні паузи, заборона на нічне розвантаження.
  • Обмеження за вантажем: несумісні категорії в одному кузові, температурні режими, вимоги до кріплення й порядку розвантаження.
  • Правила пріоритету: хто отримує замовлення першим за нестачі машини, для кого зсув часу неприпустимий.
  • Довідник адрес із координатами, зонами й обмеженнями на в'їзд для важкого транспорту.
  • Норми часу на навантаження й розвантаження за типами точок — без них модель систематично занижує тривалість рейсу.

За цими даними ми збираємо розрахункову модель, звіряємо її з історичними рейсами й показуємо на конкретних днях, де саме втрачається кілометраж і час.

Далі повертаємося з планом першого етапу: що запускаємо на обмеженій ділянці, які показники фіксуємо до старту і як порівнюємо результат із поточним плануванням вручну. Опишіть задачу — повернемося з оцінкою та планом.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142