UU家政自动派单问题研究及算法设计_算法_邻域
在家政派单问题中,可以将获取到的家政订单看作要配送的货色,将跑男看作参与配送的车辆,将跑男设置的初始接单位置看作配送中央,而订单的预约做事韶光段便是货色哀求投递的韶光窗口,我们的目的便是决定订单和跑男的匹配结果,使得各项约束均被知足(由于韶光约束的存在,订单和跑男的匹配结果也决定了跑男做事订单的顺序,即行驶路线),且使得整体的派单本钱最小,在我们的家政问题中,定义了两类须要优化的“本钱”:(1)为了提高做事质量,要最大化所有订单匹配跑男的均匀做事分,做事分是基于跑男上一个周期内的接单量、客户评价等指标打算的来衡量跑男做事质量的权重分数;(2)最小化跑男每单的均匀行驶间隔。
由此,可以建立起身政派单问题的数学模型如下:
1、凑集:2、决策变量:3、模型参量:4、目标函数与约束条件(仅展示部分约束):每个进行做事的家政跑男都必须具有该订单所需的技能;每个订单只能分配给一个家政跑男完成;家政跑男的接单总数不能超过其本月可接单的最大数量限定;跑男要在订单的最晚开始韶光前到达顾客点;订单的做事韶光要在跑男的可接单韶光范围内。须要把稳的是,我们的派单问题和VRPTW的差异在于:(1)路径方案问题中的订单每每是在同一个韶光段内的,制订好配送路径后,车辆一定因此路径中的上一个节点为出发点连续行驶至下一个节点;而由于家政订单是有很长的预约期限的,可能同批进行指派的订单不在同一天,这时就要考虑新分配的订单是否为当天的首单,如果是首单则默认因此跑男的初始接单位置为出发点(为了简化表达,上面的数学模型中没有表示这一点);(2)传统的路径方案问题中所有车辆在初始状态都是完备空闲的,而在我们的问题中家政跑男身上可能有之前已分配的订单占用排期,还有请假、开工状态等与跑男可接单时段有关的成分,须要考虑的环境更加繁芜。
#三、算法设计#1、常用的求解算法先容车辆路径问题作为经典旅行商问题的拓展,是一个 NP-Hard 问题,特殊是对付一些约束繁芜和规模较大的算例来说,想要找到最优解或近似最优解非常困难,因此车辆路径问题的求解一贯是国内外学者研究的焦点。目前,车辆路径问题的求解算法可以分为以下几类:精确算法(Exact Algorithm)、传统启示式算法(Heuristic Algorithm)、元启示式算法(Metaheuristic Algorithm)。
精确算法指能求得优化问题最优解的算法,目前广泛运用于 VRP 问题求解中的精确算法包括:分支定价法(Branch and Pricing Algorithm)、动态方案法( Dynamic Programming Algorithm)、割平面 法(Cutting Planes Algorithm)等。但是精确算法会受模型约束和求解规模的限定,一样平常只能求解较小规模的算例,VRP 问题已被证明是 NP-Hard 问题,随着顾客节点数量的增加,求解路径的备选方案会呈现指数性的爆炸式增长,利用精确算法每每须要巨大的韶光进行求解,乃至无法求出最优解。
启示式算法起源于仿生学,是指通过对过去履历的归纳推理以及实验剖析来办理问题的方法,即借助于某种直不雅观判断或试探的方法,以求得问题的次优解或以一定的概率求其最优解。启示式算法的利害紧张是通过算法的通用性、稳定性以及收敛性来进行评判的。启示式算法可分为传统启示式算法和元启示式算法。传统启示式算法包括布局型方法、局部搜索算法、松弛方法、解空间缩减算法等。常见用于求解车辆路径问题的传统启示式算法有:贪婪算法(Greedy Algorithm)、扫描算法(Scanning Algorithm)、节约算法(Clark and Wright Saving Algorithm)等。
元启示式算法是对传统启示式算法的改进,同时结合了随机布局算法与局部搜索算法的特点,比传统启示式算法的求解更精确更稳定,而且元启示式算法每每不须要依赖于某一类问题的特定条件或环境就能够实现,因此能够用于求解不同背景、不同类型的优化问题。常用的元启示式算法包括遗传算法(Genetic Algorithm, GA)、仿照退火算法(Simulated Annealing, SA)、蚁群算法(Ant Colony Optimization, ACO)、粒子群算法(Particle SwarmOptimization, PSO)、禁忌搜索算法(Tabu Search, TS)、大规模邻域搜索算法(Large Neighborhood Search, LNS)等。
#2、自适应大规模邻域搜索算法简介自适应大邻域搜索算法是由 Ropke 与 Pisinger在 2006 年在大规模邻域搜索算法(Large Neighborhood Search, LNS)算法的根本上提出的一种元启示式算法,其在传统邻域搜索(Neighborhood Search, NS)的根本上增加了的对算子表现的评价标准,使算法能够根据算子的表现自动选择较优的算子对当前解进行毁坏与修复,从而有一定几率得到更好的解。邻域搜索算法(NS)也叫做局部搜索算法,是一类广泛运用于组合优化问题求解中的启示式算法,其事理是通过在每次迭代时对当前解实行所定义的邻域动作(Neighborhood Move),搜索当前解的邻域空间,以找到比当前解更优的可行解解,个中邻域动作便是关于当前解的一个函数,通过对当前解实行这个函数,就可以得到一个解的凑集,这个解的凑集便是当前解在此邻域动作下可搜索到的邻域(Neighborhood)。
邻域的定义(也便是邻域动作的确定)是邻域搜索算法中最为关键的环节,一样平常来说可搜索到的邻域越大,每次迭代所得到的新的局部最优解的质量就越高,这样终极得到的全局最优解的质量也就越高。
在传统的邻域搜索算法中,大部分算法都只利用了一种邻域动作,比如仿照退火算法,包括 LNS 中也只利用了一种毁坏算子和修复算子,因此这些算法只能搜索解空间中的很小一部分,较难找到全局的最优解;也有一些算法中利用了多种邻域动作,如变邻域搜索算法(Variable Neighborhood Search, VNS),
它通过利用多个算子在当前解的多个邻域中探求更优的解,能够有效提高算法在全体解空间的搜索范围,但是 VNS 在利用算子时会盲目地将每个算子对应的邻域动作全部实行一遍,搜索的效率并不高,缺少一些启示式的信息辅导。而ALNS 很好的填补了上述算法毛病:首先,ALNS 在 LNS 的根本上,许可在同一个搜索中利用多个毁坏算子和移除算子来获得当前解的邻域,大大地拓展了算法的搜索空间;
其余,ALNS 会为每毁坏算子和修复算子分配一个权重,通过该权重来掌握每个毁坏算子和修复算子在搜索期间当选择的概率,并且会在迭代中动态地调度该权重,通过算子间的相互竞争来天生当前解的邻域构造,从而有很大概率能够找到更好的解。
#3、ALNS算法求解派单问题
如上文所述,我们把家政派单问题抽象为一种VRPTW问题后,就很随意马虎利用ALNS算法来进行求解了,全体过程可以描述为:
首先,利用某种规则将所有订单分配给跑男(需知足所有约束),构成派单问题的一个初始可行解(Initial Feasible Solution);
随后,我们进行反复的循环,在每次循环中实行一种毁坏算子(Destroy Operator)和修复算子(Repair Operator),大略来说,毁坏算子便是把已分配的部分订单重新移除所在跑男的已分配订单列表(即所在路径),修复算子便是把移除的这部分订单通过某些准则进行重新分配,从而得到了输入解的邻域空间中一个新的可行解,这个新的解有一定概率比输入的解更优,这便是邻域搜索的过程;
每一次循环完成之后,我们会设定一个解的接管准则(Accept Criteria),如果新解比输入解更优,乃至得到了当前的全局最优解,那我们就接管这个新的解,并将其作为下一次循环的输入,如果新解比输入解更差,则须要根据接管准则进行判断,是接管还是舍弃,如果舍弃,则不才次循环中仍旧利用本次循环的输入解;
同时根据新解的质量,更新本次循环中利用的毁坏算子和修复算子的得分,得分高的算子在之后的循环中当选择机制(Select Scheme)选中的概率也会增加,这便是算法名中自适应(Adaptive)的事理;
末了,在循环达到算法的终止准则(Stop Criteria)(常日是循环多少次或者连续多少次都没有得到改进的解)之后,停滞所有算法循环,将当前的全局最优解作为算法的终极解输出。
结合UU家政的业务逻辑,我们设计家政派单的ALNS算法框架如下:
以包含50个订单、300个跑男的算例对算法效果进行测试,如图所示,相对付利用就近分配(Nearest Assign)方法天生的初始解,ALNS算法在循环达到1000次时解的改进程度达到了27%旁边(事实上,由于我们的优化目标中间隔的权重设置地比较高,因此当订单数量较少时,就近分配天生的初始解已经是质量较好的可行解了),而从图中我们也可以清晰看出ALNS算法通过不断循环探求最优解的过程。
而利用ALNS算法求解家政派单问题也存在着一些不敷,个中最大的问题便是算法的韶光繁芜度较高:目前大多数ALNS算法都会利用贪婪插入(Greedy Insertion)和遗憾值插入(Regret Insertion)作为修复算子,而我们对毁坏解进行修复的过程须要遍历所有未分配订单的所有可插入位置,将最小插入本钱(或者是遗憾值)最低的未分配订单分配到其最小插入本钱对应的位置,这个过程的韶光繁芜度为O(2^n);
其余,我们在搜索每个订单的可插入位置时,也须要遍历所有的跑男,以及跑男订单列表中的每一个位置,这个过程的韶光繁芜度也是O(2^n)。也便是说当算例中包含的订单(在我们的问题中还包括跑男身上原有的订单)和跑男数量级持续增长时,全体算法的求解韶光会相应地呈现指数级增长,这可能会造成订单相应的延迟。当然,对付当前家政订单的体量而言,ALNS算法是能够在可接管的韶光内得到可行解的,未来须要从数据构造优化和修复算子优化这两个方向对算法的韶光繁芜度进行改进。
其余,当前的自适应准则只是纯挚通过大略的分数加减来评判各种算子的利害,从而决定接下来当选中的概率,这种自适应准则具有一定的局限性,当前已有部分研究将机器/强化学习算法加入算子的选择机制中(当前有一些开源的项目在选择机制中加入包括多臂老虎机算法在内的机器学习算法 https://github.com/N-Wouda/ALNS),未来也可以做这方面的考试测验。
#四、算法上线效果目前新版的自动派单算法已经在郑州正式上线近两周的韶光,在此期间由产品经理向家政运营宣导了新的指派模式,同时根据上线后的数据进行了相应的参数调度和优化,结果显示,相较于原有的自动指派逻辑,新版自动派单+唤醒算法上线后的自动指派成功率提升了2倍以上,订单的均匀相应速率也得到了明显缩短,算法在短期内效果基本符合预期。
#参考文献
[1] Ropke S, Pisinger D. An adaptive large neighborhood search heuristic for the pickup and delivery problem with time windows[J]. Transportation Science, 2006, 40(4):455-472. https://doi.org/10.1016/j.cor.2016.01.018
[2] Shaw P. Using constraint programming and local search methods to solve vehicle routing problems[J], International Conference on Principles and Practice of Constraint Programming, 1998, 1520:417-431. https://doi.org/10.1007/3-540-49481-2_30
[3] Schneider M, Stenger A, Goeke D. The Electric Vehicle-Routing Problem with Time Windows and Recharging Stations[J]. Transportation Science, 2014, 48(4):500-520. https://doi.org/10.1287/trsc.2013.0490
[4] Solomon M M. Algorithms for the Vehicle Routing Problem with Time Windows[J]. Transportation Science, 1995, 29(2):156-166. http://dx.doi.org/10.1287/opre.35.2.254
[5] https://blog.csdn.net/***_58446570/article/details/128684643
[6] https://github.com/N-Wouda/ALNS
出处:https://tech.uupt.com/?p=1469
本文系作者个人观点,不代表本站立场,转载请注明出处!