Главная | Все статьи | Дневник студента

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

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

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

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

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

Это веб-инструмент, и на клиентской части используется 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
2
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 25 апреля
профессия
от 6 183 ₽ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 25 апреля
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 25 апреля
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 25 апреля
профессия
от 9 900 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 25 апреля
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
в разработке
Старт 25 апреля
профессия
Верстка с использованием последних стандартов CSS
5 месяцев
с нуля
Старт в любое время