如何基于配送位置与库存水平对order agent进行合理批量分组
订单按配送位置分组的实现方案
你可以根据自身模型的复杂度选择以下两种可行方案:
方案1:预划分配送区域的分组(实现成本最低)
- 提前给所有
Customer类型的GIS点位新增zoneId属性,将地理位置相近的点位划分到同一个区域,分配相同的zoneId - 把原有的单订单集合
collection和单库存计数变量inventory,改为按zoneId分类存储的结构,推荐使用HashMap<String, List<Order>>存储对应区域的订单列表,再用另一个HashMap<String, Integer>存储对应区域的累计amount值 - 原有触发逻辑调整为:每次新订单进入时,先匹配其
deliveryLocation.zoneId,将订单加入对应区域的列表、累加对应区域的库存值,只要某一个区域的累计库存值达到20,就单独释放该区域的订单批次 - 可额外新增超时触发规则:若某区域累计15分钟(可按需调整)库存仍未到20,也自动释放当前批次,避免订单积压
方案2:GIS距离动态聚类分组(灵活性更高)
如果没有提前划分区域的条件,可以直接调用AnyLogic内置的GIS距离计算能力做动态匹配:
- 每次新订单进入时,先计算该订单的
deliveryLocation与当前未填满批次的所有订单点位的平均直线距离/道路距离 - 若距离小于你预设的阈值(比如同城配送可设为2-5公里),才将订单加入当前批次的
collection、累计inventory值 - 若距离超过阈值,且当前批次的累计
inventory已经达到15及以上的最小发单阈值,就直接释放当前批次,再将新订单作为新批次的第一个订单存入 - 若当前批次累计值还很低,可以将新订单暂时存入待分配缓存池,等后续有同区域的新订单进入时优先匹配
原有代码的批次释放逻辑不需要大幅修改,仅需要在
collection.add(agent)步骤前增加位置匹配校验规则即可。
内容的提问来源于stack exchange,提问作者Bart wolker
相关产品推荐
相关产品推荐

