MapReduce求解物流配送单源最短路径研究
大数据Hadoop入门第五十三讲 MapReduce案例:最短路径算法

Dijkstra算法推导描述
Dijkstra算法MapReduce实现说明
1. 将节点分为三大类:未处理、处理中、处理完成;每一次迭代都会有处理 中的节点,如果没有处理中的节点,那么算法结束。
2. 每次MR任务中对处理中的顶点进行处理,并将这些顶点设置为处理完成以 及将这些顶点的下一个顶点设置为处理中的顶点。
Dijkstra算法描述
Dijkstra采用路径长度递增的关系进行最短路径的计算。主要算法思想如下: 1. 把顶点集合V分成两组:
1)S:已求出的顶点的集合(初始时只含有源点V0) 2)V-S=T:尚未确定的顶点集合 2. 将T中顶点按递增的次序加入到S中,保证: 1)从源点V0到S中其他各顶点的长度都不大于从V0到T中任何顶点的最短路径长度 2)每个顶点对应一个距离值 S中顶点:从V0到此顶点的长度 T中顶点:从V0到此顶点的只包括S中顶点作中间顶点的最短路径长度
Hadoop快速入门
第五十三讲 MapReduce案例:最短路径算法
最短路径概述
用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心 向外层层扩展,直到扩展到终点为止。最短路径问题分为单源点最短路径和多 源点最短路径;其中单源点最短路径指的是给定一个确定的源点,计算该点到 其 的最短路径。本讲我们主要介绍单源点路径中的Dijkstra算法的mapreduce实现。
3. 在每次的MR迭代任务中,map函数主要提取当前处理顶点的下一个顶点的 内容,reduce函数主要将同一个顶点的数据进行合并计算(取路径最小的值)操 作。
使用MR的思想推导以下上一张ppt的图的执行逻辑。
代码实现
1. 图的边表示形式转换为计算算法的需求形式的数据,并指定我们的源点进行 初步初始化操作 2. 编写计算距离的map函数和reduce函数 3. 编写runner执行入口类 4. 测试如下两种情况
基于云计算求解城市物流配送最短路径研究

t h e e f f i c i e n c y o f d e l i v e r y a n d t r a n s p o r t a t i o n c o s t s . I n o r de r t o s o l v e t h e s h o r t e s t p a t h p r o b l e m o f l o g i s t i c s
求解方法 。在该求解方式 中, 构建 Ma p R e d u c e 并行 化模 型和算法流程 ; 数字化城市路 网 , 借助 于 m a p i n -
f o 分层 管理道路 和配送 点 , 并 对道路 和配送 点进行拓扑化处理 , 生成 MI D文件供 Ma p R e d u c e 使用 ; 通 过
Re s e a c h o n S o l v i n g t h e S h o r t e s t Pa t h o f Ur b a n Lo g i s t i c s Di s t r i b u t i o n Ba s e d o n Cl o u d Co mp u t i n g
Ni u Li ቤተ መጻሕፍቲ ባይዱ n g, Zh an g Ba o y o u
( Co l l e g e o fEc o n o mi c s a n dMa n a g e me n t , Ch i n a J i l i a n gUn i v e r s i t y , Ha ng z h o u 31 0 01 8, Ch i n a )
物流配送系统中大规模最短路径算法的研究

物流配送系统中大规模最短路径算法的研究作者:忻瑞婵来源:《中国管理信息化》2008年第05期[摘要]在物流配送管理系统中,车辆路径优化是一个典型的难题,而最短路径算法是其基础。
传统的最短路径算法,如Dijkstra最短路径算法因性能问题无法适应大规模的拓扑网络和实时计算。
本文在Dijkstra最短路径算法的基础上,在方向优先等改进算法的启发下,设计和开发了基于GIS的大规模最短路径算法。
实验表明,该算法受拓扑网络规模的影响极小,能够快速完成实时最短路径计算。
[关键词]最短路径;车辆路径优化;GIS;物流配送;Dijkstra最短路径算法[中图分类号]F270.7[文献标识码]A[文章编号]1673-0194(2008)05-0067-03一、物流配送路径优化随着物流技术和应用的发展,物流配送过程中的车辆路径优化问题(Vehicle Routing Problem,VRP)[1]成为一个研究的热点。
它是一个NP难题,不能得到解析解,通常只能通过各种启发式算法得到近似解。
物流配送路径优化问题涉及因素众多,各种因素之间关系十分复杂。
车辆路径优化问题的定义依约束和目标的不同而有不同深度的定义。
一般是指从一个配送中心用多辆车向多个需求网点送货。
配送中心和网点之间的位置和距离一定,网点的需求配货量和车辆的容量一定,要求合理安排运输路线,使得总运程最低,即总路径最短,费用最少。
通过调整约束和优化目标,问题的难度可以进一步提高。
但无论如何,优化算法最终都基于网点(包括配送中心)之间的最短路径。
图1是一个典型的物流配送路径优化系统的流程图。
从图1可以看出,配送路径优化系统区分为两部分。
左边流程完成的任务包括:(1)根据GIS地图数据提取道路、对相交道路进行分割、生成路段拓扑网络,网络的节点是路口,弧是节点之间的路段;(2)根据道路拓扑网络计算任意两个节点之间的最短路径。
将最短路径生成过程预先执行的理由是最短路径算法时空复杂度高,并且通常道路信息变更并不频繁。
物流配送中的路径规划算法研究与实现

物流配送中的路径规划算法研究与实现随着电商的兴起,物流配送逐渐成为了人们日常生活中不可或缺的一部分。
而对于物流配送企业来说,如何降低成本、提升效率,依靠优秀的路径规划算法是关键之一。
一、路径规划的基本概念路径规划是指在所规定的条件下,在空间中确定从起点到终点的一条合理路径的过程,其目的是为了在保证最优路径的前提下,降低物流配送的成本,提高配送效率。
与传统的算法相比,在物流配送场景中,需要更多的考虑现实情况方面的因素。
比如,考虑到行车时间、路况、道路限制等实际因素,才能在最短时间内完成配送任务。
二、常见的路径规划算法1. 最短路算法:最短路算法是路径规划算法中最常见的一种方法。
通过建立一个地图,并将地图上的每个节点看作是一个状态,来寻找到达终点最短路径的过程。
在应用时,主要有多种求解方法:Dijkstra算法、Floyd算法、A*算法等。
其中,Dijkstra算法在以查询单源最短路径为主的情况下表现最好。
2. 遗传算法:遗传算法是一种基于自然进化原理的计算方法,主要用于求解复杂的优化问题。
在路径规划中,遗传算法可以通过随机生成一些样本,通过不断交叉变异及选择不断筛选得到最佳路径。
3. 蚁群算法:蚁群算法也是一种随机搜索算法,其灵感来源于蚂蚁找到食物的行为。
在算法中,通过一些信息素的激素作用和加强,在蚂蚁不断寻找过程中,最终实现带有全局搜索能力的路径规划。
以上所述算法,都是传统路径规划算法中比较常用的几种方法。
但是,在实际操作中,这些算法在某些情况下,可能并不能完全适应实际的物流场景,需要根据实际情况进行深化和优化。
三、实现路径规划的相关技术实现路径规划的技术方案,在不同的场景中需要综合考虑多个因素,包括路线规划中所处的行业背景、用户需求、数据方面信息和技术应用等多方面的内容。
1. 地图定位技术:地图定位技术可以快速准确地确定用户或者物品所在的位置。
在物流配送中,这是实现路径规划的基础条件,其准确性直接决定了路径规划的精准程度。
快递员派送货物最短路径的模型研究

快递员派送货物最短路径的模型研究2 河北经贸大学管理科学与工程学院 063210摘要:网上购物的日益普及使消费者们对于快递物流的要求不断提高,这一趋势生出了关于快递配送的路线选择问题,如何规划路线从而使得耗费时间最少、路径最短成为待解决的问题模型。
本文关于配送路径的规划提出了两个解答方法,即Dijkstra方法和Lingo模型。
类似快递配送的路线规划的问题也普遍存在于现实生活中,而使用Dijkstra方法和Lingo模型可以便捷地解决这类问题。
关键词:最短路径;Dijkstra;Lingo;快递配送一、前言伴随着人们物质精神水平的不断提高以及互联网技术应用的飞速发展,在当今社会中,网上购物已经逐渐成为人们日常消费的主要手段之一,人们足不出户就能浏览店家、挑选心仪的商品、货比三家、下单购物。
这种相比传统的实体店购物方式更为便捷的网络购物方式,也催生了一大批相关产业的发展,比如物流、快递。
尤其在前段时期的新冠疫情爆发、扩散、情势严峻的时期,由于所居住的村庄、居民区的全方位封闭隔离,以及对人与人之间的近距离接触的杜绝,人们对于日常生存、生活用品的需求只能通过从网上的渠道购得。
这使大家对物流快递公司的要求也越来越高。
快递公司出于节省时间、提高效率进而节约成本、满足客户要求的迫切需求,不得不面临着优化派送路线的问题。
二、对快递派送路径问题的提出消费者们拍下消费订单后,除了对商家货物质量优劣的关注外,最大的担忧便是快递派送的问题。
这家快递公司的物流配送速度快不快?物流信息的更新及不及时?配送过程的安全保障怎么样?如果因为市场问题而发生货物的损毁灭失谁来向我承担损害赔偿?公司的配送效率高不高?快递工具是火车还是飞机?到达我市后市内的配送路线是什么样的?我的货物会被优先配送吗?消费者与快递公司间的信任关系常常受到一系列类似以上的问题的挑战。
就我本人的真实经历来说,某天上午8点钟物流信息显示包裹到达了我们市里并且正在派送中,按惯例一般1小时左右就能到达快递驿站,而我却一直等到傍晚都依然没有接收到包裹到达的消息通知。
MapReduce下的Dijkstra并行算法研究

MapReduce下的Dijkstra并行算法研究
MapReduce下的Dijkstra并行算法研究*
于方
【摘要】文章对求解单源最短路径的Dijkstra经典实现算法进行了基于MapReduce编程模型的并行化设计,通过分析MapReduce 中的Map过程和Reduce过程,解析该算法的设计思想和执行流程,最后在Hadoop云平台下设计实验,测试并验证了该并行算法的正确性和高效性.
【期刊名称】阴山学刊(自然科学版)
【年(卷),期】2018(032)001
【总页数】6
【关键词】MapReduce;Dijkstra;最短路径;并行算法
0 引言
最短路径问题在很多行业领域中有着广泛的应用,如物流路线规划、交通路径模拟、社交网络以及位置服务等.Dijkstra[1]算法是求解单源最短路径问题的经典算法.由于目前最短路径问题应用领域的数据规模迅速增长、数据结构日益复杂、实时性要求更强等应用需求,利用并行计算提高最短路径问题求解速度和效率的研究正成为重要的研究趋势.其中,基于Hadoop的云计算可以解决数据量过大对于内存的强依赖性和串行算法数据处理效率低下的问题,在Hadoop构建的普通机器集群下,采用MapReduce并行编程模型,实现多机并行,可以有效减少计算时间、提高计算效率.
本文研究在Hadoop云平台下,采用MapReduce编程模型对Dijkstra算法进行并行化分析与设计,实现了并行求解单源最短路径问题.
1 Dijkstra单源最短路径算法。
求解单源最短路径问题的算法

求解单源最短路径问题的算法
求解单源最短路径问题的算法有多种,下面列举了几种常见的算法:
1. Dijkstra算法:通过维护一个距离数组,不断更新起始点到其他节点的最短路径长度。
核心思想是每次选择距离起始点最近的节点,并逐步更新距离数组。
该算法适用于无负权边的情况。
2. Bellman-Ford算法:通过迭代更新距离数组,每次都扫描所有的边,更新路径长度。
该算法适用于存在负权边的情况。
3. Floyd-Warshall算法:通过一个二维矩阵来存储任意两个节点之间的最短路径长度,通过尝试经过不同的中间节点来更新路径长度。
该算法适用于有向图或无向图,且适用于任意权重的情况。
4. A*算法:在Dijkstra算法的基础上引入启发函数,通过启发函数估计从起始点到目标节点的距离,并按照估计值进行优先级队列的排序。
该算法适用于图中存在目标节点的情况。
以上算法适用于不同的情况,具体选择哪个算法要根据问题的特点来决定。
物流配送路线规划中的最短路径研究

收稿日期:2007-03-12作者简介:王俊珺(1981-),女,助教,研究方向:基础教育研究。
1引言[1]配送运输是物流系统中最重要的组成部分之一,正是通过配送运输,配送中心才得以最终完成货物从生产商到用户的转移。
由于配送中心每次配送活动一般都面对多个非固定用户,并且这些用户坐落地点各不相同,所以对于它们的配送时间和配送数量也都不尽相同。
如果配送中心不进行运输路线的合理规划,往往会出现不合理运输现象,不仅造成运输成本上升,而且导致配送服务水平难以提高,因此经常对配送路线进行规划调整是大多数配送中心的一项重要工作。
在配送中心进行运输路线规划时,除了两点之间最短路问题外,多点之间最短路问题也是最常见的问题,如:旅行商问题和中国邮递员问题,但它们的核心算法也都可以是最短路径算法。
2最短路径算法研究最短路径算法是计算机科学与地理信息科学等领域研究的热点,最短路径算法有很多种,目前最具有代表性的有Dijkstra算法、A*算法和Floyd算法。
2.1Dijkstra算法的描述[2]Dijkstra算法是E.W.Dijkstra于1959年提出的一个适用于所有弧的权均为非负的最短路算法,也是目前公认的求解最短路问题高效的经典算法之一。
Dijk-stra算法的基本思路是:假设每个点都有一对标号(dj,pj),其中dj是从起始点s到终点j的最短路径的长度;pj则是从s到j的最短路径中j点的前一点。
求解从起始点s到点j的最短路径算法的基本过程如下:(1)初始化。
起始点设置为:①ds=0,ps,为空;②所有其他点:di=∞,pi=?;③标记起始点s,记k=s,其他所有点设为未标记的。
(2)检验从所有已标记的点到其直接连接的未标记的点的距离,并设置:dj=min[dj,dk+lkj]式中lkj,是从点k到j的直接连接距离。
(3)选取下一个点,从所有未标记的结点中,选取dj中最小的一个i:di=[dj,所有未标记的点j]点i就被选为最短路径中的一点,并设为已标记的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MapReduce求解物流配送单源最短路径研究摘要: 针对物流配送路线优化,提出了将配送路线问题分解成若干可并行操作的子问题的云计算模式。
详细论述了基于标色法的MapReduce广度优先算法并行化模型、节点数据结构、算法流程和伪代码程序,并通过将该算法应用于快递公司的实际配送,验证了该算法的可行性。
关键词: 物流配送; MapReduce;并行计算;最短路径随着电子商务的普及,人们网上购物的习惯逐渐形成。
截止2012年11月30日,阿里巴巴集团旗下淘宝和天猫2012年总交易额已经突破一万亿。
综合淘宝和天猫的交易数据来看,以快递员为主体的中国物流配送业对电子商务发展的促进起到了巨大作用。
同时传统邮政担负的包裹配送业务比重也逐渐地倾斜于第三方物流配送公司。
目前我国物流配送运输成本占整个物流成本的35%~50%左右[1]。
由于网购物品用户分布在城市的不同地方,为了控制配送运输成本,改善配送秩序,需要优化配送路线。
优化配送路线的求解有串行算法和并行算法。
串行算法主要表现在基于算法本身以及其优化组合的方法,例如CLARK G和WRIGHT J的节约算法、GILLETT B E和MILLER L R的扫描算法、Christofides等人的k度中心树和相关算法、Gendrean的禁忌搜索方法、LAWRENCE J 的遗传算法、Dijkstra算法、Nordbeck提出的椭圆限制搜索区域改进算法[2]。
随着计算数据的海量化以及摩尔定律的失效(晶体管电路已经接近了其物理改进的极限),串行算法本身的改进和组合已不能适应需求。
计算机科学领域出现了另一类并行最短路径分析算法设计,目前关于并行最短路径分析算法设计有基于MPI的主从Dijkstra并行算法[3]、MPI+open-MP混合算法[4]、社区分析的最短路径LC-2q并行算法[5]等。
本文针对物流及时配送和成本控制需求,提出基于标色法的MapReduce广度优先算法并行化模型,并应用于配送线路优化问题。
由于MapReduce本身封装了数据分割、负载均衡、容错处理等细节,用户只需要将实际应用问题分解成若干可并行操作的子问题,有效降低了求解难度,为解决物流配送运输路径优化问题提供了技术支持。
1 MapReduce算法描述信息技术和网络技术的发展为云计算的产生提供了条件。
MapReduce并行编程模型是云计算的核心技术之一。
MapReduce是Google 实验室提出的一个分布式并行编程模型或框架, 主要用来处理和产生海量数据的并行编程模式,2004 年DEAN J和GHEMAWAT S第一次发表了这一新型分布式并行编程模型[6]。
用户不必关注MapReduce 如何进行数据分割、负载均衡、容错处理等细节,只需要将实际应用问题分解成若干可并行操作的子问题,这种分解思路遵守主从架构模型。
Mapreduce框架的主要程序分为Master、Map和Reduce。
在Hadoop 中,MapReduce由一个主节点(Jobtracker,属于Master)和从节点(Tasktracker,属于Map和Reduce)组成[7]。
1.1 基于标色法的MapReduce广度优先算法模型给定一个带权有向图,用G=(N,E,W)模型来表示,其中N={ni∣i=1,2,...,m}为完全图的点的集合;E={e(ni,nj)∣i≠j, ni,nj∈N}为弧段集;W={w(ni,nj)∣i≠j,ni,nj∈N}为权值集。
一般向图的权值表示节点与节点之间的几何长度,记为w(ni,nj)=dij,dij表示节点ni到节点nj的距离。
最短路径计算就是计算从起始点ni到终止点nj的最短几何长度之和为最小。
在有向图起始点和终止点的最短路径计算中,MapReduce采用的是广度优先算法。
MapReduce计算最短路径用邻接表来表示图,在邻接表中每一行数据构成Map和Reduce的一个数据内容。
Map和Reduce的(key,value)中key为N,value值为与这个节点邻接的所有节点的 AdjacentList。
在用标色法求解最短路径时,AdjacentList节点的信息包括源点到顶点的距离distance(除到本身的距离为0外,其余初始值皆为无穷大);节点的颜色color(其值可分别取0、1、2,0表示未处理的顶点,1表示等待处理的顶点,2表示已处理的顶点,源点的初始值为1,其余顶点皆为0);被访问顶点和边的权值记为N和W。
顶点的数据结构如表1所示。
1.2 MapReduce求解步骤 (1)Master对输入文件按行(每行代表图中的一个顶点)进行自动切分,并将数据作为输入分发到每个Map任务(keyin,valuein),即输入[(ID,<Distance;color;pnodes and weight>)]; (2)接收(keyin,valuein)对,当valuein中的color的值为1时,则处理当前顶点,产生临时的{(keyout,valueout)│out=1...k}集; (3)MapReduce对Map执行过程输出的临时中间结果进行分组(Shuffle/sort),将相同的key值即ID号合并成同一组(key,list(valuei)│i=1...m),并将其分发给空闲的Reduce;(4)Reduce接收(key,list(valuei)),对相同ID的value进行合并,找到当前的最短路径; (5)如果每次Reduce后,结果收敛,则停止计算;如果未收敛,则继续发给下一轮的Map过程,多次迭代计算直到color值全部为2,得到最终的最短路径,算法结束。
MapReduce算法流程。
1.3 MapReduce算法伪代码(1)MapReduce的第一次迭代伪代码,Map部分为:Map:<k1,v1> → list(<k2,v2>)其中k1为节点的ID;v1为该节点的距离、边、边的权值、颜色;每一个输入的<k1,v1>会输出一批<k2,v2>,它们是计算的中间结果。
Begin If( color(k1) = 1) //如果k1的还需处理,即k1的颜色为灰色 { for ki (<k1,ki>in k1.edges) //对所有k1指向的节点, 只处理所有标记为1的节点 If ( distance(k1) + weight(k1 ,ki) <distance(ki)) { Set distance(distance(ki)) = distance(k1) + weight(k1,ki);Set color(ki) = 1; emit (ki, v1) //将该记录加入到键值对中,将标记为1 的节点所关联的节点加入中间结果。
} Set color(k1) = 2;//标记为1的节点被变更为2,表示处理完毕 } emit (k1, v1) End (2)Mapreduce的第一次迭代伪代码,Reduce部分 Reduce <k2,list(v2)> →<k3,v3> //<k2,list(v2)>输入的中间结果,其中list(v2)表示一批属于同一个K2的value。
<k3,v3>为输出结果 Begin Set color(k2) =0;Set distance(k2) = ∞; vi∈ list(v2); If( vi.color > k2.color) //按照节点对计算中间结果进行合并 { Set color(k2) = vi.color; } If{vi.distance < distance(k2)) //如果中间结果比原有结果小,将节点标记为1 { Set distance(k2) = vi.distance; If(vi.color = 1),Set color(k2)= 1; } If vi.edges != null, Set Edges(k2) = vi.edges; } emit (k2, vi.)End2 案例分析 2.1 基本情况韵达快递浙江杭州西湖区文一路公司是民营韵达快运的子公司,为客户提供快递、物流及电子商务等一系列门到门服务。
企业的配送范围为文一路、文二路、教工路及学院路构成的矩形区域,该区域面积大约20 km2的范围。
随着第三方物流公司的增多,物流配送竞争越来越激烈。
为了压缩成本,按照配送点情况优化线路是节约成本的途径之一,优化后的单源配送线路线可以将途经的配送点一并发送,形成一车多配的节约模式。
2.2 问题提出及求解公司某次接到为4个区域(西湖科技大厦、节能工业园、高新大厦及华门公寓)配送货物的任务,配送员决定分头配送,而如何组织好路线使得路程最短就可以归结为单源最短路径问题。
为了计算方便,设置配送中心点为n1,被配送的4个地方分别设置西湖科技大厦为n2,节能工业园为n3,高新大厦为n4,华门公寓为n5。
4个区域之间及其与配送中心的几何路线长度取整数(km)。
有向图见图2(a),其中几何路线长度d1(n1,n2)=10,d2(n1,n4)=5,d3(n2,n3)=1,d4(n2,n4)= 2,d5(n3,n5)=4,d6(n4,n2)=3,d7(n4,n3)=9,d8(n5,n1)=7,d9(n5,n3)=6。
从配送中心n1出发选取怎样的路线可以满足到达n2、n3、n4、n5的长度是最短的。
采用标色法的MapReduce广度优先算法计算,依照伪代码的计算逻辑计算出源点到其他各点的最短路径。
通过4次迭代顶点到各点的最短路径见图2(f),其中加粗的圆圈表示被访问过的顶点,color值为2,圈内的数值为其与n1的最短路径长度;color值为0,虚线圈为未访问的顶点,圈内值为∞;color值为1,虚线圈为待访问的顶点,圈内值为标注值。
MapReduce第一次迭代验算数据如表2所示,其余几次迭代过程格式与此类似。
如果从配送点n1到节能工业园n3进行配送,配送的最优路线就是配送点n1→高新大厦n4→西湖科技大厦n2→节能工业园n3。
优化后的长度为n1→n4→n2→n3=9。