В основном программисты занимаются автоматизацией. И эта статья про то, как автоматизировать поездки.
Доброго времени суток. На данный момент я работаю внутренним разработчиком в одной крупной компании. Это статья о том, как мы развозим в ночное время сотрудников, и какие технологии для этого используем.
Разработкой инструмента занимался я один, и в свое время мне помог Хекслет. Когда начинающий разработчик делает первые шаги, он тратит очень много времени на то, чтобы узнать, что учить. А если учиться с наставником, или выбрать профессию на Хекслете и пролистать темы, станет понятным, что учить и как.
Это веб-инструмент, и на клиентской части используется 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. Он анализирует матрицу, решает и дает в ответе массив, в котором указана очередность путей. Это все снова возвращается к «Яндексу», и по координатам «Яндекс.Карты» строят маршрут, который мы увидели выше.
Теперь вы знакомы с тем, как решаются вопросы с оптимизацией.
Необязательно все знать. Нужно просто знать, где найти.