Skip to main content

Ранжирование перевозчиков

API

Одиночный инференс
{
    "directions": ...,
    ... (аргументы метода BaseRanker.__call__())
}

Обычный последовательный инференс. Формат ответа - список строк-рекомендаций для данного элемента.

Параллельный инференс
{
    "model_type": "order",
    "data": [
        (каждый элемент списка - аргументы для одиночного инференса)
    ]
}

Параллельный инференс использует несколько потоков (по дефолту 10) на каждом воркере. Могут быть проблемы с atisu (максимум 10 запросов в секунду). Отдается список ответов по каждому запросу (т.е. если в запросе было 3 элемента - отдается список из 3 списков перевозчиков).

Инференс для корзины графиков
{
    "model_type": "schedule",
    "data": [
        (каждый элемент списка - аргументы для одиночного инференса)
    ]
}

По своей сути параллельный инференс, но отдается пересечение множества перевозчиков с каждого элемента, формат ответа как у одиночного инференса.

Инференс для цепочек
{
    "model_type": "chains",
    "data": {
	"chains": ...,
        "radius": ...
        (аргументы вызова метода BaseRanker.cart_chains_carriers())
	}
}

 


 

Архитектура

На текущий момент ранжирование выполняется сортировкой. Первая часть выдачи формируется из БД, вторая часть присоединяется из ati.su . Они сортируются и фильтруются отдельно.

Перед выдачей список чистится от дубликатов по наименованию перевозчика, оставляя первую запись и удаляя последние.

Собственные перевозчики

Перевозчики с активными форвард контрактами

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

Если таких перевозчиков под заявку подобрано несколько, то они сортируются:

  1. Перевозчики сортируются по цене заявки по этому направлению, прописанном в их договоре (с учетом НДС)

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

Остальные перевозчики 

Подбор перевозчиков осуществляется в масштабе регионов с учетом грузоподъемности. Под заявкой должны быть перевозчики, которые за последние 90 дней выполняли заявки между данными регионами, или имеют свежий тариф между данными регионами, или зарегистрированы на данное направление, но тарифа не имеют, в конце перевозчики из ati.su . Список перевозчиков должен быть отсортирован. Сортируется по взвешенной сумме рангов по следующим признакам (в скобках указан вес):

  1. Медианная цена перевозки между городами (1.0).

  2. Число перевозок между городами (2.0).

  3. Медианная цена перевозки между регионами (0.8).

  4. Число перевозок между регионами (0.8).

Перевозчики с одинаковым рангом сортируются в алфавитном порядке. Настройки сортировки (ранжируемые признаки, порядок сортировки) указываются в конфиге.

ATISU

Перевозчики запрашиваются по городу отправления и городу прибытия. Список ранжируется по следующему приоритету:

  1. Total score

  2. Recommendation count

  3. Status

Перевозчики в списке классифицируются (   DD-2562 Выполнено Изменение рекомендаций перевозчиков с ATI.SU), параметр carrier_class в ответе:

  1. Исходя из заданных в заявке точек забора и доставки груза (из А в Б).

  2. Исходя из заданной в заявке точки забора груза (из А по всем направлениям).

  3. Исходя из заданной в заявке точки забора груза + n-километров и заданной точки доставки груза + n-километров .

  4. Исходя из заданной в заявке точки забора груза + n-километров (из А+n-километров по всем направлениям).

Для собственных перевозчиков параметр carrier_class = null