求解车辆配送 (VRP) 的输出

求解车辆配送 (VRP) 地理处理工具生成以下表和要素类作为输出:停靠点、未分配停靠点、路径、方向。下面各小节描述了输出表和要素类及其对应字段属性。

路径要素类

路径线要素类表示车辆配送中的司机、车辆及车辆路径。此输出要素类的默认名称为 Routes,但是可以在求解之前通过更改输出路径名称参数(Python 的 output_routes_name)更改其名称。

ArcGIS 分配的坐标系与基础网络数据集用于 Routes 要素类的坐标系相同。这可以通过为输出坐标系地理处理环境指定一个数值来控制。

下面列出并描述了 Routes 要素类的字段名称。

字段名

描述

ObjectID

系统管理的 ID 字段。

名称

路径的名称。

形状

指示路径形状的几何字段。

使用填充路径线参数(Python 的populate_route_lines)可选择是否填充此字段。

执行求解车辆配送 (VRP) 期间,总是用数据创建和填充 Routes 要素类。不过,填充路径线参数(Python 的 populate_route_lines)允许您选择是否为线要素生成和保存 Shape 字段值。不填充 Shape 字段值能够更快进行求解运算并减小服务器与客户端之间的数据交换量;但是人们通常想在地图上显示路径,因此可能需要填充 Shape 字段。

ViolatedConstraints

该字段包含约束冲突的汇总,并在求解操作之后进行设置。如果因某条路径而导致与约束发生冲突,则可将下列一个冲突或多个冲突的组合分配给该字段。

开始行动开始行动:

表示文本描述的编码值以加括号的形式显示在以下列表中。请注意,编码值是通过将最后一个值增加一倍来增加的几何序列的一部分。可以对要编码的冲突进行各种组合。例如,将“超出容量 (2)”和“硬性路径区 (128)”的组合编码为 130 (2 +128)。

  • 超出 MaxOrderCount (1) - 预分配的停靠点无法分配给路径,因为分配停靠点会超出路径的 MaxOrderCount 字段值所指定的可分配给路径的最大停靠点数。
  • 超出 Capacities (2) - 预分配的停靠点无法分配给路径,因为分配停靠点会超出路径的 Capacities 字段值指定的总路径容量。
  • 超出 MaxTotalTime (4) - 从起始站点到终止站点的行驶时间加上在两个站点的服务和等待时间以及所有休息时间,这几个时间的总和超出了路径的 MaxTotalTime 字段值指定的路径总时间。
  • 超出 MaxTotalTravelTime (8) - 从起始站点到终止站点的行驶时间超出了路径的 MaxTotalTravelTime 字段值指定的路径总行驶时间。
  • 超出 MaxTotalDistance (16) - 从起始站点到终止站点的行驶距离超出了路径的 MaxTotalDistance 字段值指定的路径总行驶距离。
  • 硬性时间窗 (32) - 在与路径关联的起始站点、终止站点或休息点上存在硬性时间窗冲突。
  • 不匹配的特殊要求 (64) - 在目标路径上未找到停靠点所需的特殊要求。
  • 硬性路径区 (128) - 预分配给路径的停靠点未落在硬性路径区内。
  • 超出需求点对 MaxTransitTime (256) - 存在预分配给路径的需求点对,而分配该需求点对中的停靠点会超出需求点对的 MaxTransitTime 字段值所指定的需求点对的最长行驶时间。
  • 需求点对冲突 (512) - 停靠点属于某个需求点对,但无法分配给预分配的路径。
  • 不能到达 (1024) - 预分配的停靠点位于路径无法到达的网络元素上。
  • 无法插入所需的中断 (2048) - 在存在预分配的停靠点时,路径的中断的 sequence 值为空,且在未引入其他冲突的情况下,该休息点不能插入到任何位置。
  • 无法插入所需更新 (4096) - 路径超出其容量并且需要访问货物补给点;然而,在存在预分配的停靠点时,关联的货物补给点的 sequence 值为空,且在未引入其他冲突的情况下,关联的货物补给点不能插入到任何位置。
  • 超出 MaxTravelTimeBetweenBreaks (8192) - 求解程序不能在中断的 MaxTravelTimeBetweenBreaks 字段所指定的时间内插入中断。这通常是因为预先为中断分配了一个顺序,而使得无法在最长行驶时间内到达中断。

  • 超出中断 MaxCumulWorkTime (16384) - 求解程序不能在休息点的 MaxCumulWorkTime 字段所指定的时间内插入休息点。这通常是因为预先为休息点分配了一个顺序,而使得无法在最长行驶时间内到达休息点。

OrderCount

分配给路径的停靠点数。

TotalCost

路径的总运行成本,它是下列字段值的总和:

  • FixedCost
  • RegularTimeCost
  • OvertimeCost
  • DistanceCost

RegularTimeCost

除任何不需支付酬金的休息时间外的规定工作时间的成本。

OvertimeCost

除任何不需支付酬金的休息时间外的加班时间的成本。

DistanceCost

通过将 TotalDistance 和 CostPerUnitDistance 字段值相乘得出的距离成本部分。如果求解之前未指定距离属性,那么此字段值将设置为零。

TotalTime

路径总持续时间。该持续时间包括行驶时间以及在停靠点、站点和中断的服务和等待时间。TotalTime 值是下列字段值的总和:

  • StartDepotServiceTime
  • EndDepotServiceTime
  • TotalOrderServiceTime
  • TotalBreakServiceTime
  • TotalRenewalServiceTime
  • TotalWaitTime
  • TotalTravelTime

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

TotalOrderServiceTime

在路径上的所有停靠点处所用的总服务时间。

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

TotalBreakServiceTime

在路径上的所有休息点处所用的总服务时间。

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

TotalTravelTime

路径的总行驶时间。

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

TotalDistance

路径的总行驶距离。

该字段值的单位由“距离字段单位”参数(Python 的 distance_units)指定。

如果求解之前未指定距离属性,那么此字段值将设置为零。

StartTime

路径的开始时间。路径可能会在起始站点的时间窗打开之前开始,在这种情况下,起始站点处存在一个等待时间。

使用跨越多个时区的流量数据时,该时刻的时区将采用起始站点所处网络元素所在的时区。

EndTime

路径的结束时间。路径在终止站点处完成服务后结束。

使用跨越多个时区的流量数据时,该时刻的时区将采用终止站点所处网络元素所在的时区。

TotalWaitTime

在路径上的所有停靠点、站点和中断处的总等待时间。

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

TotalViolationTime

在路径上的所有停靠点和中断处的总冲突时间。

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

RenewalCount

对于具有货物补给点的路径,该字段相当于车辆为了进行货物补给(即车辆装卸)而在站点停靠的次数。

TotalRenewalServiceTime

对于具有货物补给点的路径,该字段表示在路径上所有货物补给点所用的总服务时间。

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

Directions 要素类

Directions 是一个表示转弯说明的线要素类,帮助司机按照指定的路径驾驶车辆。此输出要素类的默认名称为 Directions,但是可以在求解之前通过更改“输出方向名称”参数(Python 的 output_directions_name)更改其名称。而且,求解车辆配送 (VRP) 工具总是创建 Directions 要素类;不过,您可以使用“填充方向”参数(Python 的 populate_directions)选择是否在求解期间使用要素填充要素类。默认情况下不填充。如果您不需要方向指引,则可以大幅减少求解时间及服务器与客户端之间传输的数据量。

ArcGIS 分配的坐标系与基础网络数据集用于 Directions 要素类的坐标系相同。这可以通过为输出坐标系地理处理环境指定一个数值来控制。

下面列出并描述了 Directions 要素类的字段名称。

字段名

描述

ObjectID

系统管理的 ID 字段。

形状

指示线形状的几何字段。

RouteName

驾驶操作所应用到的路径的名称。

ArriveTime

每天启动给定驾驶操作的时间。如果路径跨越多天,将显示日期和时间。

类型

此字段适用想要自定义行使方向文本的高级用户。大多数用户可通过忽略此字段并参考“文本”字段来满足其要求。

“类型”是指下列两个枚举其中一个中的常量:esriDirectionsManueverType 或 esriDirectionsStringType。(参见 SubItemType 字段描述,了解“类型”值指代的枚举。)您可以通过搜索选择的 SDK 查找枚举名称来查看常量值列表。

SubItemType

此字段适用想要自定义行使方向文本的高级用户。大多数用户可通过忽略此字段并参考“文本”字段来满足其要求。

SubItemType 与“类型”配合,可创建“Text”字段中显示的行驶方向。SubItemType 字段指定“类型”字段是指 esriDirectionsManueverType 枚举中的常量值或 esriDirectionsStringType 枚举中的常量值。

  • 如果 SubItemType 值为 1,“类型”值是指 esriDirectionsManeuverType。
  • 如果 SubItemType 值为 2,“类型”值是指 esriDirectionsStringType。

文本

行驶方向的文本描述。

ElapsedTime

当前行驶方向开始到下一行驶方向开始之时,或到上一行驶方向的路径结束之时所经历的时间。

某些行使方向还额外记录了服务时间、冲突时间,等等。在这种情况下,每条记录的经历时间是重复的。如果想要对总经历时间求和,请选择“类型”值为 1 的记录,然后对这些记录求和。

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

DriveDistance

当前行驶方向开始到下一行使方向开始,或到上一行驶方向的路径结束之时所行使的距离。

如果行驶方向与下一次行驶方向开始的位置相同,则此值为零。

停靠点表

停靠点表提供了有关在站点、停靠点及休息点停靠的信息。这些信息包括哪些路径包含停靠,到达和离开时间以及停靠顺序。

此输出表的默认名称为 Stops,但是可以在求解之前通过更改“输出停靠点名称”参数(Python 的 output_stops_name)更改其名称。

下面列出并描述了“停靠点”表中的字段名。

字段名

描述

ObjectID

系统管理的 ID 字段。

名称

停靠点的名称。这是输入要素集和记录集中站点、停靠点或休息点的名称的外键。输入要素或记录集由 StopType 字段指定。

PickupQuantities

从停靠点接收的货物量或人员数量。如果停靠点接收多个维度,请用空格分隔每个数量。

此字段的单位不作保存。应当根据输入输入路径的“数量”字段及输入停靠点的 PickupQuantities 和 DeliveryQuantities 字段的方式来解释这些单位。(所有这些字段都应当使用相同的维度单位和数量进行输入。)

DeliveryQuantities

停靠点接收的货物量或人员数量。如果停靠点接收多个维度,请用空格分隔每个数量。

此字段的单位不作保存。应当根据输入输入路径的“数量”字段及输入停靠点的 PickupQuantities 和 DeliveryQuantities 字段的方式来解释这些单位。(所有这些字段都应当使用相同的维度单位和数量进行输入。)

StopType

指示停靠点表示站点、停靠点或休息点。

此字段保存编码值,可用以下方式解释:

  • 停靠点 (0)
  • 站点 (1)
  • 休息点 (2)

RouteName

包含停靠的路径的名称。

顺序

指定路径访问停靠点的相对顺序。

按 RouteName 和“顺序”字段排序可创建每个路径的有序停靠点列表。

FromPreviousTravelTime

从路径的上一个停靠点到当前停靠点所经历的行程时间。

该字段值的单位由时间字段单位参数(Python 的 time_units)指定。

FromPreviousDistance

沿着路径从上一个停靠点到当前停靠点的距离。

该字段值的单位由“距离字段单位”参数(Python 的 distance_units)指定。

ArriveCurbApproach

指示车辆到达停靠点时路边通道位于车辆哪一侧。

DepartCurbApproach

指示车辆离开停靠点时路边通道位于车辆哪一侧。

ArriveTime

路径每天到达停靠点的时间。

使用时区配置网络数据集时,时间值对应于停靠点所在的时区;否则,其将与求解分析的电脑上配置的时区对应。

DepartTime

路径每天离开停靠点的时间。

使用时区配置网络数据集时,时间值对应于停靠点所在的时区;否则,其将与求解分析的电脑上配置的时区对应。

ArriveTimeUTC

路径每天到达停靠点的时间。时间值以协调世界时间 (UTC) 形式给出。

如果未在网络数据集中配置时区,此字段为空。

DepartTimeUTC

路径每天离开停靠点的时间。时间值以协调世界时间 (UTC) 形式给出。

如果未在网络数据集中配置时区,此字段为空。

WaitTime

在停靠点的等待时间或短暂停留时间。例如,如果路径必须在停靠点等待时间窗打开,将会产生一个等待时间。

ViolationTime

从停靠点的时间窗结束到路径车辆到达所经历的时间间隔。

显示停靠点

很明显,“停靠点”表不是要素类,这就是说无法通过在地图中添加此表来查看停靠点的位置。相反,需要采取额外的步骤才能在地图上显示停靠点。(下面提供了相关操作指导。)如果需要在地图上显示路径的停靠点,这种设计似乎并不必要而且困难;但是,请记住此工具的用途是创建 VRP web 服务。同样地,输出的设计也尽可能精细,从而最大程度减少服务器处理和数据传输。尽管如此,输出不会太精细;输出仍然提供了将停靠点显示为点要素所需的基本信息。

例如,要查看停靠点发生停靠的位置,将“停靠点”表与原始“停靠点”要素集(用作输入)链接。您可以通过“停靠点”表的 StopType 和“名称”字段及“停靠点”要素集的“名称”字段来选择和合并这些数据集。您可以使用类似方法查看在站点发生停靠的位置。

提示提示:

求解车辆配送 (VRP) 创建多个输入要素集,包括停靠点要素集和站点要素集。随着工具的求解,这些内存中的要素集将从 ArcMap 移除。不过,您也可以将它们添加回来。为此,请按以下步骤操作:

  1. 地理处理菜单中打开结果 窗口。
  2. 结果 窗口中,导航到您希望的要素集操作的结果。
  3. 展开合适的求解车辆配送 (VRP) 结果。
  4. 展开输入
  5. 右键单击您想要查看的要素集,然后选择添加至显示。要素集将显示在地图及内容列表中。
  6. 或者,单击内容列表 窗口上的按源列出,查看数据存储的位置。

与停靠点和站点不同,休息点并不与输入要素集关联。所以,您需要使用不同方法来显示它们。可以在分析中生成方向,选择表示要素的线,然后使用要素折点转点工具将其转换成点。

UnassignedStops 表

UnassignedStops 表列出了任何路径都无法访问的停靠点。此表还说明了停靠点无法访问的原因,以便进行必要的更改来修复这一问题。

此输出表的默认名称为 Stops,但是可以在求解之前通过更改输出未分配的停靠点名称参数 (output_unassigned_stops_name) 更改其名称。

下面列出并描述了“停靠点”表中的字段名。

字段名

描述

ObjectID

系统管理的 ID 字段。

StopType

指示停靠点表示站点、停靠点或休息点。此字段保存编码值,可用以下方式解释:

  • 停靠点 (0)
  • 站点 (1)
  • 休息点 (2)

名称

停靠点的名称。

这是输入要素集和记录集中站点、停靠点或休息点的名称的外键。输入要素或记录集由 StopType 字段指定。

ViolatedConstraints

该字段包含约束冲突的汇总,并在求解操作之后进行设置。如果某个约束存在冲突,则可将下列一个或多个冲突的组合分配给该字段。

开始行动开始行动:

表示文本描述的编码值以加括号的形式显示在以下列表中。请注意,编码值是通过将最后一个值增加一倍来增加的几何序列的一部分。可以对要编码的冲突进行各种组合。例如,将“超出容量 (2)”和“硬性路径区 (128)”的组合编码为 130 (2 +128)。

  • 超出 MaxOrderCount (1) - 预分配的停靠点无法分配给路径,因为分配停靠点会超出路径的 MaxOrderCount 字段值所指定的可分配给路径的最大停靠点数。
  • 超出 Capacities (2) - 预分配的停靠点无法分配给路径,因为分配停靠点会超出路径的 Capacities 字段值指定的总路径容量。
  • 超出 MaxTotalTime (4) - 从起始站点到终止站点的行驶时间加上在两个站点的服务和等待时间以及任何休息时间,这几个时间的总和超出了路径的 MaxTotalTime 字段值指定的路径总时间。
  • 超出 MaxTotalTravelTime (8) - 从起始站点到终止站点的行驶时间超出了路径的 MaxTotalTravelTime 字段值指定的路径总行驶时间。
  • 超出 MaxTotalDistance (16) - 从起始站点到终止站点的行驶距离超出了路径的 MaxTotalDistance 字段值指定的路径总行驶距离。
  • 硬性时间窗 (32) - 在与路径关联的起始站点、终止站点或休息点上存在硬性时间窗冲突。
  • 不匹配的特殊要求 (64) - 在目标路径上未找到停靠点所需的特殊要求。
  • 硬性路径区 (128) - 预分配给路径的停靠点未落在硬性路径区内。
  • 超出需求点对 MaxTransitTime (256) - 存在预分配给路径的需求点对,而分配该需求点对中的停靠点会超出需求点对的 MaxTransitTime 字段值所指定的需求点对的最长行驶时间。
  • 需求点对冲突 (512) - 停靠点属于某个需求点对,但无法分配给预分配的路径。
  • 不能到达 (1024) - 预分配的停靠点位于路径无法到达的网络元素上。
  • 无法插入所需的中断 (2048) - 在存在预分配的停靠点时,路径的中断的 sequence 值为空,且在未引入其他冲突的情况下,该休息点不能插入到任何位置。
  • 无法插入所需更新 (4096) - 路径超出其容量并且需要访问货物补给点;然而,在存在预分配的停靠点时,关联的货物补给点的 sequence 值为空,且在未引入其他冲突的情况下,关联的货物补给点不能插入到任何位置。
  • 超出 MaxTravelTimeBetweenBreaks (8192) - 求解程序不能在中断的 MaxTravelTimeBetweenBreaks 字段所指定的时间内插入中断。这通常是因为预先为中断分配了一个顺序,而使得无法在最长行驶时间内到达中断。

  • 超出中断 MaxCumulWorkTime (16384) - 求解程序不能在休息点的 MaxCumulWorkTime 字段所指定的时间内插入休息点。这通常是因为预先为休息点分配了一个顺序,而使得无法在最长行驶时间内到达休息点。

状态

该字段受到下面列出值的属性域的约束(括号中是它们的编码值)。

  • 正常 (0) - 已成功计算网络位置。
  • 元素不可穿越 (3) - 网络位置所在的网络元素不可穿越。网络元素受到约束属性限制时可能会发生这种情况。
  • 字段值无效 (4) - 网络位置的字段值落在分析图层的编码属性域或值域范围之外。例如,应该填写正数的位置可能存在负数。
  • 未到达 (5) - 无法通过求解程序到达网络位置。

相关主题

5/10/2014