取送订单实时业务规则配置参数
字符串集合: 是用分号(;)隔开的字符串
Team配置参数
在实时取送场景中涉及到如下的配置参数,首先是团队层面的(team):
参数名 | 类型 | 说明 |
---|---|---|
enabled_rule_codes | 字符串集合 | 启用那些“初选”规则 ,可用的规则basic;area_code;tolerance_check;geo_merge;max_pick2drop_merge;worker_radius |
meter_search_radius | 整数 | 订单可以分配给最远多少米的员工 |
meter_search_radius_whitelist | 整数 | 如果做白名单强制指定,订单可以分配给最远多少米的员工 |
peak_period_spec | ||
enable_accum_items | ||
enable_level_items | ||
enable_skills | ||
allow_mixed_area | ||
meter_same_area | ||
meter_other_area | ||
enable_accum_items | ||
enable_accum_items | ||
limit_same_location_stack | 0 | |
peak_period_spec | 字符串集合 | |
period_unit_second | 3600 | |
meter_same_location_match | 10 | |
meter_priority_merge_pick | 300 | |
meter_priority_merge_drop | 1000 | |
meter_allowed_merge_pick | 2000 | |
meter_allowed_merge_drop | 4000 | |
meter_merge_drop_scaling | 20000 | |
meter_max_pick2drop_merge | 1000 | |
tolerance_seconds | 0 | |
nbr_jobs_per_slot | 0 | |
... | ... | ... |
规则列表
基于上面的参数组合,取送订单支持如下的业务规则:
排单优先级
所有订单和员工都从属于一个区域编码area_code。如果你的业务只有一个区域,那么请填写一个常量,比如“A”。当出现一个新订单的时候:
- 本区域内的骑手如果距离小于meter_same_area,而且是空闲骑手,按照距离最近的优先。
- 其他区域内的骑手如果距离小于meter_other_area,而且是空闲骑手,按照距离最近的优先。
可以配置在某个时间段(peak_period_spec)优先合单还是优先选择空闲骑手。
- 如果优先合单,取距离在meter_priority_merge_pick米,送距离在meter_priority_merge_drop米内,按照距离优先合单。 不考虑其他骑手。
- 如果优先选择空闲骑手, meter_same_area公里内空闲骑手优先,meter_other_area公里内其他区域的骑手优先直接分配。不考虑任何身上已有订单的骑手。
如果订单的取送都是相同地址,如果limit_same_location_stack == 0, 可以累加无限订单, 即使超过
如果前面的优先搜索都没有匹配成功,根据配置最大单数,和最远距离,算法允许寻找其他的订单进行合单。 算法从所有符合条件的骑手中选择一个"分配后新增距离最小"的分配。 任何情况下,如果合单,两个送的距离必须是meter_allowed_merge_drop以内。下面三个参数一起控制合单的最远距离,比如:
- "max_meters_radius_merge_drop": "500",
- "max_meters_radius_merge_drop_scaling_distance_km": "15",
- "max_meters_radius_merge_pick": "2000"
比如当前订单从餐厅到客户是5公里,那么骑手身上现有dropoff和新订单到dropoff 差距666米内会被合单。 500 * (1 + 5 / 15) == 666 如果当前订单从餐厅到客户是20公里,那么骑手身上现有dropoff和新订单到dropoff 差距1100米内会被合单: 500 * (1 + 20 / 15) == 1100
可以强制指定骑手,忽略前面的规则限制,只要处于meter_search_radius_whitelist距离内,确定分给这个骑手,然后执行TSP优化。
正常情况下,任何员工身上的任务数不能超过nbr_jobs_per_slot。