Все статьи | Блог студента

Пример автоматизации развоза сотрудников

Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Пример автоматизации развоза сотрудников главное изображение

В основном программисты занимаются автоматизацией. И эта статья про то, как автоматизировать поездки.

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

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

Это веб-инструмент, и на клиентской части используется VueJS. В программе Фронтенд-разработчик можно выучить React. Отличие VueJS и React не большие, но если вы хотите с шансом побольше найти работу, то учите React. Вакансий по нему больше. Серверная часть инструмента написана на NodeJS в связке с некоторыми библиотеками.

А теперь покажу инструмент и объясню, что и как работает.

Для начала нам нужно определиться с контейнером для карт. Есть разные контейнеры. «Яндекс», Google. Но и есть бесплатные, например Leaflet. Leaflet — всего лишь контейнер, и не имеет самой карты. Но в связке с «Яндексом», Google, или OSM (Open Street Map) — это станет картой. Картой, которую мы привыкли видеть в интернете.

В моем проекте используются «Яндекс.Карты».

Для начала нужно выбрать город. (можете открывать фото в новой вкладке, чтобы было корректно видно). Фото выбора города

Город выбирается для серверной части. Потом нам нужно создать сотрудников или загрузить с Excel-файла.

Фото выбора сотрудников

После чего нажимаем на кнопку «Найти сотрудников на карте» и сотрудники появляются на карте.

Но как карта узнает о сотрудниках? Для этого существует геокодинг. Дело в том, что у каждого сотрудника есть свой адрес. Инструмент обращается к «Яндексу» и спрашивает о координатах. «Яндекс» дает ответ, и все это отображается на картах.

Фото сотрудников на карте

Заметьте, что у каждого сотрудника разное время.

Сотрудник, который отвечал за развоз, тратил по 2-3 часа в среднем. Вы можете увидеть количество сотрудников. Жмем «Построить маршрут» и происходит та самая магия. Фото маршрутов на карте

А вот пример конкретного времени. На изображении маршрут на 02.00. Вы можете посмотреть, маршрут действительно оптимальный.

Фото маршрутов на карте

Как работает оптимизация? На серверной части используется NodeJS. Это мощный инструмент и на Хекслет есть профессия Node.js-разработчик.

Сначала нужно построить матрицу расстояний. Матрица содержит расстояние от каждой точки до каждой точки. Откуда ее можно получить? Можно запросить у «Яндекса». Но дело в том, что это платно. Как и геокодинг, также платный. Мы решили сэкономить на матрице расстояний, и использовать OSRM Project. Эта библиотека, которой нужно скормить карты. Кормим ее с помощью OSM (Open Street Map) — там можно скачать любую часть мира. Но чем больше часть, тем больше места занимает в ОЗУ. Вся Россия примерно занимает 3ГБ. Но я скачал отдельно города и снизил до 200-мбайт.

После получения матрицы нужно построить оптимальный маршрут. Этим занимается Google OR_TOOLS. На сайте OR_TOOLS сказано: OR-Tools — это быстрое и портативное программное обеспечение для комбинаторной оптимизации.

NodeJS запускает скрипт на Python. Он анализирует матрицу, решает и дает в ответе массив, в котором указана очередность путей. Это все снова возвращается к «Яндексу», и по координатам «Яндекс.Карты» строят маршрут, который мы увидели выше.

Теперь вы знакомы с тем, как решаются вопросы с оптимизацией.

Необязательно все знать. Нужно просто знать, где найти.

Аватар пользователя bruto
bruto 04 июля 2021
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
25 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
25 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
25 мая 5 месяцев