В данной статье делюсь опытом создания прототипа TMS (Transportation Management Systems) – ИТ-решения для планирования и контроля исполнения перевозок (доставок/поставок) товаров, оборудования и людей, «собственными силами» или, так сказать, сделанного «на электронной коленке из подручных средств».

На дворе непростые времена: общий экономический кризис, специфическое состояние ИТ-отрасли и рынка труда (как в сегменте ИТ, так и по направлению, связанному с логистикой), а также специфика ситуации на вашем предприятия и с вашей ИТ-службой, могут заставить искать какие-то нестандартные пути для получения такого рода ИТ-решения для автоматизации транспортной логистики. Например, путем создания и внедрения TMS «из подручных средств». Речь пойдет о подходе, в рамках которого ИТ-решение конструируется из доступных, относительно свободно распространяемых компонентов, а вам предлагается писать связующий программный код для получения законченного прикладного ИТ-решения. И создавать это решение можно на «простеньком» компьютере – без использования продвинутого «железа» и «софта», без «облаков» и т.д., т.е. на своей «электронной коленке».

Создание «на коленке» компонентной базы такого ИТ-решения, как то – «вычислительный движок» для оптимизации маршрутов, геокодер, обработчик дорожных графов для вычисления «матрицы расстояний» (расстояний и продолжительностей при перемещении между каждой возможной парой точек доставки/поставки из решаемой задачи), геоинформационный визуализатор и др., представляется утопичным: за разумное время в одиночку - почти невозможно. Посмотрим на мой путь, который вы можете пройти сами, вместе со мной или в комбинированном режиме.

Центром вашего ИТ-решения является «вычислительный движок», на вход которому подаются данные о заказах доставки/поставки и данные о транспортных ресурсах (транспортных средствах или курьерах), а на выходе из которого вы получаете (суб)оптимальное решение задачи – списки точек доставки/поставки из заказов, привязанные к транспортным ресурсам. Я выбрал метаэвристический алгоритм оптимизации «Ruin and Recreate» (описание здесь) и реализующий его опен-сорс’овский «движок» jsprit (исходный код здесь).

Для получения «матрицы расстояний» используются бесплатные свободно распространяемые карты (графы) из проекта OpenStreetMap, которые можно загружать, например, отсюда: http://download.geofabrik.de/ Но для того, чтобы эффективно выудить из дорожного графа данные для «матрицы расстояний» вам нужно специальное средство, например, такое: https://github.com/graphhopper/graphhopper

Этот компонент берет на вход геокоды (географические координаты) точек доставки/поставки, а не адреса в привычном нам виде. Для качественного и бесплатного геокодирования я использую такие геоинформационные сервисы (их API), как например, Google Карты и пробный (тестовый) ключ доступа с квотой 2500 запросов в сутки. Это означает, что при необходимости вы можете ежедневно расширять свою «матрицу расстояний» комбинациями с 2500 новыми адресами (что вполне себе прилично).

Осталось выбрать веб-сервер, если вы хотите создать свое ИТ-решение в виде приложения для веб (как вариант можно делать десктоп’ное-приложение). Я, исходя из своих соображений, выбрал IIS (Internet Information Services). Кстати, для начала вполне подойдет версия Express: ее просто настроить для целей отладки при разработке, тестирования и пробной эксплуатации вашего ИТ-решения пользователями. Ну а раз я выбрал IIS, то и связующий программный код мне пришлось писать на C#/.Net.

Пользовательский интерфейс для логиста/диспетчера, загружающего задачу доставки/поставки на сервер и получающего табличное и графическое представление, можно быстро разработать, например, средствами ASP.Net. А возможно, вы создаете свое решение как расширение корпоративной информационной системы (типа ERP-системы) в виде веб-сервиса, то и веб-интерфейс не нужен – логист/диспетчер работает через интерфейс расширяемой системы.

А вот пользовательский интерфейс веб-приложения для исполнителя транспортной работы (водителя/экспедитора, курьера) лучше создавать с использованием нейтральных технологий типа JavaScript. Замечу, что выбор веб-сервера может оказывать непосредственное влияние на способ реализации приложения для исполнителя, но необязательно. В моем ИТ-решение это приложение написано на «чистом» JavaScript, а для передачи сообщений о результатах работы используется API посредством HTTP/Rest.

(Примечание: помимо этого вы можете подключить внешние инструменты BI (бизнес-аналитики), значительно повысив ценность и возможности своего ИТ-решения для управляющих сотрудников вашей компании.)

Как все это выглядит представлено на скриншотах ниже, а также здесь: https://sites.google.com/view/freetms/home

В конечном итоге, вы получаете ИТ-решение с условно-нулевой стоимостью программных компонентов – функциональных блоков, но при этом должны очень тщательно выполнить системный анализ и написать новый связывающий эти компоненты программный код. В процессе этого (продумывания и реализации связей) вы можете увеличить суммарный эффект за счет кастомизации – разработать ИТ-решение именно под специфику вашего предприятия и его задач в области транспортной логистики.

Не все аспекты и детали создания ИТ-решения возможно раскрыть в этой статье – такую цель я не ставил, но для первичной оценки подхода вполне достаточно. Всем желаю успехов в работе! С удовольствием обсужу различные связанные вопросы и вне публикации.

Комментарии (14)


  1. mobilz
    01.12.2022 17:19
    +3

    Хай, мы больше 10 лет делаем http://ats24.ru/, логистикой занимаемся лет 15 минимум.
    Неожиданно наблюдать здравый подход в этом "тёмном лесу" ) Из замечаний:
    0. конечно, не будем обсуждать стек, каждому своё. но было странно увидеть iis, aps, java решения в контексте "слабого компа" )
    1. гугл для рф, увы, закрыт. т.е. оплатить сервисы гугла с каждым днём всё сложнее. для геокодирования вполне можно юзать dadata.ru, да он платный, но вполне рабочий + чаще всего адреса доставки условно-одинаковые. т.е. берём любого клиента, смотрим, и оказывается, что на 1000 адресов в день, новых штук 10 от силы.
    одно время у нас была идея самим писать геокодер, но провозившись месяц мы поняли, что не смотря на то, что получается в общем не плохо, этим надо заниматься, а заниматься мы хотели логистикой.
    2. для небольших проектов/клиентов для маршрутизации проще использовать сервисы типа
    https://openrouteservice.org/
    он бесплатный и, скажем, отдельной компании упереться в их лимиты тяжело, при этом маршрутизация поддерживает много плюшек. На самом деле на практике основная задача не "качественно" сделать маршрут, а скорее следить за его соблюдением. случаев, где логист входит в сговор с водителем, строят супер невыгодный маршрут и зарабатывают на этом -- полным полно. т.е. при маршрутизации компании важнее прозрачность, понимание пробега и трат на топливо, нежели чем супер оптимизированные маршруты между точками.
    3. вебморда для водителей, увы, штука неудобная. ну и ни слова про датчики (geolocation), без которых нет возможности понимать "окна" входа и выхода водителя в радиус точки.

    кстати, а jsprit умеет распределять на основе предпочтений водителей? мы на это много времени потратили. да и у клиентов часто запрос: "мы отправляйем водителей в рейсы, они ездят по одному и тому же маршруту"


    1. erpacademy Автор
      01.12.2022 17:41

      jsprit умеет распределять на основе предпочтений водителей?

      Да. Нужно определить эту связь "предпочтение" между водителем и заказом.


    1. erpacademy Автор
      01.12.2022 18:25

      ни слова про датчики (geolocation), без которых нет возможности понимать "окна" входа и выхода водителя в радиус точки

      Это ИТ-решение начального уровня. А также концептуальный прототип (проектирование из готовых функциональных модулей) и "программный" прототип (можно брать за основу и развивать под индивидуальные потребности).

      Если придерживаться задумки "минимальная стоимость владения", то "веб-морда" приложения для исполнителя - это вариант (писать под две нативные платформы - дорогое удовольствие, хотя можно найти что-то усредненное... типа PhoneGap). Поэтому вариант-минимум: "веб-морда" (JavaScript) -> HTML5 -> встроенная в веб-браузер геолокация -> технологическая платформа под веб-браузером -> смартфоны, планшеты, ноутбуки (может, водитель-экспедитор / автокурьер свой лаптоп захочет использовать). Повторю, это начальный уровень, отправная точка для рассмотрения различных проектных вариантов.


      1. erpacademy Автор
        01.12.2022 18:41

        Маленькое пояснение: в данной начальной версии, мобильное приложение - это высылаемый с сервера (АРМ'а логиста / диспетчера) на эл. почту исполнителя сконфигурированный html-файлик со всей начинкой для рейса - планом доставки (заказы и расписание) + прикладной JavaScript-код (для визуализации, маршрутизации уже конкретного рейса средствами Google Карты (как пример) с учетом трафика в данный момент времени, отправки сообщений о выполнении работы обратно на сервер через - на выбор: HTTP/Rest или та же самая эл. почта).


  1. GbrtR
    01.12.2022 17:41
    +3

    Немного не в тему, но случайно увидел что «Valid until» принимается в формате: y.d.m

    Реально интересно почему? y.m.d можно представить зачем, но y.d.m? Любопытство не даёт заснуть.


    1. erpacademy Автор
      01.12.2022 17:55

      Внутренний американский формат представления даты, одного из языков программирования, задействованного в данном ИТ-решении. Я оставил пока без преобразования при выводе в поле веб-формы для настройки. Предполагается, что эту форму видит администратор, а не конечный пользователь. За несколько дней до окончания периода действия, предупреждение выводится уже в основной отчет по планированию, на основную форму, в обычном - европейском формате даты.

      В самом начале я сделал эту опцию - ограничения работы, так как предполагал создание веб-сервиса по подписке: думал, что сам лично буду задавать период действия. Но теперь это Freeware, и осталось как рудимент просто для напоминания - чтобы загружать / обновлять новую версию раз в полгода.


    1. mobilz
      01.12.2022 17:57

      яростно плюсую и негодую ) каждый раз, сталкиаясь с форматом год-день-месяц -- громко кричу.


  1. natberspower
    01.12.2022 18:09
    +2

    Привет! Какой интересный прототип и задумка. Я занимаюсь Доставкой в Додо Пицце. У нас все по-другому, но всегда интересно, как у других. А можно с тобой где-то в личке пообщаться? Мы тут всей командой прочитали, кое-что не догнали, а кое-что интересно уточнить?))


    1. erpacademy Автор
      01.12.2022 18:10

      Конечно, для этого и публиковал статью.


      1. Mantis-religiosa
        01.12.2022 21:28
        +1

        Привет! А какая задача у системы? Я на скриншоте видел точки, это я так понимаю адреса доставки?


        1. erpacademy Автор
          01.12.2022 22:56
          +1

          Привет! Задача "классическая": 1) спланировать оптимальным образом развоз (delivery / pickup) грузов / оборудования / людей по точкам (адресам) с учетом ограничений (временные окна, ограничения на макс. вес, объем, и др.), чтобы суммарная стоимость перевозок была минимальна (учитываются затраты на расстояние, время в пути, простои / ожидания и др.) [Еще это называется Vehicle Routing Problem (VRP)]; 2) передать план развоза на оконечные устройства исполнителей (вероятнее всего, смартфоны); 3) собрать данные об исполнении плана.

          Но задачей моего проекта было: сделать так, чтобы конечное ИТ-решение было бесплатным (свободно распространяемым), при этом могло приносить ощутимую пользу тем предприятиям, которые только приступают к оптимизации своей транспортной логистики. Зарабатывать я планировал на адаптации ИТ-решения под уникальные потребности бизнеса, делая это тоже интересным (с технической точки зрения) образом...


          1. DODO_Zhukov
            02.12.2022 14:02

            Я правильно понимаю понимаю, что у нас заранее (до начала смены, рабочего дня и т.п.) есть список адресов, по которым следует выполнить доставку. И у нас до начала смены так же есть список исполнителей.
            @natberspower уже упоминала, что мы занимаемся Доставкой в Додо Пицце. И у нас задача несколько другая, у нас в течении дня есть некоторый поток заказов и их необходимо распределять между доступными курьерами, решая приблизительно те же задачи


            1. mobilz
              02.12.2022 15:56

              простите что вмешиваюсь, у вас курьеры свои, или привлечённые? у "папы" в своё время доставка была реализована по типу такси, когда курьер сам принимает решение, какой заказ он берёт, какой нет. т.е. пиццерия принимала заказы и готовила, а доставкой по сути занимались сами курьеры. У вас сейчас такая же схема, или система сама накидываем заказы курьерам?


            1. erpacademy Автор
              02.12.2022 17:19

              Да, правильно, ИТ-решение начального уровня работает так. Но концептуально это своего рода крайние точки одного и того же - планировать раз в смену или в интервале, например, час или четверть часа.