时间窗是路径在某个网络位置(如路径分析中的停靠点)访问的开始时间和结束时间之间的时段。 时间窗通常用于对预约或配送时间进行建模。
注:
时间窗用于描述车辆何时可以到达位置;不描述必须完成该位置处所有工作的时间段。路径、车辆配送和最后一公里配送是整合时间窗的 3 种网络分析类型。 对于路径和车辆配送,可以为特定日期、一般工作日或当前日期配置时间窗。 但是,对于最后一公里配送,只能为特定日期配置时间窗。
路径分析中的时间窗
路径求解程序尝试找到经过一系列停靠点的最低成本路径,同时遵循网络上的选定限制和所有时间窗。 如果时间窗冲突不可避免,求解程序会尝试最大程度减少总冲突时间。
路径分析中的时间窗使用 Stops 输入类中的字段定义:
网络分析类 | 时间窗字段 |
---|---|
Stops |
TimeWindowStart- 可以访问停靠点的时间窗的开始。 |
TimeWindowEnd- 可以访问停靠点的时间窗的结束。 |
如果填充了任意时间窗字段,则会在分析中自动使用时间窗。
为每个时间窗指定的时间可以使用每个输入位置的本地时区或协调世界时间 (UTC) 解释。 使用路径分析图层时,可以使用创建路径分析图层地理处理工具上的时间字段的时区参数或路径图层功能区上的参考时区下拉列表指定时间窗字段的时区。 在 arcpy.nax Python 模块中使用 Route 求解程序对象时,请使用 timeZoneForTimeWindows 属性。
使用时间窗时,无需指定分析时间,因为第一个停靠点的时间窗将用于确定路径的开始时间。 但是,如果您指定的某个时间表示驾驶员轮班的开始,则所有停靠点的到达和出发时间均会考虑此时间。 如果路径在第一个停靠点的时间窗之前开始,则将在第一个停靠点处添加等待时间。 如果路径在某个停靠点的时间窗之后开始,则将会导致冲突时间惩罚。 时间窗日期应与为路径分析时间指定的日期一致。
路径导致的任何等待时间或冲突时间都会包含在输出中。 每条路径的总等待时间和冲突时间分别位于 Routes 输出类中以 TotalWait_ 和 TotalViolation_ 为前缀的字段中。 路径上每个停靠点处的等待时间和冲突时间分别位于 Stops 输出类中以 Wait_ 和 Violation_ 为前缀的字段中。 输出 Stops 类中以 CumulWait_ 和 CumulViolation_ 为前缀的字段表示沿路径到该点为止的累积等待时间和冲突时间。
车辆配送分析中的时间窗
车辆配送求解程序尝试找到服务停靠点、执行必要的站点访问并进行必要休息的最低成本路径,同时遵循网络上的选定限制和所有时间窗。 如果时间窗冲突是允许的并且不可避免,则求解程序会尝试最大程度减少总冲突时间。
在车辆配送分析中可以使用以下字段为 Orders、Depots 和 Breaks 类定义时间窗:
网络分析类 | 时间窗字段 |
---|---|
Orders |
TimeWindowStart- 可以访问停靠点的第一个时间窗的开始 |
TimeWindowEnd- 可以访问停靠点的第一个时间窗的结束 | |
TimeWindowStart2- 可以访问停靠点的第二个时间窗的开始 | |
TimeWindowEnd2- 可以访问停靠点的第二个时间窗的结束 | |
Depots | TimeWindowStart- 可以访问站点的第一个时间窗的开始 |
TimeWindowEnd- 可以访问站点的第一个时间窗的结束 | |
TimeWindowStart2- 可以访问站点的第二个时间窗的开始 | |
TimeWindowEnd2- 可以访问站点的第二个时间窗的结束 | |
Breaks | TimeWindowStart- 可以进行休息的时间窗的开始 |
TimeWindowEnd- 可以进行休息的时间窗的结束 |
旧版本:
在 arcpy.nax Python 模块中使用方案版本 One 的 VehicleRoutingProblem 求解程序对象时,Orders 和 Depots 类中的第一个时间窗使用名为 TimeWindowStart1 和 TimeWindowEnd1 的字段定义,而不是 TimeWindowStart 和 TimeWindowEnd。
输入 Routes 类中也具有时间窗字段,用于指定路径可以开始其行程的时间段:
网络分析类 | 时间窗字段 |
---|---|
Routes |
EarliestStartTime- 路径可以开始其行程的时间窗的开始 |
LatestStartTime- 路径可以开始其行程的时间窗的结束 |
如果填充了时间窗字段,则会在分析中自动使用时间窗。 时间窗日期必须与为分析配置的默认日期一致。
为每个时间窗指定的时间可以使用每个输入位置的本地时区或协调世界时间 (UTC) 解释。 使用车辆配送分析图层时,可以使用创建车辆配送分析图层地理处理工具对话框中的时间字段的时区参数或 VRP 图层功能区上的参考时区下拉列表指定时间窗字段的时区。 在 arcpy.nax Python 模块中使用 VehicleRoutingProblem 求解程序对象时,请使用 timeZoneForTimeWindows 属性。
路径导致的任何等待时间或冲突时间都会包含在输出中。 每条路径的总等待时间和冲突时间分别位于 Routes 输出类的 TotalWaitTime 和 TotalViolationTime 字段中。 路径上每个停靠点、休息点或站点处的等待时间和冲突时间分别位于 WaitTime 和 ViolationTime 字段中。 停靠点、站点或休息点的 CumulWaitTime 和 CumulViolationTime 字段分别表示沿路径到该点为止的累积等待时间和冲突时间。
您可以在输入停靠点中设置 MaxViolationTime 和 MaxViolationTime2 字段并在输入休息点中设置 MaxViolationTime 字段,从而控制分析可以接受的时间窗冲突量。 要在建模时将时间窗视为硬性约束,即不允许出现时间窗冲突,则可以将对应的 MaxViolationTime 和 MaxViolationTime2 设置为零。
旧版本:
在 arcpy.nax Python 模块中使用方案版本 One 的 VehicleRoutingProblem 求解程序对象时,Orders 类中的 MaxViolationTime 字段名为 MaxViolationTime1。
最后一公里配送分析的时间窗
最后一公里配送求解程序尝试找到一组良好聚类且成本较低的路径以服务停靠点,同时遵循网络上的所选限制以及针对问题的约束(例如时间窗)。 如果时间窗冲突是允许的并且不可避免,则求解程序会尝试最大程度减少总冲突时间。
可以使用以下字段在 Orders 类上定义最后一公里配送分析中的时间窗:
网络分析类 | 时间窗字段 |
---|---|
Orders |
TimeWindowStart- 可以访问停靠点的时间窗的开始 |
TimeWindowEnd- 可以访问停靠点的时间窗的结束 |
输入 Routes 类中也具有时间窗字段,用于指定路径可以开始其行程的时间段:
网络分析类 | 时间窗字段 |
---|---|
Routes |
EarliestStartDate- 将与 EarliestStartTime 配合使用,用于定义路径可以开始其行程的时间窗的开始,并指定其日期部分。 |
EarliestStartTime- 将与 EarliestStartDate 配合使用,用于定义路径可以开始其行程的时间窗的开始,并指定其时间部分。 | |
StartFlexibility- 指示路径可在最早允许路径开始时间之后开始的时间量。 可使用由 TimeFieldUnits 参数指定的单位。 |
可以为 Routes 类中的每个要素或者使用 EarliestRouteStartDate 和 EarliestRouteStartTime 参数的所有要素指定 EarliestStartDate 和 EarliestStartTime。
如果填充了时间窗字段,则会在分析中自动使用时间窗。 Orders 和 Routes 类的时间窗日期必须均为具体日期,并且彼此之间的时间跨度不能超过一年。
为每个时间窗指定的时间可以使用每个输入位置的本地时区或协调世界时间 (UTC) 解释。 当使用最后一公里配送分析图层时,可以使用创建最后一公里配送分析图层地理处理工具对话框中的时间字段的时区参数或最后一公里配送图层功能区上的参考时区下拉列表指定时间窗字段的时区。 在 arcpy.nax Python 模块中使用 LastMileDelivery 求解程序对象时,请使用 timeZoneForTimeFields 属性。
路径导致的任何等待时间或冲突时间都会包含在输出中。 每条路径的总等待时间和冲突时间分别位于 Routes 输出类的 TotalWaitTime 和 TotalViolationTime 字段中。 路径上每个停靠点处的等待时间和冲突时间分别位于 WaitTime 和 ViolationTime 字段中。
可以在输入停靠点中设置 MaxViolationTime 字段,用于控制分析可以接受的时间窗冲突量。 要在建模时将时间窗视为硬性约束,即不允许出现时间窗冲突,请将 MaxViolationTime 设置为零。
时间窗示例
以下示例解释说明了用于路径分析的时间窗,此路径分析旨在查找访问三个停靠点 a、b 和 c 的最佳路径。 每个停靠点的时间窗由其 TimeWindowStart 和 TimeWindowEnd 字段指定。
路径可以在上午 8:00 到 9:00 之间的任何时间从 a 点开始,但不应在上午 9:15 之前到达 b 点。如下所示,路线在上午 9:08:24 到达 b。
由于仅应在上午 9:15 到 9:30 之间访问 b,因此路径在 b 处等待了 6 分钟 36 秒后于上午 9:15 离开。该等待时间(6.6 分钟)存储在停靠点 b 的 Wait_TravelTime 字段中并添加到路径所用的总时间中。 停靠点的 Cumul_TravelTime 字段用于存储到达停靠点所用的总时间。 b 的累积行驶时间为 15 分钟(行驶时间为 8 分钟 24 秒,为遵循停靠点 b 的时间窗而等待的时间为 6 分钟 36 秒)。
路径于上午 9:15 从停靠点 b 出发,并于上午 9:35:34 到达停靠点 c。但是,停靠点 c 的时间窗为上午 9:15 到 9:30。由于路径无法遵守停靠点 c 的时间窗,因此导致了 5 分 34 秒的冲突时间,该冲突在 Violation_TravelTime 字段中存储为 5.58 分钟。