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

Мотивация

Вы много работали над новой функцией, которая изменит правила игры. С большими переменами приходит большая ответственность. Теория верна, но ваша новая реализация затронет множество различных движущихся частей. Вы просмотрели исторические данные, применили свой новый метод к данным и увидели очевидные преимущества. Проблема в том, что, применив ваш метод, состояние мира изменится. Это станет тем, чего вы никогда раньше не видели. Что, если выгоды произойдут так, как вы предсказали, но непредсказуемо приведут к тому, что вся система войдет в состояние, при котором некоторые процессы начнут отказывать? Конечно, есть возможность запустить A / B-тест (хотя в некоторых случаях это может быть невозможно) - для этого потребуется только фактическая реализация функции в приложении, запуск которой может занять несколько недель, а в худшем случае сценарий случая негативно влияет на реальных людей. Было бы полезно иметь песочницу, где можно было бы быстро и безопасно проверить свои идеи. Войдите в симулятор.

Обзор

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

Среда моделирования позволяет пользователям понять, как разные части города влияют друг на друга. Насколько изменится время прибытия, если спрос увеличится в X раз? А если мы изменим алгоритм диспетчеризации? Многие такие ситуации невозможно проверить в реальном мире, поскольку 10-кратного спроса еще не произошло. Нет данных для случая, когда половина предложения падает во время вечернего движения в час пик. Что тогда будет с городом? Есть ли алгоритмы, которые лучше работают в таких экстремальных условиях? Симулятор настроен для ответа на эти типы вопросов.

Как сделать его реалистичным

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

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

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

Кроме того, сватовство может иметь разные вкусы. Допускаем ли мы несколько пассажиров в одной машине? Должны ли мы сопоставлять один заказ за раз или мы должны пытаться сопоставить несколько заказов одновременно, выполняя венгерское максимальное сопоставление? Различные алгоритмы сопоставления требуют разных реализаций и также будут иметь разные последствия для города. Другой аспект сопоставления - определение «доступного автомобиля». Какие автомобили могут быть отправлены, а какие нет? Дизайн Симулятора позволяет пользователю определять свои собственные ответы на эти вопросы. Чтобы разобраться в результатах и ​​иметь точку сравнения - базовую линию - алгоритмы, которые в настоящее время разрабатываются, также реализованы в симуляторе. Чтобы увидеть, насколько хорошо базовый план Симулятора работает по сравнению с реальностью, можно, например, посмотреть на распределение расчетных сроков прибытия (Vis3) или сравнить количество выполненных заказов между Симулятором и реальностью.

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

Примеры / результаты

Представьте, что у вас есть набор данных заказов на полный день с временной меткой, сгенерированной временем, меткой времени получения (если он получил поездку), меткой времени высадки (если он получил поездку), координатами начала и конечными координатами. Кроме того, в каждом заказе указано местоположение подходящего водителя во время принятия поездки. Вы хотите знать, сколько из этих заказов будет затронуто, если мы разрешим несколько заказов в одной машине, и все будут готовы прокатиться вместе. Вы также ограничили задачу таким образом, что весь путь от матча до высадки не может занять в 1,1 раза больше времени, чем предполагалось изначально. Если поездка длилась 10 минут с одним пассажиром, то по новым правилам новая поездка, в которой может находиться еще один человек, не может длиться более 11 минут для этого пассажира.

Можно просмотреть каждый заказ и найти заказы с аналогичными пунктами получения и возврата в определенное временное окно. Кроме того, можно создавать маршруты для каждого заказа, а затем находить маршруты, которые имеют некоторый показатель сходства выше порогового значения. Это уже вносит сложность, поскольку мы должны учитывать скорость движения для разных маршрутов - даже если маршруты похожи, у водителя может не хватить времени, чтобы забрать один заказ и перейти к следующему. Также могут быть заказы, которые имеют разные маршруты по отдельности, но при совместном рассмотрении имеют альтернативный маршрут, который не добавляет временных штрафов. Таким образом, вам понадобится система маршрутизации, а также довольно точная оценка времени, необходимого для прохождения каждого маршрута. Теперь вы также захотите узнать, есть ли какие-либо заказы, в которых на самом деле не было машины, но, благодаря дополнительному месту в машине, вы можете получить поездку. Сможете ли вы выполнить больше заказов при том же объеме поставок? Решить ее, просто взглянув на данные и сделав некоторые предположения, невозможно. Каждое решение меняет состояние мира - разные заказы совпадают, и водители оказываются в других местах. Достаточно скоро вы понимаете, что вам нужен симулятор, который имитирует весь процесс передвижения водителей и подбора клиентов. Ниже, рассчитанный с помощью Симулятора, приведен пример процента поездок, на которые повлияло дополнительное место в автомобиле и данные ограничения в трех разных городах (Vis4).

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

В качестве примера для этой симуляции мы искусственно снизили подачу в 4 раза с 7 утра до 7 вечера. Понятно, что благодаря новому алгоритму меньше заказов без машины (Vis5). Можно предположить, что мы получаем эквивалентное увеличение количества выполненных заказов. Это не так, как показывает Симулятор (Vis6), и это связано с тем, что условия для успешного сопоставления могли не быть соблюдены для всех этих вновь полученных заказов - согласно нашей встроенной модели. Но все еще есть рост, так что ничего не сломано.

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

Заключительные слова

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

Если эта запись в блоге заинтересовала вас тем, чем мы занимаемся, помните, что мы нанимаем сотрудников - посетите нашу страницу вакансий.