一种车辆多举手进行选单的匹配策略

0 阅读5分钟

背景

现在的出行平台是滴滴出行一家独大,再加上多家聚合平台(高德、百度、美团、腾讯),一起瓜分流量的时代。

运力供应商当前单独仅靠自身品牌,已经难以引流维持公司正常运转。曹操出行、T3出行、如琪出行、哈啰出行等出行平台都是靠提供运力的方式,把品牌挂靠到高德、腾讯、百度等聚合平台,来提供出行服务。

这样的方式就造成了聚合平台非常强势,运力供应商只能适应规则来维持生存的环境。具体体现就是:

  1. 运力供应商提供了派单车辆,但是聚合平台要等待较长时间,来聚集多平台的派单结果,从中再决策最优结果。
  2. 聚合平台为了防止运力供应商一家独大,给每家运力供应商能够接单的概率相差不大,从而维持聚合平台把控流量的优势,而削弱对独家运力的强依赖。

规则的较量

在聚合平台规则的约束下,如果运力供应商完全配合这样的规则,就会导致自身运力效率严重受损。原因:

  1. 为聚合平台派送的车辆,聚合平台最终给单的概率不大,导致大量的车辆被无效派送。
  2. 聚合平台决策的时间较长,如果最终决策后又没有把订单给到运力平台,会导致车辆被无效浪费了决策时间。

运力供应商当然不会束手就擒,针对聚合平台的规则,车辆派送的规则也会对应调整:

  • 车辆派送给某个聚合平台后,不再锁定。在聚合平台决策期间,对这个车辆继续进行派单,可以再派给其它聚合平台,最终等哪个聚合平台先决策给单,我再把车辆锁定给哪个聚合平台。其它后给单的聚合平台,就会由于车辆被占用,导致订单被取消。
  • 当然,这里就涉及到派单策略优先级的问题,当平台有空驶车辆时,还是会优先派送空驶车辆;否则才会把一辆车同时派送给多个聚合平台。

聚合平台也不是好糊弄的。有的强势聚合平台就会要求,既然你把车辆派送给我了,我们之间的协议已经达成,最终我把订单给到你的时候,你就不能告诉我“车辆被占用”,否则我就按照被取消的订单数进行罚款。

聚合平台的约束规则一加强,运力供应商又得调整适配。

规则进一步复杂化

运力供应商针对不同聚合平台的约束规则,进一步优化车辆多举手的规则控制。

  • 针对高处罚的平台,一辆车只会举手一个高处罚平台,也就是一辆车只能举手一个高处罚订单,防止多举后被罚款。
  • 针对无处罚的平台,一辆车可以举手多个低处罚平台,还可以保持原来谁先给单,车辆给谁的策略。

以上规则,把高处罚和无处罚的平台,独立来看规则都很明确。但是一旦混合一起,一辆车即派了高处罚平台,又派了无处罚平台,这时就不能按照谁先给单,车辆给谁的策略了。

当一辆车同时举手给多个聚合平台时,规则就进一步复杂化:

  1. 先确定车辆已举手订单的价值排序。高处罚订单 > 高价值无处罚订单 > 低价值无处罚订单。
  2. 如果先给单的订单是最高价值的订单,则直接接单,后续再给单的订单,都进行取消。
  3. 如果先给单的订单不是最高价值的订单,则先倒计时等待,不直接接单,等待后续再给单订单进行比较:
    • 后续给单订单价值最高,则接起后续给单订单,取消倒计时等待订单。
    • 后续给单订单价值 > 倒计时等待订单,则取消倒计时等待订单,让后续订单继续倒计时等待。
    • 倒计时结束时,倒计时订单没有取消,则直接接起。后续再过来的订单,则取消。

车辆举手订单数的限制

车辆不管是举手高处罚的订单,还是举手无处罚的订单,一辆车对举手的订单都应该有一个限制策略,否则会由于一辆车举手订单数过多,导致过多订单被取消,从而引起平台收益变低。

如果一个车辆已经举手多个订单,再举手订单时,就要计算边际收益,只有边际收益满足要求才能继续举手。

y=f(n+1)f(n)y = f(n+1)-f(n)

yy: 边际收益,f(n+1)f(n+1): 车辆再举手新订单后的期望收益,f(n)f(n):车辆已举手订单的期望收益

f(n)=Σ(场景发生概率场景净收益)f(n) = \Sigma(场景发生概率*场景净收益)

场景发生概率: 给单的订单算给单率,没有给单的订单算不给单率
场景净收益:

  • 高处罚订单和无处罚订单都给单时: 高处罚订单流水 - 无处罚订单流水
  • 高处罚订单和高处罚订单都给单时: 负无穷大(-100000000)
  • 无处罚订单和无处罚订单都给单时: 无处罚高的订单流水 - 无处罚低的订单流水

示例

车辆已举手一笔高处罚订单A(给单率0.1,流水20)和无处罚订单B(给单率0.2,30),车辆再举手另一笔无处罚订单C(给单率0.3,流水10)时,那么期望边际收益为:

y=f(3)f(2)f(3)=(0.10.80.720)+(0.90.20.730)+(0.90.80.310)+[0.10.20.7(2030)]+[0.10.80.3(2010)]+[0.90.20.3(3010)]+[0.10.20.3(203010)]+(0.90.80.70)f(2)=(0.10.820)+(0.90.230)+[0.10.2(2030)]+(0.90.80)y=f(3)-f(2) \\ f(3)=(0.1*0.8*0.7*20) + (0.9*0.2*0.7*30) + (0.9*0.8*0.3*10) \\ + [0.1*0.2*0.7*(20-30)] + [0.1*0.8*0.3*(20-10)] \\ + [0.9*0.2*0.3*(30-10)] \\ + [0.1*0.2*0.3*(20-30-10)] \\ + (0.9*0.8*0.7*0)\\ f(2)=(0.1*0.8*20)+(0.9*0.2*30)\\ + [0.1*0.2*(20-30)] \\ + (0.9*0.8*0)

f(3)计算时:
一单举手时:(0.10.80.720)+(0.90.20.730)+(0.90.80.310) (0.1*0.8*0.7*20) + (0.9*0.2*0.7*30) + (0.9*0.8*0.3*10)
二单举手时:[0.10.20.7(2030)]+[0.10.80.3(2010)]+[0.90.20.3(3010)][0.1*0.2*0.7*(20-30)] + [0.1*0.8*0.3*(20-10)] + [0.9*0.2*0.3*(30-10)]
三单举手时:[0.10.20.3(203010)][0.1*0.2*0.3*(20-30-10)]
0单举手时:0.90.80.700.9*0.8*0.7*0

f(2)计算时:
一单举手时:(0.10.820)+(0.90.230)(0.1*0.8*20)+(0.9*0.2*30)
二单举手时: [0.10.2(2030)][0.1*0.2*(20-30)]
0单举手时: 0.90.800.9*0.8*0 \

最终结果y = f(3) - f(2) = 1.32