Output from Solve Vehicle Routing Problem
The Solve Vehicle Routing Problem geoprocessing tool produces the following table and feature classes as output: Stops, UnassignedStops, Routes, Directions. Descriptions about the output tables and feature classes, and their corresponding field attributes, are described in the subsections below.
Routes feature class
The Routes line feature class represents the drivers, vehicles, and vehicle route paths of a vehicle routing problem. The default name of this output feature class is Routes, but you can give it a different name by changing the Output Routes Name parameter (output_routes_name for Python) prior to solving.
ArcGIS assigns the same coordinate system that the underlying network dataset uses for the Routes feature class. This can be controlled by specifying a value for the Output Coordinate System geoprocessing environment.
The field names of the Routes feature class are listed and described below.
Field name | Description |
---|---|
ObjectID | The system-managed ID field. |
Name | The name of the route. |
Shape | The geometry field indicating the shape of the route. Use the Populate Route Lines parameter (populate_route_lines for Python) to choose whether to populate this field. The Routes feature class is always created and populated with data during the execution of Solve Vehicle Routing Problem. However, the Populate Route Lines parameter (populate_route_lines for Python) allows you to choose whether to generate and store Shape field values for the line features. Not populating Shape field values makes the solve operation faster and reduces the size of server-client data exchanges; but people often want to visualize routes on a map, so populating the Shape field may be required. |
ViolatedConstraints | This field contains a summary of violated constraints and is set after a solve operation. If a route causes a constraint to be violated, a combination of one or more of the violations listed below could be assigned to the field. Dive-in: The coded value that represents the text description is shown in the list below in parentheses. Notice that the coded values are part of a geometric sequence that increases by doubling the last value. This allows various combinations of violations to be coded. For instance, the combination of Capacities exceeded (2) and Hard route zone (128) is coded as 130 (2 +128).
|
OrderCount | The number of orders assigned to the route. |
TotalCost | The total operating cost of the route, which is the sum of the following field values:
|
RegularTimeCost | The cost of regular work time, excluding any unpaid breaks. |
OvertimeCost | The cost of overtime work, excluding any unpaid breaks. |
DistanceCost | The distance cost component obtained by multiplying the TotalDistance and CostPerUnitDistance field values. This field value is set to zero if a distance attribute is not specified prior to solving. |
TotalTime | The total route duration. This includes travel times as well as service and wait times at orders, depots, and breaks. The TotalTime value is the sum of the following field values:
The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
TotalOrderServiceTime | The total service time spent at all orders on the route. The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
TotalBreakServiceTime | The total service time spent at all breaks on the route. The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
TotalTravelTime | The total travel time for the route. The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
TotalDistance | The total travel distance for the route. The unit for this field value is specified by the Distance Field Units parameter (distance_units for Python). This field value is set to zero if a distance attribute is not specified prior to solving. |
StartTime | The starting time of the route. The route may start before the beginning of its start depot's time window, in which case there is a wait time at the starting depot. When using traffic data that covers multiple time zones, the time zone for this time-of-day value is taken from the network element on which the starting depot is located. |
EndTime | The ending time of the route. The route ends upon completion of service at the ending depot. When using traffic data that covers multiple time zones, the time zone for this time-of-day value is taken from the network element on which the ending depot is located. |
TotalWaitTime | The total wait time at all orders, depots, and breaks on the route. The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
TotalViolationTime | The total violation time at all orders and breaks on the route. The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
RenewalCount | For a route with renewals, this is equal to the number of stops at depots for the purpose of renewing a vehicle, that is, loading or unloading a vehicle. |
TotalRenewalServiceTime | For a route with renewals, the total service time spent at all renewal visits on the route. The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
Directions feature class
Directions is a line feature class representing turn-by-turn instructions to help drivers follow their assigned routes. The default name of this output feature class is Directions, but you can give it a different name by changing the Output Directions Name parameter (output_directions_name for Python) prior to solving. Also, the Solve Vehicle Routing Problem tool always creates the Directions feature class; however, you can use the Populate Directions parameter (populate_directions for Python) to choose whether to populate the feature class with features during solve. By default, it is not populated. If you don't need directions, you can significantly reduce solve times and the amount of data that is transferred from servers to clients.
ArcGIS assigns the same coordinate system that the underlying network dataset uses to the Directions feature class. This can be controlled by specifying a value for the Output Coordinate System geoprocessing environment.
The field names of the Directions feature class are listed and described below.
Field Name | Description |
---|---|
ObjectID | The system-managed ID field. |
Shape | The geometry field indicating the shape of the lines. |
RouteName | The name of the route that the driving action applies to. |
ArriveTime | The time of day to initiate the given driving action. If the route spans multiple days, the date and time of day are displayed. |
Type | This field is for advanced users who want to customize the driving-directions text. Most users can meet their requirements by ignoring this field and referring to the Text field instead. Type refers to a constant in one of two enumerations: esriDirectionsManueverType or esriDirectionsStringType. (See the SubItemType field description to learn which enumeration the Type value refers to.) You can see a list of constant values by searching the SDK of your choice for the enumeration name. |
SubItemType | This field is for advanced users who want to customize the driving-directions text. Most users can meet their requirements by ignoring this field and referring to the Text field instead. SubItemType works in combination with Type to create the driving direction shown in the Text field. The SubItemType field specifies whether the Type field refers to a constant value in the esriDirectionsManueverType enumeration or the esriDirectionsStringType enumeration.
|
Text | A text description of the driving direction. |
ElapsedTime | The time elapsed from when the current driving direction starts until the next one starts, or until the route ends for the last driving direction. Some driving directions include extra records for service time, violation time, and so on. In these cases, the elapsed time is replicated for each record. If you want to sum the total elapsed time, select those records with a Type value of 1 and sum those records. The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
DriveDistance | The distance from where the current driving direction occurs to where the next one occurs, or to where the route ends for the last driving direction. This value is zero for driving directions that occur at the same location where the next one begins. |
Stops table
The Stops table provides information about stops made at depots, orders, and breaks. The information includes which routes make the stops, the arrival and departure times, and the stop sequence.
The default name of this output table is Stops, but you can give it a different name by changing the Output Stops Name parameter (output_stops_name for Python) prior to solving.
The field names of the Stops table are listed and described below.
Field Name | Description |
---|---|
ObjectID | The system-managed ID field. |
Name | The name of the stop. This is a foreign key to the name of the depot, order, or break in the input feature sets and record set. The input feature or record set is specified by the StopType field. |
PickupQuantities | The amount of cargo or number of people to be picked up from a stop. If multiple dimensions are delivered to a stop, each quantity is separated by a space. The units for this field aren't stored. You should interpret the units according to the way in which you entered the Quantities field of the input routes and the PickupQuantities and DeliveryQuantities fields of the input orders. (All of these fields should have been entered using the same units and number of dimensions.) |
DeliveryQuantities | The amount of cargo or number of people to be delivered to a stop. If multiple dimensions are delivered to a stop, each quantity is separated by a space. The units for this field aren't stored. You should interpret the units according to the way in which you entered the Quantities field of the input routes and the PickupQuantities and DeliveryQuantities fields of the input orders. (All of these fields should have been entered using the same units and number of dimensions.) |
StopType | Indicates whether the stop represents a depot, order, or break. The field stores a coded value which can be interpreted in the following way:
|
RouteName | The name of the route that makes the stop. |
Sequence | The relative sequence in which the assigned route visits the stop. Sorting by the RouteName and Sequence fields creates an ordered lists of stops for each route. |
FromPreviousTravelTime | The elapsed travel time from the route's previous stop to the current stop. The unit for this field value is specified by the Time Field Units parameter (time_units for Python). |
FromPreviousDistance | The distance along the route from the previous stop to the current stop. The unit for this field value is specified by the Distance Field Units parameter (distance_units for Python). |
ArriveCurbApproach | Indicates which side of the vehicle the curb is on when arriving at the stop. |
DepartCurbApproach | Indicates which side of the vehicle the curb is on when departing from the stop. |
ArriveTime | The time of day when the route arrives at the stop. When the network dataset is configured with time zones, the time-of-day value corresponds with the time zone in which the stop is located; otherwise, it corresponds with the time zone that is configured on the computer used to solve the analysis. |
DepartTime | The time of day when the route departs from the stop. When the network dataset is configured with time zones, the time-of-day value corresponds with the time zone in which the stop is located; otherwise, it corresponds with the time zone that is configured on the computer used to solve the analysis. |
ArriveTimeUTC | The time of day when the route arrives at the stop. This value is given in Coordinated Universal Time (UTC). This field is null if time zones aren't configured on the network dataset. |
DepartTimeUTC | The time of day when the route departs from the stop. This value is given in Coordinated Universal Time (UTC). This field is null if time zones aren't configured on the network dataset. |
WaitTime | The wait time or layover at the stop. For example, a wait time is incurred when a route must wait at an order for a time window to open. |
ViolationTime | The amount of time elapsed from the end of the stop's time window to the arrival of the route vehicle. |
Visualizing Stops
Clearly, the Stops table is not a feature class, which means you can't simply add the table to a map to see where the stops occur. Instead, you need to take extra steps to visualize stops on a map. (Guidance on how to accomplish this is provided below.) This design may seem unnecessarily difficult if you need to display the stops of a route on a map; however, keep in mind this tool is meant to create VRP web services. As such, the output is engineered to be as lean as possible to minimize server processing and data transferring. Nonetheless, the output is not too lean; it still provides you with the essential information needed to visualize stops as point features.
For example, to see where stops occur at orders, link the Stops table to the original Orders feature set, which was used as input. You can select and join these datasets through the StopType and Name fields on the Stops table and the Name field on the Orders feature set. You can use a similar approach for viewing where stops occur at depots.
Solve Vehicle Routing Problem creates several input feature sets, including the Orders and Depots feature sets. As the tool solves, these in-memory feature sets are removed from ArcMap. You can add them back, however. To do so, follow these steps:
- Open the Results window from the Geoprocessing menu.
- In the Results window, navigate to the results of the operation you want a feature set from.
- Expand the appropriate Solve Vehicle Routing Problem result.
- Expand Inputs.
- Right-click the feature set you want to view and choose Add to Display. The feature set appears in the map and table of contents.
- Optionally, click the List By Source button on the Table Of Contents window to see where the data is stored.
Unlike orders and depots, breaks aren't associated with an input feature set. So you need to use a different method to visualize them. You can generate directions in the analysis, select the lines that represent features, and use the Feature Vertices To Points tool to convert them to points.
UnassignedStops table
The UnassignedStops table lists the orders that couldn't be visited by any routes. It also states why the stop couldn't be visited so that you can make the necessary changes to fix the problem.
The default name of this output table is Stops, but you can give it a different name by changing the Output Unassigned Stops Name parameter (output_unassigned_stops_name) prior to solving.
The field names of the Stops table are listed and described below.
Field Name | Description |
---|---|
ObjectID | The system-managed ID field. |
StopType | Indicates whether the stop represents a depot, order, or break. The field stores a coded value which can be interpreted in the following way:
|
Name | The name of the stop. This is a foreign key to the name of the depot, order, or break in the input feature sets and record set. The input feature or record set is specified by the StopType field. |
ViolatedConstraints | This field contains a summary of violated constraints and is set after a solve operation. If a constraint is violated, a combination of one or more of the violations listed below could be assigned to the field. Dive-in: The coded value that represents the text description is shown in the list below in parentheses. Notice that the coded values are part of a geometric sequence that increases by doubling the last value. This allows various combinations of violations to be coded. For instance, the combination of Capacities exceeded (2) and Hard route zone (128) is coded as 130 (2 +128).
|
Status | This field is constrained by a domain of values, which are listed below (their coded values are shown in parentheses.
|