龙空技术网

618 快递当天到,算法是如何实现的?

力扣LeetCode 594

前言:

而今朋友们对“物流路线算法”大约比较关注,同学们都想要分析一些“物流路线算法”的相关知识。那么小编在网上搜集了一些关于“物流路线算法””的相关知识,希望我们能喜欢,小伙伴们快快来学习一下吧!

1998 年 6 月 18 日,刘强东在中关村创业,成立京东公司。

从此,每年的 6 月成为了京东的店庆月。在店庆月,京东会推出一系列大型促销活动,其中 6 月 18 日是促销力度最大的一天。电商让利、营销炒作与广大剁手党共同形成了得天独厚的天时地利人和三大条件,6.18 迅速崛起,与双十一遥相呼应,成为又一大全民购物狂欢节。去年的 6.18 与双十一销售额均突破 2000 亿大关,今年战况如何,我们拭目以待。

每年的购物节来临前,由于网购订单瞬间激增,多家快递公司均会通过紧急增调飞机来解决订单货运问题。在物流行业,京东后来居上,已经做到了行业先驱地位,京东物流自 2018 年起,90% 的自营订单就已实现当日达或次日达。今年南通机场集团入股京东航空,进一步为京东物流提速。

有趣的是,每年的购物狂欢节前,不少快递员通过辞职或转行规避风头。全民购物狂欢顺带引爆出一场电商基层离职潮。

物联网时代

物联网,简称 IOT(The Internet of Things),是指通过信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等装置与技术,实时采集需要监控、 连接、互动的物体或过程,再通过网络接入,实现物与物、物与人的连接,实现对物品和过程的智能化感知、识别和管理。

在智能物流管理过程中,大量运用了物联网技术。在科技赋能的浪潮下,人工智能的应用越来越广泛,无人化仓储、无人化配送越来越多,各种算法应用到物流领域的每一个细节。包括:

供应链网络优化算法:商家在全国范围内,选择合适的仓库入仓,并确定仓库的覆盖范围,工厂的铺货线路,使用的是混合整数规划模型算法;供应链分仓补货 / 调拨算法:确定每个仓库是否需要补货,同时确定每个仓的补货量,减少跨区域发货的订单;仓储算法:负责仓库内所有未完成订单拣选任务,合并同一个拣选单,规划出最短行走距离;箱型推荐算法:对于每一个订单的所有商品,推荐用几个快递箱、哪种型号的快递箱。目的是最小化成本,提升包装效率,减少包装浪费。由此问题还引申出一个新的问题:根据历史订单数量,提前设计每个仓库最合适的箱型。车辆的路径规划问题:根据要配送的包裹(或者是需要揽收的货物),在地理上分布的不同位置,计算出需要从物流中心派几辆车、走什么路线,分别去派送(或者分别去揽收)这些包裹,才能最省时省力。

正是在大量算法的支撑下,机器逐渐替代人工,无人物流带来的提升也显而易见:

运输量越大,机器相对人工的成本也就越低;无人物流可实现全天派送,防风雨,方便高效、节省资源;对于偏远地区和急件,无人物流能大大提高物流配送效率;无人物流准确率高达 99%,有效避免了人为的失误。

物流配送算法

虽然物流行业在近些年随着电商的火爆才逐渐兴起,但在数学中,物流相关算法早已有相关的研究。最早的物流算法可追溯到 1759 年欧拉研究的骑士环游问题:即对于国际象棋棋盘中的 64 个方格,按照马走 “日” 字的规则走访 64 个方格一次且仅一次,并且最终返回到起始点。

对于骑士环游问题,通常的做法是采用回溯算法求解。

从起点开始,依次尝试跳到下一个位置,并记录骑士已走的步数;如果所有的下一个位置都已经走过一次,且骑士已走步数少于 63, 则说明此种走法不可行。回溯到上一步尝试下一个可走位置;当骑士不重复地走到 63 步时,判断下一步能否回到起点,只有下一步能回到起点的方案才是可行方案,否则继续回溯寻找路线。

回溯虽然能解决这类问题,但这实际上是一种非常暴力的算法,我们必须对比所有可行方案,从而找到最优解。在物流算法中,我们将这类求解算法称之为精确算法。除此之外的精确算法还有割平面法、分支定界法、动态规划法等。

在实际应用中,由于精确算法的计算量会跟随问题规模的增大呈指数级增长,导致这类算法在现有计算设备中无法用于复杂的组合优化问题的求解。

长久以来,人们一直在寻找一种这类问题的通用解,使得我们不需要穷举所有的情况,就能直接找出问题的答案。比如:

如果一个人告诉你 13,717,421 可以写成两个较小的数的乘积,你想要知道这个说法是否正确的话,必须枚举出所有的情况,挨个数字尝试。但如果他告诉你,这个数可以写成 3607 乘上 3803,你只需要计算一次便可以知道他说的是对的。在求质数时,我们可以用与 n 依次相除来判断 n 是否是质数,或者用筛掉质数的倍数的方式来过滤出质数,但我们并不能找到一个通用的公式,能直接计算出下一个质数是多少。

这类问题都属于不确定问题,由此引申出一个重要的数学难题 —— NP 完全问题。

# NP 完全问题

NP 完全问题(NP-C 问题),是世界七大数学难题之一。NP-C 的英文全称是 Non-deterministic Polynomial Complete,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号上,到底有没有让 NP=P 的算法,或是如何证明 NP≠P。

再举一个通俗的例子:当我们用数字密码解锁手机时,如果我们不知道密码是多少,必须将所有的数字组合依次尝试。但如果知道了密码,我们可以轻易地验证这个密码是对是错。

这听起来像是一句废话,如果将它抽象一点的表述,就是:能用电脑快速验证一个解的问题,是否也能够用电脑快速地求出解。

如果能解决 NP 问题,世界上所有的密码都将被轻易破解。虽然直觉告诉我们不可能,但 NP 完全问题至今还没有被下定论。近年来人工智能、机器学习的发展均与这个猜想有些关系。人们尝试用启发式算法替代精确算法,使得 NP 逐渐趋近于 P。

启发式算法的思想是:在不断解决问题的过程中寻找解决问题的最优方案。启发式算法实际上是通过不断地选择调优,以寻找到近似的最优解。在物流算法中,人们也是以此来解决经典的旅行商问题。

# 旅行商问题

旅行商问题,又称为 TSP 问题(Traveling Salesman Problem),是一个经典的组合优化问题。描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。他应如何选择行进路线,以使总的行程最短。

从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的哈密顿回路。

哈密顿回路:由天文学家哈密顿提出,由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。

上文已说到,该问题的可行解就是所有顶点的全排列,随着顶点数的增加,可行解的数量会呈指数级增长,也就是组合爆炸,它本质上是一个 NP 完全问题。

TSP 问题在交通运输、电路板线路设计以及物流配送等领域内有着广泛的应用,国内外学者对其进行了大量的研究。由于这类问题数据规模太大,想要用精确算法求解往往显得无能为力。因此,在后来的研究中,国内外学者重点使用启发式算法来寻找近似最优解,这类算法主要有模拟退火算法、遗传算法、蚁群算法等。

# 模拟退火算法

模拟退火算法由 N. Metropolis 等人于 1953 年提出,简称 SA(Simulated Annealing)。它是对局部搜索算法的一种扩展,模拟了金属从高温降到低温的过程中,分子状态逐渐趋于稳定的过程。

退火是一种物理过程,当金属物体在加热至一定温度后,它的所有分子在其状态空间中自由运动,处于高能量状态。随着温度的下降,这些分子逐渐停留在低能量状态,此时结构趋于稳定。

在退火过程中,所有的分子状态并不是完全相同的,而是有一定的概率处于高能量状态或低能量状态。温度越高,分子处于高能量状态的概率就越大;温度越低,分子处于低能量状态的概率就越大。

模拟退火算法便是基于这一点,它在寻找最优解的过程中,有概率的接受比当前最优解差一点的次等解,这个概率值随着搜索深度的增加逐渐减少。如果每一步都选择当前最优解,它就变成了贪心算法,而贪心算法极有可能陷入局部最优。模拟退火算法接受次等解的过程中,随着搜索深度的增加,次等解有概率超过局部最优解,从而跳出局部最优,获得全局最优解。

美中不足的是,模拟退火算法为了获得全局最优解,要求较高的初始温度,要求退火的速度足够慢,要求较低的终止温度和各种温度下足够多次的抽样,这就使得优化过程长,特别是对于规模大的实际问题。因此,优化效率不高是标准模拟退火算法的主要缺点。其次,由于模拟退火算法对初始温度很敏感,参数的选择也是应用该算法的难题之一。

# 遗传算法

1975 年,John holland 受生物进化论的启示提出了遗传算法,简称 GA(Genetic Algorithms)。GA 借鉴于“适者生存”的理论,在求解优化问题时,通过可行解的一代代交叉、变异,不断进化,最终得到最适应环境的个体,从而模拟出问题的近似最优解。

遗传算法的基本运算过程如下:

初始化:设置最大进化次数,随机生成 M 个个体作为初始群体 P(0);交叉、变异:交叉是指把两个父代个体的部分结构加以替换重组而生成新个体,交叉运算使得遗传算法具备搜索能力。变异是指随机替换个体的部分结构,每个个体是否变异是根据提前设置的个体变异概率决定的,变异可以保证个体的多样性,防止出现“早熟”收敛的情况;个体评价、选择:通过计算群体 P(t) 中各个个体的适应度,选择出适应环境的新一代个体 P(t+1);终止条件判断:当进化次数达到初始时设定的最大进化次数时,以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。

遗传算法是一种高度并行、随机和自适应的通用的优化算法。遗传算法的一系列优点使它越来越受到重视,在解决众多领域的机器学习、模式识别、优化控制、组合优化等优化问题中得到了广泛的应用。

但遗传算法的参数选择比较困难,在避免“早熟”收敛和提高收敛速度方面没有通用的好方法,只能针对具体问题进行具体设计。

# 蚁群算法

蚁群算法由意大利学者 Dorigo、Maniezzo 等人于 20 世纪 90 年代提出,简称 AG(Ant Algorithms)。他们在研究蚂蚁觅食的过程中,发现单个蚂蚁的行为比较简单,但是蚁群整体却可以完成一些智能的行为。例如蚁群可以在不同的环境下,寻找最短到达食物源的路径。

这是因为蚂蚁会在其经过的路径上释放一种可以称之为“信息素”的物质,蚁群内的蚂蚁对“信息素”具有感知能力,它们会沿着“信息素”浓度较高路径行走,而每只路过的蚂蚁都会在路上留下“信息素”,形成了一种正反馈的机制。

假设有两条路可从蚁窝通向食物,开始时两条路上的蚂蚁数量差不多:当蚂蚁到达终点之后会立即返回,距离短的路上的蚂蚁往返一次时间短,重复频率快,在单位时间里往返蚂蚁的数目就多,留下的信息素也多,于是会吸引更多蚂蚁过来,导致留下更多信息素。而距离长的路正相反,因此越来越多的蚂蚁聚集到最短路径上来。

物流算法的未来

2010 年 10 月 25 日,英国一项研究表明,在花丛中飞来飞去的小蜜蜂显示出了轻易破解“旅行商问题”的能力,他们利用人工控制的假花进行了实验,结果显示,不管怎样改变花的位置,蜜蜂在稍加探索后,很快就可以找到在不同花朵间飞行的最短路径,这是首次发现能解决这个问题的动物。

进行研究的奈杰尔·雷恩博士说,蜜蜂每天都要在蜂巢和花朵间飞来飞去,为了采蜜而在不同花朵间飞行是一件很耗精力的事情,因此实际上蜜蜂每天都在解决“旅行商问题”。尽管蜜蜂的大脑只有草籽那么大,也没有电脑的帮助,但它已经进化出了一套很好的解决方案,如果能理解蜜蜂怎样做到这一点,对人类的生产、生活将有很大帮助。

如同在科学研究发现蝙蝠通过超声波定位之前,人们理所当然的认为人和动物只能靠眼睛识别方向和位置。我们无法得知,蜜蜂是否在它的小脑袋中枚举了所有的飞行路线,或是找到了 NP=P 的路线规划方法。无论是哪种可能,在科学发展的面前,我们永远应保持谦卑。

另外,硬件的发展也会促进物流算法的优化,当计算效率大幅提升,精确算法也将在物流算法行业一展身手。如今启发式近似算法百花齐放,机器学习、人工智能在物流优化中大放异彩。但我们深知,启发式算法仍有建模难、模拟久、成本高等缺点,物流算法的发展依旧任重而道远。好在,一代又一代的程序员前赴后继,我们有理由坚信,长路漫漫,未来可期。

本文作者:Alpinist Wang

声明:本文归 “力扣” 版权所有,如需转载请联系。文中部分图片来源于网络,如有侵权联系删除。

标签: #物流路线算法