项目描述:Uber
了解 Uber 司机分配优化项目的背景与八项功能需求
简介
Uber 是全球最大的网约车公司。除了核心的乘客接送服务外,他们还提供食品和物品配送等服务。其用户群体(包括消费者和司机)正在迅速增长。因此,Uber 的工程团队持续探索更高效的方法,以将附近的司机合理分配给用户。
本章讨论的场景和问题聚焦于高效司机分配功能的优化,以及如何提升客户端应用的可访问性功能。
问题描述
假设你是 Uber 工程团队的一名开发者。团队正计划对司机派单流程进行优化,并增强客户端应用的可访问性功能,特别希望在雨天优化司机分配过程。
当用户请求乘车时,系统首先会筛选出距离用户位置最近的司机。接着,系统将从每位司机的位置出发,规划通往用户位置的路径,并判断司机是否能够实际抵达接客点。
城市地图被划分为多个检查点,每两个检查点之间的通行存在一定的成本。我们将计算每位司机通过多个检查点到达用户位置所需的总成本。该成本取决于路径上各检查点之间累积的雨水深度。最终,选择路径总成本最低的司机为该用户提供服务。行程结束后,系统需计算车费,并更新可访问性插件,将费用金额以语音形式播报出来。此外,为了帮助新司机快速上手,我们将为其推荐那些找到订单概率较高的路线。同时,我们还将调整排名机制,使低排名司机也有机会成为高评分司机。
功能需求
为实现上述功能,我们需要引入以下特性:
-
功能 #1:至少选取用户附近距离最近的 n 名司机,排除距离过远的司机。
-
功能 #2:计算在雨天城市中两点之间路径上的最大积水深度。
-
功能 #3:为每位司机从当前位置到用户位置规划一条路径,并计算出行成本,以便选出成本最低的司机。
-
功能 #4:将计算出的车费转换为英文单词,供系统识别和使用。
-
功能 #5:实现拼车功能,允许司机同时搭载多位乘客。当司机接上拼车乘客后,系统应为其推荐一条可能遇到更多拼车乘客的路线。
-
功能 #6:确定城市中最长的路线,以最大化发现乘客的可能性。
-
功能 #7:不再总是优先选择高排名司机,而是智能匹配司机与乘客,使高排名司机更有可能被选中,但低排名司机也应有一定机会被分配任务。
-
功能 #8:为司机找到前往乘客位置的最短路径。
理解这些功能需求并设计相应的解决方案,将有助于我们在 Uber 系统中实现所需的功能。
在接下来的课程中,我们将讨论这些功能的推荐实现方式。在开始之前,建议你先思考如何实现这些功能。随着你的思考深入,你会逐渐意识到需要解决的一些底层问题。而这些问题的解决方案,同样适用于常见的编程面试题。