Tproger: Какой самый сложный алгоритм вы использовали в своей работе 

Отвечает Дмитрий Зайцев, эксперт по разработке ПО «Рексофт»

Дмитрий Зайцев, эксперт по разработке ПО компании «Рексофт»
Дмитрий Зайцев, эксперт по разработке ПО «Рексофт»

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

Это был проект для крупной компании-экспедитора, который осуществляет перевозку грузов различными видами транспорта между РФ и 150 странами мира. Главная задача экспедиционной компании − составить маршрут доставки, который удовлетворит клиента по времени и цене. Для этого используют мультимодальную перевозку. В процессе применяют два или более типов транспорта: автомобильный, железнодорожный, морской или авиационный. Обычно коммуникация идет по телефону или почте.

Нам было необходимо перевести эту работу в онлайн – придумать и реализовать поиск кратчайшего пути из точки А в точку Б для проекта грузовых перевозок. Алгоритмов для поиска кратчайшего пути много, но в нашем случае они практически не помогли. Пользователю надо было предоставить возможность искать за считанные минуты лучшие тарифы с наименьшим временем для перевозки его груза.

Все это усложнялось большим количеством международных компаний-перевозчиков, разнообразием тарифов у каждого из них и дополнительных наценок по каждому из направлений. Поиск был параметризован, что еще больше усложнило проблему. Поиск кратчайшего пути, где каждая точка имеет некий вес, это первое, что пришло нам в голову. Однако представьте, что в каждой точке есть еще набор динамических условий, чтобы их проверить необходимо выгрузить чуть ли не всю информацию из БД.

Мне пришла идея − для каждого тарифа можно выставлять оценку по нескольким критериям. Эти оценки пересчитывались при изменениях тарифов или каких-то глобальных условий, например, изменение НДС или наценок. Такой подход к оценке избавил от дополнительных просчетов во время каждого запроса. У любого тарифа было с десяток различных оценок, по которым можно было, например, сортировать или высчитывать итоговый вес.

В конечном итоге нам пришлось еще очень долго работать над этой задачей по ряду других более приземленных причин. Тарифы от разных перевозчиков сводились к примитивным описаниям и сильно отличались друг от друга по структуре, их было просто невозможно формализовать. Для того, чтобы доставить товар из А в Б, надо еще заехать в С на другом конце света, т.к. там налоги меньше и лучше условия.

В общем, это была очень нетривиальная задача для всей команды. Мы серьезно погрузились в бизнес-тематику заказчика, но и результат был отличный – мы создали платформу для первого в России цифрового экспедитора Agorafreight.com.

Подробнее о проекте Agorafreight можно прочитать здесь: проект на Global CIO

Источник: статья на Tproger

Изображение: Conny Schneider/Unsplash.com

ЕЩЕ НОВОСТИ