练习 7:使用一支车队服务一组停靠点
在本练习中,您将为某配送公司的车队找出将货物从配送中心运送到 25 家杂货店的最佳路径。每家商店对于货物的需求量都不尽相同,而且每辆卡车载货能力也各有限制。本例的主要目标是为车队中的每辆卡车分配一组所要服务的商店,并确定送货的顺序,从而将总运输成本控制在最低。
这可通过求解车辆配送 (VRP) 分析来实现。确定送货顺序后,便可生成结果路径的建议路线规划指示,并将该路径以电子形式分发给驾驶员,或打印后交给驾驶员以进行送货。
Network Analyst 教程中本练习和其他练习所使用的数据可在 ArcGIS.com 中找到。数据下载完成后,可将其解压缩到所需位置。但是最好将其解压到 C:\arcgis\ArcTutor,因为本教程将此路径视作数据的默认位置。
准备视图
- 如果在 ArcMap 中打开了 Exercise07.mxd,请跳到步骤 6。
- 单击开始 > 所有程序 > ArcGIS > ArcMap 10.2.2 启动 ArcMap。
-
在 ArcMap - 启动 对话框中,单击现有地图 > 浏览更多。
将弹出打开 ArcMap 文档 对话框。
-
浏览至 C:\ArcGIS\ArcTutor\Network Analyst\Tutorial。
这是本教程数据的默认安装位置。
-
双击 Exercise07.mxd。
将在 ArcMap 中打开该地图文档。
-
启用 ArcGIS Network Analyst 扩展模块。
-
单击自定义 > 扩展模块。
将打开扩展模块 对话框。
- 选中 Network Analyst。
- 单击关闭。
-
单击自定义 > 扩展模块。
-
单击自定义 > 工具条 > Network Analyst。
Network Analyst 工具条被添加到 ArcMap 中。
-
在 Network Analyst 工具条上,单击 Network Analyst 窗口按钮 。
打开可停靠的 Network Analyst 窗口。
如果未显示 Network Analyst 工具条,则需要添加该工具条。
如果未显示 Network Analyst 窗口,则需要添加该窗口。
可以停靠或取消停靠 Network Analyst 窗口。
创建车辆配送 (VRP) 分析图层
-
在 Network Analyst 工具条上,单击 Network Analyst,然后单击新建多路径派发(VRP)。
多路径派发 (VRP) 分析图层即被添加到 Network Analyst 窗口中。网络分析类(停靠点、站点、路径、站点访问、中断、路径区、路径种子点、路径更新、特点、停靠点对、点障碍、线障碍和面障碍)为空。
分析图层也将被添加到内容列表 窗口中。
添加停靠点
您将向“停靠点”网络分析类中添加杂货店位置。您可以将这里的停靠点视为要填充的停靠点,因为每个杂货店都要求将货物从配送中心运送过来。停靠点类中的成员最终将成为车辆行驶路径沿途的站点。
已经在地图文档中将杂货店的位置添加为要素图层“商店”。商店的属性包含每个商店所需的货物总重量(单位为磅)、运送期间的时间窗,以及访问各商店时所用去的服务时间(单位为分钟)。其中的服务时间是指卸货所需的时间。
接下来会将这些商店的点要素作为停靠点添加到分析图层中。
-
在 Network Analyst 窗口中,右键单击停靠点 (0),然后选择加载位置。
将打开加载位置 对话框。
- 从加载位置下拉菜单中选择商店。
-
在位置分析属性部分中,请确保 Name 属性已自动与 NAME 字段匹配,而 ServiceTime 属性也与 ServiceTime 字段匹配。
ArcGIS Network Analyst 扩展模块 会根据配置文件([ ArcGIS 安装目录 ]\NetworkAnalyst\NetworkConfiguration\NASolverConfiguration.xml)来尝试对新创建的车辆配送 (VRP) 图层的位置分析属性进行自动匹配。
-
将 TimeWindowStart1 的字段值设为 TimeStart1。
- 将 TimeWindowEnd1 的字段值设为 TimeEnd1。
- 将 DeliveryQuantities 的字段值设为 Demand。
-
在 MaxViolationTime1 属性对应的默认值下输入 0。
将此属性设为零即表示不能违反时间窗。
-
单击确定。
Network Analyst 窗口中的停靠点下列出了 25 家商店,而且这些商店在地图上显示为停靠点。
您可以在加载位置对话框的位置分析属性部分指定商店要素类的哪些属性包含 ArcGIS Network Analyst 扩展模块 将用于求解此车辆配送 (VRP) 的值。
添加站点
货物会从单个配送中心(其位置显示于 ArcMap 中的 DistributionCenter 要素图层)发出。配送中心的营业时间从 8:00 a.m. 到 5:00 p.m.。接下来会将此点要素添加到站点网络分析类中。
-
在 Network Analyst 窗口中,右键单击 站点 (0),然后选择加载位置。
将打开加载位置 对话框。
- 从加载位置下拉菜单中选择 DistributionCenter。
- 在位置分析属性部分中,请确保名称属性已自动与名称字段匹配。
- 在 TimeWindowStart1 属性的默认值下输入 8 AM。
-
在 TimeWindowEnd1 属性的默认值下输入 5 PM。
-
单击确定。
Network Analyst 窗口中的站点下会列出一个配送中心,而且该配送中心会在地图中显示为站点。
添加路径
配送中心有三辆卡车,最大载货重量都是 15,000 磅。您将添加三条路径(每辆车一条),并根据配送中心的操作程序设置各路径的属性。
-
在 Network Analyst 窗口,右键单击路径 (0),然后选择添加项目。
新路径 Item 1 会被添加到 Network Analyst 窗口的路径类下,然后打开该路径的属性 窗口。
-
在属性 窗口中,如下表所示来指定路径的属性。该表的“描述”列解释了特定值的用法。对于表中未列出的属性,需要保留它们的默认值。
提示:
编辑属性窗口中的值时,使用以下键盘快捷键:
- 按下 TAB 或 F2 编辑当前选定的属性。
- 再次按下 TAB 保存编辑内容并开始编辑下一个属性。
- 按下 SHIFT + TAB 保存编辑内容并开始编辑上一个属性。
属性
值
描述
名称
Truck_1
车辆名称。
StartDepotName
San Francisco
卡车从配送中心出发。
EndDepotName
San Francisco
卡车返回路径终点处的配送中心。
StartDepotServiceTime
60
将卡车装满货物所需的时间(在此案例中单位为分钟)。
EarliestStartTime
8 AM
卡车可以开始工作的最早时间为配送中心的开业时间 8:00 a.m.。
LatestStartTime
8 AM
卡车必须尽早开始工作。
容量
15000
卡车最多可装载 15,000 磅的货物。
CostPerUnitTime
0.20
每小时应向卡车驾驶员支付 12 美元,所以工资为:$12.00/60 分钟 = $0.20 每分钟。
CostPerUnitDistance
1.5
平均每公里在燃油消耗、车辆折旧和维护方面的花费量(以美元计)。
MaxOrderCount
10
一辆卡车最多可服务的商店的数量。
MaxTotalTime
360
由于受到工作时间的限制,驾驶员的一个工作时段不能超过六小时(360 分钟)。
MaxTotalTravelTime
120
为在符合工作时间限制的前提下仍能够服务一定数量的商店(同时也将每个商店的服务时间考虑在内),卡车在路上行驶的时间不能超过两小时(120 分钟)。
MaxTotalDistance
80
为了保持车队中每日的燃油和维护成本,所有卡车的路径都不得超过 80 英里。
-
单击确定。
新路径 Truck_1 会被添加到 Network Analyst 窗口中的路径类。
-
右键单击 Network Analyst 窗口中的 Truck_1 路径对象,然后选择复制。
-
右键单击 Network Analyst 窗口中的路径 (1) 类,然后选择粘贴。
该路径类中包含两个相同的路径对象。
-
重复上一步骤创建第三个路径对象。
-
双击列表中的第二个 Truck_1 对象。
将打开属性 窗口。
- 单击名称属性并输入 Truck_2。
-
按两次 Enter 键。
将对该路径指定唯一名称,然后关闭窗口。
-
通过同样的方法将最后一条路径的名称更改为 Truck_3。
由于配送中心的三辆卡车相同,因此您可以复制出第一辆卡车的两个副本,并对它们重命名。
设置车辆配送 (VRP) 分析的属性
-
单击 Network Analyst 窗口中的分析图层属性按钮。
将打开图层属性 对话框。
- 单击分析设置选项卡。
-
确保将时间属性下拉列表设置为驾车时间(分钟)。
VRP 求解程序将使用此属性来计算停靠点间及停靠点与站点间基于时间的成本。
-
单击距离属性下拉列表,并选择米。
此属性可在考虑限制条件的前提下确定停靠点间及停靠点与站点间的行驶距离,并生成行车指示;但是 VRP 求解程序的目标是使时间成本最小化。
-
将默认日期设置为星期。在星期下拉列表中选择星期一。
-
确保将容量计数设置为 1。
此设置表示运送的货物只有一种度量值。在此情况下,度量值为重量(磅)。如果为容量指定了两种度量值(例如重量和体积),则容量计数应设置为 2。
-
确保选择分钟作为时间字段单位。
这将指定所有基于时间的属性(例如停靠点的 ServiceTime 和 MaxViolationTime1 以及路径的 MaxTotalTime、MaxTotalTravelTime 和 CostPerUnitTime)都以分钟为单位。
-
确保将距离字段单位设置为英里。
这将指定所有基于距离的属性(例如路径的 MaxTotalDistance 和 CostPerUnitDistance)都以英里为单位。
- 由于这些送货卡车很难进行 U 形转弯,请将交汇点的 U 形转弯设置为不允许。
-
在输出 Shape 类型下拉列表中选择直线。
如果希望路径沿街道确定,则应该选择具有测量值的实际形状或实际形状。请注意,此选项只对路径的显示有影响,而对 VRP 求解程序所得出的结果没有任何作用。
- 确保选中应用等级。
- 在约束条件框中,确保已选中 RestrictedTurns 和 Oneway 选项。
-
保持方向框中选项的默认值设置。
- 单击确定。
运行这一过程,来确定最佳的路径分配和停靠点顺序
-
在 Network Analyst 工具条上,单击求解按钮 。
VRP 求解程序可计算停靠点服务所需的三个路径,并绘制连接各停靠点的线。每条路径的起点和终点均为配送中心,而且沿途都会经过一组停靠点。
如果收到任何错误信息,则应确保路径的 Capacities 属性值已设置为 15000,而不是 15,000,并确保路径的名称是唯一的。
确定路径中的转弯说明
- 右键单击 Network Analyst 窗口中的路径 (3),然后单击选择 > 清除所选要素。
-
在 Network Analyst 工具条上,单击指示窗口按钮 。
将打开指示 对话框。
- 另外,您也可以将车辆配送 (VRP) 图层导出为图层文件(<文件名>.lyr),方法是在内容列表 窗口中右键单击车辆配送 (VRP) 并选择另存为图层文件。这可将分析保存在磁盘上,以便将来将其添加到其它地图文档中重新使用。
- 如果希望继续此教程练习下面的高级部分,请关闭指示 窗口。否则,请退出 ArcMap,而且不要保存任何对于 Exercise 07.mxd 的更改。
通过更改现有解决方案来对其它情况进行求解
为公司所制定的车辆配送 (VRP) 解决方案在初期运作良好。但数周过后,为 Truck_2 指定的驾驶员需要休假。这样,配送公司便不得不只使用两辆卡车来服务相同数量的商店。为了应对额外的工作量,该公司决定为另两名驾驶员支付加班费,并在每天提供一段带薪休息时间。该配送公司还额外征用了两个辅助配送中心。有了这两个额外的配送中心,卡车便可在运送途中重新装载货物,而无需返回主配送中心补货。下面将通过对上述步骤获得的解决方案进行修改,以使其适应这些变化。
从解决方案中删除现有路径
-
在 Network Analyst 窗口中,右键单击路径类中的 Truck_2,然后单击删除。
添加路径更新
公司征用的两个辅助配送中心分别位于 800 Brush Street 和 100 Old County Road,这两个中心都可作为卡车的补货位置。卡车可到这些补货位置补充货物,从而无需返回起始站点,这样便节省了时间。您可以通过对补货地址进行地理编码,将补货位置添加至站点网络分析类。可在补给点补充货物的运送路径以及补货所需的服务时间都可在网络分析类中指定。
-
在 Network Analyst 窗口中,右键单击站点 (1),然后选择查找地址。
将打开查找对话框。
- 在选择定位器下拉列表中选择 SanFranciscoLocator。
- 在完整地址框中输入 800 Brush St。
-
单击查找。
已添加至 Exercise07.mxd 的地址定位器 SanFranciscoLocator 会查找地址,并将查找结果显示在查找 对话框的底部。
-
在查找 对话框中右键单击该结果,然后选择添加为网络分析对象。
会将定位到的地址添加为 Network Analyst 窗口和地图显示中的站点。
- 在查找 对话框的完整地址框中输入 100 Old County Rd。
- 单击查找。
-
在查找 对话框的底部右键单击新结果,然后选择添加为网络分析对象。
第三个站点将被添加至站点网络分析类。
- 关闭查找 对话框。
-
在 Network Analyst 窗口中,右键单击路径更新 (0),然后单击添加项目。
新的路径更新对象 Item1 会被添加到 Network Analyst 窗口的路径更新类下,同时会打开 Item1 的属性 窗口。
-
在属性 窗口中,如下所示指定路径更新的属性。
属性
值
描述
DepotName
800 Brush St
卡车可使用此站点位置补货。
RouteName
Truck_1
车辆名称。
ServiceTime
30
卡车装载所需的时间(以分钟为单位)。
-
单击确定。
新的路径更新对象 800 Brush St 将列入 Network Analyst 窗口中的 Truck_1 项。
-
遵照以上三步再添加三个路径更新对象,以使每辆车(Truck_1 和 Truck_3)都能在两个补货位置(800 Brush St 和 100 Old County Rd)补充货物。
现在,Network Analyst 窗口中的 Truck_1 和 Truck_3 项下应分别列有两个路径更新对象。
由于两辆卡车均可在 800 Brush Street 和 100 Old County Road 这两个位置补充载货,所以您需要将每辆卡车与这两个补货位置相关联。在卡车需要补货时,VRP 求解程序将会算出卡车的最佳补货位置。
修改路径以算入加班
为了应对额外的工作量,公司希望取消路径的最大时间、最大行驶时间和最大距离限制。由于驾驶员不得不比以前工作更长时间,所以在完成六个小时工作后的加班时间可获得每小时 $18 的薪酬。在此步骤中,您将对路径进行以下更改。
-
在 Network Analyst 窗口中,在路径网络分析类下双击 Truck_1。
将打开属性 窗口。
-
更改 Truck_1 的属性,使其与下表中的值相匹配。
属性
值
描述
OvertimeStartTime
360
如果驾驶员工作时间超过六小时(360 分钟),则会向其支付加班工资。
CostPerUnitOvertime
0.3
卡车驾驶员的加班工资为每小时 $18。因此该工资如果按照每分钟来计算则为:$18.00/60 分钟 = $0.30 每分钟。
MaxOrderCount
20
由于驾驶员可得到加班工资,因此便可服务更多商店。
MaxTotalTime
<空>
没有对驾驶员工作时段总时间的限制。
MaxTotalTravelTime
<空>
没有对路上驾驶所花费时间的限制。
MaxTotalDistance
<空>
没有对卡车行驶总距离的限制。
- 单击确定。
- 对 Truck_3 重复以上三步。
添加休息时间
由于驾驶员必须工作更长时间,因此他们需要在工作时段中休息半小时。在此步骤中,您将为每个路径指定休息时间。
-
在 Network Analyst 窗口中,右键单击中断 (0),然后选择添加项目。
将打开属性 窗口。
-
在如下所示的表中为新的中断指定属性值。
属性
值
描述
TimeWindowStart
12:30 PM
休息时间必须在 12:30 p.m. 之后。
TimeWindowEnd
1:30 PM
休息时间必须在 1:30 p.m. 之前。
RouteName
Truck_1
此休息时间所适用的路径的名称。
ServiceTime
30
休息时间(以分钟为单位)。
MaxViolationTime
0
休息的开始时间必须介于 12:30 p.m. 和 1:30 p.m. 之间。零值表示休息时间不可始于 1:30 p.m. 之后(即,休息的时间窗是固定的)。
IsPaid
True
由于这是带薪休息,因此该成本也包含在路径的总成本中。
- 单击确定。
-
重复以上三步,在 RouteName 属性处输入 Truck_3。
现在,Network Analyst 窗口的中断类中便列有两个对象:Truck_1 和 Truck_3。
确定解决方案
-
在 Network Analyst 工具条上,单击求解按钮 。
VRP 求解程序将计算服务停靠点所需的两个路径,并绘制连接各停靠点的直线。每条路径的起点和终点均为配送中心,而且沿途都会经过一组停靠点,在这过程中会到补货位置重新装货,继续服务其余的停靠点,并最终返回配送中心。
此解决方案符合该配送公司指定的所有约束条件。但是,将行驶路线交给两个驾驶员后,该公司发现 Truck_1 的驾驶员更愿意在旧金山区域驾驶,而 Truck_3 的驾驶员则更希望在东湾区域驾驶。于是公司想要确定一个新的解决方案,以使路径所服务的停靠点偏向于驾驶员所喜欢的区域。在下面的步骤中,您将结合驾驶员的个人喜好来添加路径种子点。
添加路径种子点
在此步骤中,您将通过对地址进行地理编码来为 Truck_1 和 Truck_3 添加路径种子点。请注意,路径种子点还可从现有的点要素中导入,或通过使用创建网络位置工具 以交互方式创建。
-
在 Network Analyst 窗口中,右键单击路径种子点 (0),然后选择查找地址。
将打开查找对话框。
- 在完整地址文本框中输入 3000 Vicente Ave。
-
单击查找。
SanFranciscoLocator 将找到该地址,并将结果显示在对话框的底部。
-
右键单击该结果并选择添加为网络分析对象。
该地址的位置会被添加为路径种子点。该点将在 Network Analyst 窗口和地图显示中显示。
- 关闭查找 对话框。
-
在 Network Analyst 窗口中,双击新的路径种子点 3000 Vicente Ave。
将打开属性 对话框。
-
在如下所示的表中为路径种子点指定属性值。
属性
值
描述
RouteName
Truck_1
此种子点所适用的路径的名称。
SeedPointType
Static
这会使靠近该指定种子点的停靠点更有可能被分配给 Truck_1。
- 重复此部分的步骤 1–5,以在 2500 McGee Ave 位置添加另一个路径种子点。
-
重复步骤 6 和 7,从而将第二个种子点的 RouteName 属性更改为 Truck_3。
确定解决方案
-
在 Network Analyst 工具条上,单击求解按钮 。
VRP 求解程序将计算服务停靠点所需的两个路径,并绘制连接各停靠点的直线。Truck_1 的路径中仅包括在旧金山的停靠点,而 Truck_3 则经过了东湾区域的所有停靠点以及该城市其他区域的几个停靠点。
- 退出 ArcMap 而不保存任何更改。